apply FSL(Flora Software License)
authorKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:01 +0000 (14:54 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Fri, 8 Jun 2012 05:54:01 +0000 (14:54 +0900)
217 files changed:
CMakeLists.txt [new file with mode: 0755]
INSTALL [new file with mode: 0755]
LICENSE [new file with mode: 0755]
NOTICE [new file with mode: 0755]
debian/changelog [new file with mode: 0755]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0755]
debian/libug-gallery-efl-0.install.in [new file with mode: 0755]
debian/org.tizen.gallery.install.in [new file with mode: 0755]
debian/org.tizen.gallery.postinst.in [new file with mode: 0755]
debian/rules [new file with mode: 0755]
include/features/gl-albums.h [new file with mode: 0755]
include/features/gl-button.h [new file with mode: 0755]
include/features/gl-controlbar.h [new file with mode: 0755]
include/features/gl-gridview.h [new file with mode: 0755]
include/features/gl-listview.h [new file with mode: 0755]
include/features/gl-popup.h [new file with mode: 0755]
include/features/gl-progressbar.h [new file with mode: 0755]
include/gallery.h [new file with mode: 0755]
include/util/gl-db-handler.h [new file with mode: 0755]
include/util/gl-debug.h [new file with mode: 0755]
include/util/gl-ext-exec.h [new file with mode: 0755]
include/util/gl-ext-ug-load.h [new file with mode: 0755]
include/util/gl-strings.h [new file with mode: 0755]
include/util/gl-thread-util.h [new file with mode: 0755]
include/util/gl-ui-util.h [new file with mode: 0755]
include/util/gl-util.h [new file with mode: 0755]
libug/libug-gallery-efl/CMakeLists.txt [new file with mode: 0755]
libug/libug-gallery-efl/include/gallery-efl.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-albums.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-button.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-db-handler.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-debug.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-ext-ug-load.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-gridview.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-strings.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-ui-util.h [new file with mode: 0755]
libug/libug-gallery-efl/include/ge-util.h [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-button.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-check.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-edc-res.h [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-albums.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-thumbview.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-nocontents.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl-selection-info.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/edc/gallery-efl.edc [new file with mode: 0755]
libug/libug-gallery-efl/res/images/00_winset_Back.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/00_winset_Back_btn_normal.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/00_winset_Back_btn_press.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/T01_Nocontents_broken.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/T01_Nocontents_picture.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_btn_play.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_controlbar_icon_done.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/T01_grid_select_check.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_icon_lock.png [new file with mode: 0755]
libug/libug-gallery-efl/res/images/T01_icon_thumbnail_bookmark.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_main_folder_bg.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_thumbs_bg.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_title_btn.png [new file with mode: 0644]
libug/libug-gallery-efl/res/images/T01_title_btn_press.png [new file with mode: 0644]
libug/libug-gallery-efl/src/gallery-efl.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-albums.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-button.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-db-handler.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-debug.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-ext-ug-load.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-gridview.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-ui-util.c [new file with mode: 0755]
libug/libug-gallery-efl/src/ge-util.c [new file with mode: 0755]
org.tizen.gallery.desktop.in [new file with mode: 0755]
packaging/org.tizen.gallery.spec [new file with mode: 0755]
res/edc/gallery-edc-res.h [new file with mode: 0755]
res/edc/gallery.edc [new file with mode: 0755]
res/edc/gl-black-theme.edc [new file with mode: 0755]
res/edc/gl-button.edc [new file with mode: 0755]
res/edc/gl-check.edc [new file with mode: 0755]
res/edc/gl-editfield.edc [new file with mode: 0755]
res/edc/gl-entry.edc [new file with mode: 0755]
res/edc/gl-gengrid-item-albums.edc [new file with mode: 0755]
res/edc/gl-gengrid-item-thumbview.edc [new file with mode: 0755]
res/edc/gl-genlist-item-video.edc [new file with mode: 0755]
res/edc/gl-naviframe.edc [new file with mode: 0755]
res/edc/gl-nocontents.edc [new file with mode: 0755]
res/edc/gl-segment.edc [new file with mode: 0755]
res/edc/gl-selection-notification.edc [new file with mode: 0755]
res/edc/gl-toolbar.edc [new file with mode: 0755]
res/enc/conf.enc [new file with mode: 0755]
res/gallery.uri [new file with mode: 0755]
res/icon/org.tizen.gallery.png [new file with mode: 0755]
res/images/00_MessageBubble_BG_receive.png [new file with mode: 0755]
res/images/00_MessageBubble_BG_send.png [new file with mode: 0755]
res/images/00_button_01_normal.png [new file with mode: 0644]
res/images/00_button_01_normal_dim.png [new file with mode: 0644]
res/images/00_button_01_normal_press.png [new file with mode: 0644]
res/images/00_button_02_normal.png [new file with mode: 0644]
res/images/00_button_04_dim.png [new file with mode: 0644]
res/images/00_button_04_normal.png [new file with mode: 0644]
res/images/00_button_04_press.png [new file with mode: 0644]
res/images/00_button_popup_dim.png [new file with mode: 0644]
res/images/00_button_popup_focus.png [new file with mode: 0644]
res/images/00_button_popup_normal.png [new file with mode: 0644]
res/images/00_button_popup_press.png [new file with mode: 0644]
res/images/00_button_rename_press.png [new file with mode: 0644]
res/images/00_button_sweep.png [new file with mode: 0644]
res/images/00_button_sweep_dim.png [new file with mode: 0644]
res/images/00_button_sweep_press.png [new file with mode: 0644]
res/images/00_check_bg_dim.png [new file with mode: 0644]
res/images/00_grid_edit_text_bg.png [new file with mode: 0755]
res/images/00_grid_select_check.png [new file with mode: 0644]
res/images/00_winset_Back.png [new file with mode: 0755]
res/images/00_winset_Back_btn_normal.png [new file with mode: 0755]
res/images/00_winset_Back_btn_press.png [new file with mode: 0755]
res/images/00_winset_btn_sge_body.png [new file with mode: 0644]
res/images/00_winset_btn_sge_normal.png [new file with mode: 0644]
res/images/00_winset_btn_sge_normal_centre.png [new file with mode: 0644]
res/images/00_winset_btn_sge_normal_left.png [new file with mode: 0644]
res/images/00_winset_btn_sge_normal_right.png [new file with mode: 0644]
res/images/00_winset_btn_sge_press_01.png [new file with mode: 0644]
res/images/00_winset_btn_sge_press_02.png [new file with mode: 0644]
res/images/00_winset_btn_sge_press_03.png [new file with mode: 0644]
res/images/00_winset_btn_sge_press_normal.png [new file with mode: 0644]
res/images/00_winset_control_tabbar_bg.png [new file with mode: 0644]
res/images/00_winset_control_tabbar_bg_left.png [new file with mode: 0644]
res/images/00_winset_control_tabbar_bg_right.png [new file with mode: 0644]
res/images/00_winset_tabbar_focus_left.png [new file with mode: 0755]
res/images/00_winset_tabbar_focus_right.png [new file with mode: 0755]
res/images/00_winset_tabbar_press.png [new file with mode: 0755]
res/images/00_winset_tabbar_press_left.png [new file with mode: 0755]
res/images/00_winset_tabbar_press_right.png [new file with mode: 0755]
res/images/00_winset_tabbar_press_top.png [new file with mode: 0644]
res/images/T01_EditField_clear.png [new file with mode: 0644]
res/images/T01_Nocontents_broken.png [new file with mode: 0644]
res/images/T01_Nocontents_picture.png [new file with mode: 0644]
res/images/T01_Option_header_bt.png [new file with mode: 0644]
res/images/T01_Option_header_bt_dim.png [new file with mode: 0644]
res/images/T01_Option_header_bt_press.png [new file with mode: 0644]
res/images/T01_album_checkbox.png [new file with mode: 0644]
res/images/T01_album_checkbox_check.png [new file with mode: 0644]
res/images/T01_btn_gridview.png [new file with mode: 0644]
res/images/T01_btn_gridview_press.png [new file with mode: 0644]
res/images/T01_btn_play.png [new file with mode: 0755]
res/images/T01_btn_thumbnail_play.png [new file with mode: 0644]
res/images/T01_button_circle_bg_normal.png [new file with mode: 0644]
res/images/T01_button_circle_bg_normal_press.png [new file with mode: 0644]
res/images/T01_button_rename.png [new file with mode: 0644]
res/images/T01_check.png [new file with mode: 0644]
res/images/T01_checkbox.png [new file with mode: 0644]
res/images/T01_control_tabbar_bg.png [new file with mode: 0644]
res/images/T01_control_tabbar_bg_h.png [new file with mode: 0644]
res/images/T01_controlbar_icon_cancel.png [new file with mode: 0644]
res/images/T01_controlbar_icon_delete.png [new file with mode: 0644]
res/images/T01_controlbar_icon_edit.png [new file with mode: 0644]
res/images/T01_controlbar_icon_move.png [new file with mode: 0644]
res/images/T01_grid_select_check.png [new file with mode: 0644]
res/images/T01_icon_thumbnail_bookmark.png [new file with mode: 0755]
res/images/T01_list_icon_bookmark.png [new file with mode: 0755]
res/images/T01_main_folder_bg.png [new file with mode: 0644]
res/images/T01_tabbar_focus.png [new file with mode: 0644]
res/images/T01_thumbs_bg.png [new file with mode: 0644]
res/images/T01_title_btn.png [new file with mode: 0644]
res/images/T01_title_btn_press.png [new file with mode: 0644]
res/images/T01_toolbar_bg.png [new file with mode: 0644]
res/images/T01_toolbar_press.png [new file with mode: 0644]
res/images/T01_video_list_progress_bar.png [new file with mode: 0644]
res/images/T01_video_list_progress_bg.png [new file with mode: 0644]
res/images/bt_sm_base2.png [new file with mode: 0644]
res/images/copy&paste_Icon_left.png [new file with mode: 0755]
res/images/copy&paste_Icon_left_press.png [new file with mode: 0755]
res/images/copy&paste_Icon_left_top.png [new file with mode: 0755]
res/images/copy&paste_Icon_left_top_press.png [new file with mode: 0755]
res/images/copy&paste_Icon_right.png [new file with mode: 0755]
res/images/copy&paste_Icon_right_press.png [new file with mode: 0755]
res/images/copy&paste_Icon_right_top.png [new file with mode: 0755]
res/images/copy&paste_Icon_right_top_press.png [new file with mode: 0755]
res/images/gallery_btn_sge_normal.png [new file with mode: 0644]
res/images/gallery_list_icon_bookmark.png [new file with mode: 0755]
res/images/magnifier.png [new file with mode: 0644]
res/images/magnifier_line.png [new file with mode: 0644]
res/images/magnifier_noarrow.png [new file with mode: 0644]
res/images/magnifier_noarrow_line.png [new file with mode: 0644]
res/images/naviframe_optionheader.png [new file with mode: 0644]
res/images/naviframe_optionheader_arrow.png [new file with mode: 0644]
res/images/reader_handler_down.png [new file with mode: 0644]
res/images/reader_handler_up.png [new file with mode: 0644]
res/images/reader_longtap_blue.png [new file with mode: 0644]
res/images/separator_v.png [new file with mode: 0755]
res/po/CMakeLists.txt [new file with mode: 0755]
res/po/POTFILES.in [new file with mode: 0755]
res/po/de_DE.po [new file with mode: 0755]
res/po/el_GR.po [new file with mode: 0755]
res/po/en.po [new file with mode: 0755]
res/po/es_ES.po [new file with mode: 0755]
res/po/fr_FR.po [new file with mode: 0755]
res/po/it_IT.po [new file with mode: 0755]
res/po/ja_JP.po [new file with mode: 0755]
res/po/ko_KR.po [new file with mode: 0755]
res/po/nl_NL.po [new file with mode: 0755]
res/po/pt_PT.po [new file with mode: 0755]
res/po/ru_RU.po [new file with mode: 0755]
res/po/tr_TR.po [new file with mode: 0755]
res/po/zh_CN.po [new file with mode: 0755]
res/po/zh_HK.po [new file with mode: 0755]
res/po/zh_TW.po [new file with mode: 0755]
src/features/gl-albums.c [new file with mode: 0755]
src/features/gl-button.c [new file with mode: 0755]
src/features/gl-controlbar.c [new file with mode: 0755]
src/features/gl-gridview.c [new file with mode: 0755]
src/features/gl-listview.c [new file with mode: 0755]
src/features/gl-popup.c [new file with mode: 0755]
src/features/gl-progressbar.c [new file with mode: 0755]
src/gallery.c [new file with mode: 0755]
src/util/gl-db-handler.c [new file with mode: 0755]
src/util/gl-ext-exec.c [new file with mode: 0755]
src/util/gl-ext-ug-load.c [new file with mode: 0755]
src/util/gl-thread-util.c [new file with mode: 0755]
src/util/gl-ui-util.c [new file with mode: 0755]
src/util/gl-util.c [new file with mode: 0755]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..83353bc
--- /dev/null
@@ -0,0 +1,139 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(gallery C)
+
+SET(RSRC_DIR res)
+SET(EDC_DIR edc)
+SET(IMG_DIR images)
+
+SET(SRCS src/gallery.c
+ src/features/gl-albums.c
+ src/features/gl-gridview.c
+ src/features/gl-listview.c
+ src/features/gl-controlbar.c
+ src/features/gl-button.c
+ src/features/gl-popup.c
+ src/features/gl-progressbar.c
+ src/util/gl-ui-util.c
+ src/util/gl-ext-exec.c
+ src/util/gl-ext-ug-load.c
+ src/util/gl-util.c
+ src/util/gl-db-handler.c
+ src/util/gl-thread-util.c
+)
+
+SET(VENDOR "tizen")
+SET(PACKAGE ${PROJECT_NAME})
+SET(PKGNAME "org.${VENDOR}.gallery")
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons/default/small")
+SET(EDJDIR "${RESDIR}/edje")
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/util)
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include/features)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       appcore-common
+       appcore-efl
+       libmedia-service
+       media-thumbnail
+       ui-gadget
+       ecore-imf
+       ecore-x
+       eina
+       evas
+       edje
+       ecore
+       ecore-file
+       ecore-input
+       gthread-2.0
+       appsvc
+       capi-appfw-application
+       devman_haptic)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fpie")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -fpie")
+
+FIND_PROGRAM(UNAME NAMES uname)
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
+IF("${ARCH}" STREQUAL "arm")
+       ADD_DEFINITIONS("-DTARGET")
+       MESSAGE("add -DTARGET")
+ENDIF("${ARCH}" STREQUAL "arm")
+
+ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"")
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+
+ADD_DEFINITIONS("-D_USE_DLOG_")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -lm)
+
+ADD_CUSTOM_COMMAND(OUTPUT gallery.edj
+               COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${IMG_DIR}
+               ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${EDC_DIR}/gallery.edc ${CMAKE_BINARY_DIR}/gallery.edj
+               DEPENDS ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${EDC_DIR}/gallery.edc
+)
+ADD_CUSTOM_COMMAND(OUTPUT gl-black-theme.edj
+                COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${IMG_DIR}
+                ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${EDC_DIR}/gl-black-theme.edc ${CMAKE_BINARY_DIR}/gl-black-theme.edj
+                DEPENDS ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/${EDC_DIR}/gl-black-theme.edc
+)
+ADD_CUSTOM_TARGET(edj_build DEPENDS gallery.edj gl-black-theme.edj)
+ADD_DEPENDENCIES(${PROJECT_NAME} edj_build)
+#ADD_DEPENDENCIES(${PROJECT_NAME} gallery.edj)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/gallery.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/gl-black-theme.edj DESTINATION ${EDJDIR})
+
+# install desktop file & icon
+CONFIGURE_FILE(${PKGNAME}.desktop.in ${PKGNAME}.desktop)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/${PKGNAME}.desktop DESTINATION /opt/share/applications)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/icon/${PKGNAME}.png DESTINATION ${ICONDIR})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/enc/conf.enc DESTINATION ${RESDIR}/.decarta)
+
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/res/images DESTINATION ${RESDIR})
+
+# install content shortcut uri file
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/${RSRC_DIR}/gallery.uri DESTINATION /opt/share/miregex )
+
+# install application HOME directory
+#INSTALL(DIRECTORY DESTINATION /opt/apps/org.tizen.gallery/data)
+INSTALL(DIRECTORY DESTINATION /opt/apps/${PKGNAME}/data)
+
+# Share APP mo files with Gallery UG
+SET(GALLERY_UG_PROJECT_NAME ug-gallery-efl)
+
+# i18n
+ADD_SUBDIRECTORY(res/po)
+
+# UG
+ADD_SUBDIRECTORY(libug/libug-gallery-efl)
+
diff --git a/INSTALL b/INSTALL
new file mode 100755 (executable)
index 0000000..3f81c54
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,33 @@
+1. make the build directory
+
+  ex) 
+
+   $ mkdir build
+
+
+2. change the working directory to the build directory
+
+  ex)
+
+   $ cd build
+
+
+3. run 'cmake'
+
+  $ cmake ${SOURCE_DIR} -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@
+
+  ex)
+
+   $ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@
+
+   or
+
+   $ cmake ..
+
+
+4. make & make install
+
+  ex)
+
+   $ make -j 2 && make install
+
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..7ccb5b5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://www.tizenopensource.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://www.tizenopensource.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..e69de29
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..615ff15
--- /dev/null
@@ -0,0 +1,6 @@
+gallery (1.0.31) unstable; urgency=low
+
+  * Git: pkgs/g/gallery
+  * Tag: gallery_1.0.31
+
+ -- Sangjin Han <sjhan.han@samsung.com>  Thu, 27 Dec 2011 13:17:35 +0900
diff --git a/debian/compat b/debian/compat
new file mode 100644 (file)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..94512fb
--- /dev/null
@@ -0,0 +1,62 @@
+Source: gallery
+Section: misc
+Priority: extra
+Maintainer: Sangjin Han <sjhan.han@samsung.com>, Jiansong Jin <jiansong.jin@samsung.com>, Jonghyuk Lee <jhyuk47.lee@samsung.com>, Chaolong Lin <chaolong.lin@samsung.com>, Yongjun Zhao <yj123.zhao@samsung.com>, Tang Feng <feng.tang@samsung.com>
+Uploaders: Sangjin Han <sjhan.han@samsung.com>, Jiansong Jin <jiansong.jin@samsung.com>, Changsun Lee <cs78.lee@samsung.com>
+Build-Depends: debhelper (>= 5),
+                       libappcore-efl-dev,
+                       libelm-dev,
+                       libedje-dev,
+                       libevas-dev,
+                       libmedia-service-dev,
+                       libmedia-thumbnail-dev,
+                       dlog-dev,
+                       libui-gadget-dev,
+                       libss-client-dev,
+                       libail-0-dev,
+                       libappsvc-dev,
+                       capi-appfw-application-dev,
+                       libdevman-haptic-dev,
+Standards-Version: 0.4.0
+
+Package: org.tizen.gallery
+Section: misc
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends},
+                       libappcore-efl-0,
+                       libelm,
+                       libedje,
+                       libevas,
+                       libmedia-service,
+                       libmedia-thumbnail,
+                       libui-gadget-0,
+                       libss-client-0,
+                       libail-0,
+                       libappsvc-0,
+                       capi-appfw-application,
+Description: gallery UX
+
+Package: org.tizen.gallery-dbg
+Section: debug
+Architecture: any
+Depends: ${misc:Depends}, org.tizen.gallery (= ${Source-Version})
+Description: gallery application(unstripped)
+
+Package: libug-gallery-efl-0
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends},
+                       libappcore-efl-0,
+                       libelm,
+                       libedje,
+                       libevas,
+                       libmedia-service,
+                       libui-gadget-0,
+Description: gallery UG
+
+Package: libug-gallery-efl-dbg
+Section: debug
+Architecture: any
+Depends: ${misc:Depends}, libug-gallery-efl-0 (= ${Source-Version})
+Description: Gallery UG (unstripped)
+
diff --git a/debian/libug-gallery-efl-0.install.in b/debian/libug-gallery-efl-0.install.in
new file mode 100755 (executable)
index 0000000..0b036b1
--- /dev/null
@@ -0,0 +1,4 @@
+/opt/ug/lib/libug-gallery-efl.so*
+/opt/ug/res/edje/gallery-efl/*
+/opt/ug/res/images/gallery-efl/*
+/opt/ug/res/locale/*/*/ug-gallery*.mo
diff --git a/debian/org.tizen.gallery.install.in b/debian/org.tizen.gallery.install.in
new file mode 100755 (executable)
index 0000000..8e0d4f1
--- /dev/null
@@ -0,0 +1,14 @@
+@PREFIX@/bin/*
+@PREFIX@/res/locale/*
+@PREFIX@/res/locale/*/*/gallery*.mo
+@PREFIX@/res/icons/*
+@PREFIX@/res/images/*
+@PREFIX@/res/edje/*
+@PREFIX@/data
+/opt/share/applications/*
+
+# map
+@PREFIX@/res/.decarta/*
+# Add to home
+/opt/share/miregex/*
+
diff --git a/debian/org.tizen.gallery.postinst.in b/debian/org.tizen.gallery.postinst.in
new file mode 100755 (executable)
index 0000000..f3176ad
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ ${USER} == "root" ]
+then
+       # 5000 is inhouse user id
+       # do not use relative path
+       chown -R 5000:5000 @DATADIR@
+fi
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..66e8a6d
--- /dev/null
@@ -0,0 +1,115 @@
+#!/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.gallery
+RESDIR += /opt/apps/org.tizen.gallery/res
+DATADIR += /opt/apps/org.tizen.gallery/data
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+       CFLAGS += -O0
+else
+       CFLAGS += -O2
+endif
+
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -Wl,--hash-style=both
+
+CMAKE_BUILD_DIR += $(CURDIR)/cmake_build_tmp
+
+configure: configure-stamp
+configure-stamp:
+       dh_testdir
+       # Add here commands to configure the package.
+       mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \
+       CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)"
+
+       touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp
+       dh_testdir
+
+       # Add here commands to compile the package.
+       cd $(CMAKE_BUILD_DIR) && $(MAKE)
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               cat $$f > $${f%.in}; \
+               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+               sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \
+               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+       done
+
+       touch $@
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp configure-stamp
+
+       # Add here commands to clean up after the build process.
+       rm -rf $(CMAKE_BUILD_DIR)
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               rm -f $${f%.in}; \
+       done
+
+       dh_clean
+
+install: build
+       dh_testdir
+       dh_testroot
+#      dh_clean -k
+       dh_prep
+       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.gallery-dbg  --dbg-package=libug-gallery-efl-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/include/features/gl-albums.h b/include/features/gl-albums.h
new file mode 100755 (executable)
index 0000000..4b384fd
--- /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://www.tizenopensource.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 _GL_ALBUMS_H_
+#define _GL_ALBUMS_H_
+
+#include <Elementary.h>
+#include "gallery.h"
+
+Evas_Object *gl_albums_create_view(void *data, Evas_Object * parent);
+int gl_albums_update_view(void *data);
+int gl_albums_sel_album(gl_cluster * album_item);
+int gl_albums_update_items(void *data);
+int gl_albums_comeback_from_view(void *data);
+int gl_albums_change_to_view(void *data);
+int gl_albums_remove_nocontents(void *data);
+int gl_albums_del_grid_append_idler(void *data);
+int gl_albums_free_cover_thumbs(void *data);
+int gl_albums_free_data(void *data);
+
+#endif /* _GL_ALBUMS_H_ */
diff --git a/include/features/gl-button.h b/include/features/gl-button.h
new file mode 100755 (executable)
index 0000000..bc96a50
--- /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://www.tizenopensource.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 _GL_BUTTON_H_
+#define _GL_BUTTON_H_
+
+#include <Elementary.h>
+#include "gallery.h"
+
+typedef enum _gl_but_mode {
+       GL_BUT_NONE,
+       GL_BUT_DONE,
+       GL_BUT_CANCEL,
+       GL_BUT_DEL,
+       GL_BUT_RENAME,
+} gl_but_mode;
+
+typedef void (*But_Smart_Cb) (void *data, Evas_Object *obj, void *event_info); /**< Evas smart objects' "smart callback" function signature */
+
+Evas_Object *_gl_but_create_but(Evas_Object *parent, gl_but_mode mode, const char *style);
+Evas_Object *_gl_but_create_but_popup(Evas_Object *parent, const char *text, But_Smart_Cb cb_func, const void *data);
+
+#endif                         /* _GL_BUTTON_H_ */
diff --git a/include/features/gl-controlbar.h b/include/features/gl-controlbar.h
new file mode 100755 (executable)
index 0000000..c2fb8ca
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  * 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://www.tizenopensource.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 _GL_CONTROLBAR_H_
+#define _GL_CONTROLBAR_H_
+
+#include <Elementary.h>
+#include "gallery.h"
+
+Evas_Object *_gl_ctrl_get_toolbar(Elm_Object_Item *nf_it);
+Evas_Object *_gl_ctrl_create_segment(void *data, Evas_Object *parent);
+Evas_Object *_gl_ctrl_create_toolbar(void *data, Evas_Object *parent);
+
+#endif /* _GL_CONTROLBAR_H_ */
diff --git a/include/features/gl-gridview.h b/include/features/gl-gridview.h
new file mode 100755 (executable)
index 0000000..ed0be71
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+  * 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://www.tizenopensource.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 _GL_GRIDVIEW_H_
+#define _GL_GRIDVIEW_H_
+
+#include <Elementary.h>
+#include "gallery.h"
+
+
+typedef enum _gl_grid_mode
+{
+       GL_GRID_ALL,
+       GL_GRID_IMAGES,
+       GL_GRID_VIDEOS,
+       GL_GRID_ALBUMS,
+} gl_grid_mode;
+
+Evas_Object *gl_grid_create_view(void *data, Evas_Object * parent, gl_grid_mode mode);
+int gl_grid_change_to_edit(void *data);
+int gl_grid_change_to_view(void *data);
+Eina_Bool gl_grid_update_items(void *data);
+int gl_grid_update_items_cnt(void *data, int new_cnt);
+int gl_grid_set_item_size(void *data, Evas_Object * gridview);
+bool gl_grid_get_view(void *data, Evas_Object **view);
+int gl_grid_set_nocontents(void *data, Evas_Object *noc);
+int gl_grid_clear_view(void *data);
+int gl_grid_idler_append_items(void *data);
+void gl_grid_sel_cb(void *data, Evas_Object * obj, void *event_info);
+void gl_grid_item_mouse_down(void *data, Evas * e, Evas_Object * obj, void *event_info);
+void gl_grid_item_mouse_up(void *data, Evas * e, Evas_Object * obj, void *event_info);
+
+
+#endif /* _GL_GRIDVIEW_H_ */
diff --git a/include/features/gl-listview.h b/include/features/gl-listview.h
new file mode 100755 (executable)
index 0000000..88e53c3
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+  * 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://www.tizenopensource.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 _GL_LISTVIEW_H_
+#define _GL_LISTVIEW_H_
+
+#include <Elementary.h>
+#include "gallery.h"
+
+Evas_Object *gl_list_create_view(void *data, Evas_Object * parent);
+int gl_list_update_view(void *data);
+int gl_list_change_to_edit(void *data);
+int gl_list_change_to_view(void *data);
+int gl_list_clear_view(void *data);
+int _gl_list_clear_data(void *data);
+
+#endif /* _GL_LISTVIEW_H_ */
diff --git a/include/features/gl-popup.h b/include/features/gl-popup.h
new file mode 100755 (executable)
index 0000000..6aaba5a
--- /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://www.tizenopensource.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 _GL_POPUP_H_
+#define _GL_POPUP_H_
+
+#define GL_POPUP_STRING_MAX 256
+
+typedef enum _gl_popup_mode {
+       GL_POPUP_NOBUT,
+       GL_POPUP_NOBUT_1S,
+       GL_POPUP_NOBUT_MOV_DEL,
+       GL_POPUP_NOBUT_ENTRY,
+       GL_POPUP_NOBUT_APPEXIT,
+       GL_POPUP_ONEBUT,
+       GL_POPUP_TWOBUT,
+       GL_POPUP_ALBUM_NEW_EMPTY,
+       GL_POPUP_ALBUM_NEW_DUPLICATE,
+       GL_POPUP_ALBUM_NEW_INVALID,
+       GL_POPUP_ALBUM_RENAME_EMPTY,
+       GL_POPUP_ALBUM_RENAME_DUPLICATE,
+       GL_POPUP_ALBUM_RENAME_INVALID,
+       GL_POPUP_ALBUM_DELETE,
+       GL_POPUP_THUMB_MOVE,
+} gl_popup_mode;
+
+int gl_popup_create_albums_del_popup(void *data);
+int gl_popup_create_popup(void *data, gl_popup_mode mode, char *desc);
+int gl_popup_create_title_popup(void *data, gl_popup_mode mode, char *title,
+                               char *desc);
+int gl_popup_update_content(void *data, gl_popup_mode mode);
+
+#endif                         /* _GL_POPUP_H_ */
diff --git a/include/features/gl-progressbar.h b/include/features/gl-progressbar.h
new file mode 100755 (executable)
index 0000000..0b2edde
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  * 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://www.tizenopensource.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 _GL_PROGRESSBAR_H_
+#define _GL_PROGRESSBAR_H_
+
+int gl_pb_add_pbar_timer(void *data);
+int gl_pb_make_thread_pbar(void *data, Evas_Object * parent, char *title);
+int gl_pb_refresh_thread_pbar(void *data, int cur_cnt, int total_cnt);
+int gl_pb_del_pbar(void *data);
+Evas_Object *gl_pb_add_list_pbar(Evas_Object *parent, const double ratio);
+Evas_Object *gl_pb_make_pbar(void *data, Evas_Object * parent, char *state);
+
+#endif /* _GL_PROGRESSBAR_H_ */
diff --git a/include/gallery.h b/include/gallery.h
new file mode 100755 (executable)
index 0000000..4ff43f5
--- /dev/null
@@ -0,0 +1,556 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/*
+* About launching gallery base on appsvc
+*
+* @ Sample code:
+* @code
+*      #include <appsvc.h>
+*
+*      static void cb_func(bundle *b, int request_code,
+*                              appsvc_result_val result, void *data)
+*      {
+*              if (result == APPSVC_RES_OK)
+*              {
+*                      const char *path = appsvc_get_data(b, "path");
+*                      DEBUG("return path of selected files: %s", path);
+*              }
+*      }
+*
+*      ...
+*      {
+*              int ret = -1;
+*              bundle *b = NULL;
+*
+*              b = bundle_create();
+*
+*              appsvc_set_operation(b, APPSVC_OPERATION_PICK);
+*              appsvc_set_mime(b, GL_MIME_IMAGE_ALL);
+*              ret = appsvc_run_service(b, 0, cb_func, NULL);
+*      }
+* @endcode
+*
+* About services provided.
+*
+*      1. APPSVC_OPERATION_VIEW
+*
+*      (1.1) album ID
+*      In this case, for the album with the specified id, the thumbnail
+*      view will be displayed
+*
+*      @ Sample Code (view album ALL ) :
+*
+*              appsvc_set_operation(b, APPSVC_OPERATION_VIEW);
+*              appsvc_add_data(b, "album-id", "-1");
+*              appsvc_run_service(b, 0, cb_func, NULL);
+*
+*      2. APPSVC_OPERATION_PICK
+*
+*      (2.1) file selection
+*      In this case, after image(s) tapped, it will be added to list and
+*      return path(s) strings to caller if done button tapped.
+*
+*      You can decide to select one file or multiple files by :
+*              appsvc_add_data( b, "launch-type", "select-one");
+*              appsvc_add_data( b, "launch-type", "select-multiple");
+*      Note that, default "launch-type" is "select-one" even it is not set.
+*
+*      You can decide the file types by
+*              image only:  appsvc_set_mime(b, GL_MIME_IMAGE_ALL);
+*              video only:   appsvc_set_mime(b, GL_MIME_VIDEO_ALL);
+*      Note that, file-type is optional, the default type is all
+*      (image and video) even it is not set.
+*
+*      @ Sample Code (slect one image) :
+*
+*              appsvc_set_operation(b, APPSVC_OPERATION_PICK);
+*              appsvc_set_mime(b, GL_MIME_IMAGE_ALL);
+*              appsvc_run_service(b, 0, cb_func, NULL);
+*
+*      (2.2) album selection
+*      In this case, after album tapped, it will return album's id to caller.
+*              appsvc_add_data(b, "launch-type", "select-album");
+*
+*      @ Sample code (select one album) :
+*
+*              appsvc_set_operation(b, APPSVC_OPERATION_PICK);
+*              appsvc_add_data(b, "launch-type", "select-album");
+*              appsvc_run_service(b, 0, cb_func, NULL);*
+*
+*      (2.3) image setas
+*      It's added for wallpaper setting and contact caller ID setting, only
+*      support image file type. If caller pass "select-setas", after image
+*      tapped, image viewer would be invoke, then user can apply setting
+*      in image viewer.
+*              appsvc_add_data(b, "launch-type", "select-setas");
+*
+*      2.3.1)"setas-type"
+*      And for set-as case, bundle parameter "setas-type" is used to specify
+*      different kind of setting, there are two set-as types:
+*              a)"wallpaper"
+*              This is for wallpaper setting.
+*              b)"callerid"
+*              This is for contact caller ID setting.
+*              And there are another two bundle parameters for callerid,
+*              both of them are optional , that is:
+*                      b1)"callerid-size"
+*                              It's added to set the size of caller ID, f.e.
+*                              If you want to set the size as 200x200,
+*                              you can set bundler parameter like :
+*                                      appsvc_add_data( b, "callerid-size", "200" );
+*                      b2)"callerid-path"
+*                              It's added to specify the saved path of call
+*                              ID, and note that this is a full path, f.e..
+*                              You can pass path string like :
+*                                      appsvc_add_data( b, "callerid-path",
+*                              "/opt/media/test_folder/test_caller_id_1.jpg");
+*
+*      @ Sample code ( set caller id ) :
+*
+*              appsvc_set_operation(b, APPSVC_OPERATION_PICK);
+*              appsvc_set_mime(b, GL_MIME_IMAGE_ALL);
+*              appsvc_add_data(b, "launch-type", "select-setas");
+*              appsvc_add_data(b, "setas-type", "callerid");
+*              appsvc_add_data(b, "callerid-size", "200");
+*              appsvc_add_data(b, "callerid-path", "/opt/media/test/test1.jpg");
+*              appsvc_run_service(b, 0, cb_func, NULL);*
+*
+*/
+
+#ifndef _GALLERY_H_
+#define _GALLERY_H_
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <pthread.h>
+#include <bundle.h>
+#include "gl-db-handler.h"
+#include <appcore-common.h>
+
+
+
+#ifdef _cplusplus
+extern "C"
+{
+#endif
+
+#if !defined(APPDIR)
+#  define APPDIR "/opt/apps/org.tizen.gallery"
+#endif
+
+#if !defined(PACKAGE)
+#  define PACKAGE "gallery"
+#endif
+
+#if !defined(LOCALEDIR)
+#  define LOCALEDIR APPDIR"/res/locale"
+#endif
+
+#if !defined(EDJDIR)
+#  define EDJDIR APPDIR"/res/edje"
+#endif
+
+#if !defined(IMAGEDIR)
+#  define IMAGEDIR APPDIR"/res/images/"
+#endif
+
+#define PKGNAME_GALLERY "org.tizen.gallery"
+
+/******** EDJ File path ********/
+
+#define GL_EDJ_FILE EDJDIR "/" PACKAGE ".edj"
+#define GL_BLACK_THEME_EDJ_FILE EDJDIR "/gl-black-theme.edj"
+
+
+/******** Groups name ********/
+
+#define GL_GRP_VIEW_LAYOUT "gallery/view_layout"
+#define GL_GRP_SEGMENT "gallery/segment_layout"
+#define GL_GRP_ENTRY "gallery/entry"
+#define GL_GRP_PHOTOFRAME "photoframe"
+
+/******* Part name ***********/
+
+#define GE_NAVIFRAME_PREB_BTN "prev_btn" //ELM_NAVIFRAME_ITEM_PREV_BTN
+#define GE_NAVIFRAME_TITLE_RIGHT_BTN "title_right_btn" //ELM_NAVIFRAME_ITEM_TITLE_RIGHT_BTN
+#define GE_NAVIFRAME_TITLE_LEFT_BTN "title_left_btn" //ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN
+#define GE_NAVIFRAME_CONTROLBAR "controlbar" //ELM_NAVIFRAME_ITEM_CONTROLBAR
+
+/******** Style name ********/
+
+#define GL_NOCONTENTS_STYLE "gallery/full"
+#define GL_CLASS_GENGRID "gengrid"
+#define GL_BUTTON_STYLE_RENAME "gallery/rename"
+#define GL_BUTTON_STYLE_NAVI_TITLE "naviframe/title/gallery"
+#define GL_BUTTON_STYLE_SWEEP "sweep/gallery"
+/* Button object style of previous button of naviframe */
+#define GL_BUTTON_STYLE_NAVI_PRE "naviframe/back_btn/gallery"
+#define GL_CHECKBOX_STYLE_GRID "gallery/grid"
+#define GL_CHECKBOX_STYLE_DEFAULT "gallery/default"
+#define GL_GENLIST_STYLE_DEFAULT GL_CHECKBOX_STYLE_DEFAULT
+#define GL_CONTROLBAR_STYLE_NAVI "naviframe"
+
+/******** Image path ********/
+
+#define GL_CAPTURE_IMG_PATH "org.tizen."PACKAGE
+#define GL_APP_DEFAULT_ICON_DIR APPDIR"/res/icons/default/small"
+#define GL_DEFAULT_ICON GL_APP_DEFAULT_ICON_DIR"/org.tizen.gallery.png"
+#define GL_DEFAULT_THUMB_ICON IMAGEDIR"T01_Nocontents_broken.png"
+#define Gl_VIDEO_PLAY_ICON IMAGEDIR"T01_btn_thumbnail_play.png"
+#define GL_THUMB_BOOKMARK IMAGEDIR"T01_icon_thumbnail_bookmark.png"
+#define GL_LIST_BOOKMARK IMAGEDIR"T01_list_icon_bookmark.png"
+
+#define GL_CBAR_ICON_EDIT IMAGEDIR"T01_controlbar_icon_edit.png"
+#define GL_CBAR_ICON_CANCEL IMAGEDIR"T01_controlbar_icon_cancel.png"
+#define GL_CBAR_ICON_DELETE IMAGEDIR"T01_controlbar_icon_delete.png"
+#define GL_CBAR_ICON_MOVE IMAGEDIR"T01_controlbar_icon_move.png"
+
+/******** String ********/
+
+#define GL_SEPERATOR_BT '?'
+
+/* MIME type */
+#define GL_MIME_IMAGE_ALL      "image/*"
+#define GL_MIME_VIDEO_ALL      "video/*"
+
+/******** Numerical value ********/
+
+/* Window width and height */
+#define GL_WIN_WIDTH   720 // 480
+#define GL_WIN_HEIGHT  1280 // 800
+
+/* Specified ID for customed items, which don't exist in DB */
+#define GL_ALBUM_ALL_ID "GALLERY_ALBUM_ALL_ALBUMS_ID"
+/* There are 7 thumbnails of 'Camera shots' and 'All' cover, but 4 for normal albums */
+#define GL_ALBUM_COVER_THUMB_NUM 7
+/* Normal albums cover have maximum 4 thumbnails */
+#define GL_ALBUM_COVER_THUMB_NUM_SEC 4
+
+/* Size of thumbnails in gridview */
+#define GL_GRID_ITEM_SIZE_W 178//120
+#define GL_GRID_ITEM_SIZE_H    182
+/* Thumbnail would be enlarged if medias count is less than 7 */
+#define GL_GRID_ITEM_ZOOM_LEVEL_01             4
+#define GL_GRID_ITEM_ZOOM_LEVEL_02             2
+#define GL_GRID_ITEM_ZOOM_LEVEL_01_CNT         1
+#define GL_GRID_ITEM_ZOOM_LEVEL_02_CNT         6
+
+/* String length of mtye item id */
+#define GL_MTYPE_ITEN_ID_LEN_MAX 37
+
+/* String length of album name */
+#define GL_ALBUM_NAME_LEN_MAX GL_FILE_NAME_LEN_MAX
+
+#define GL_DATE_INFO_LEN_MAX 256
+#define GL_POPUP_DESC_LEN_MAX 256
+#define GL_EXT_STR_COUNT_LEN 20
+
+/* Maximum number of entry string, 255 Chars of album name (linux system) */
+#define GL_ENTRY_STR_CHAR_MAX 255
+
+/* 1900 */
+#define GL_DEFAULT_YEAR 1900
+/* 1s=1000ms */
+#define GL_TIME_MSEC_PER_SEC 1000
+/*1s = 1000000us*/
+#define GL_TIME_USEC_PER_SEC 1000000L
+/* 1ms=1000us */
+#define GL_TIME_USEC_PER_MSEC 1000
+/* 1min=60s */
+#define GL_TIME_SEC_PER_MIN 60
+/* 1h=60min */
+#define GL_TIME_MIN_PER_HOUR 60
+/* 1h=(60x60)s */
+#define GL_TIME_SEC_PER_HOUR (GL_TIME_MIN_PER_HOUR * GL_TIME_SEC_PER_MIN)
+
+/* itoa length max */
+#define GL_INTERGER_LEN_MAX 12 // 1(sign) + 10(2^31) + 1(NULL)
+
+/*     File system related String definition   */
+#define GL_ROOT_PATH_PHONE             "/opt/media"
+#define GL_ROOT_PATH_MMC       "/opt/storage/sdcard"
+#define GL_DEFAULT_PATH_IMAGES      "/Images and videos"
+
+/******** Enumeration ********/
+
+typedef enum _gl_aul_launch_type
+{
+       GL_AUL_T_NONE,
+       GL_AUL_T_SELECT_ONE,
+       GL_AUL_T_SELECT_MULTIPLE,
+       GL_AUL_T_SELECT_IMFT,
+       GL_AUL_T_SELECT_SETAS,
+       GL_AUL_T_SELECT_ALBUM,
+       GL_AUL_T_VIEW_ALBUM,
+} gl_aul_launch_type;
+
+typedef enum {
+       GL_AUL_SETAS_T_NONE,
+       GL_AUL_SETAS_T_WALLPAPER,
+       GL_AUL_SETAS_T_CALLER_ID,
+} gl_aul_setas_type;
+
+typedef enum _gl_aul_file_type
+{
+       GL_AUL_FILE_T_NONE,
+       GL_AUL_FILE_T_IMAGE,
+       GL_AUL_FILE_T_VIDEO,
+       GL_AUL_FILE_T_ALL,
+} gl_aul_file_type;
+
+typedef enum _gl_view_mode
+{
+       GL_VIEW_NONE,
+       GL_VIEW_ALBUMS,
+       GL_VIEW_ALBUMS_EDIT,
+       GL_VIEW_ALBUMS_RENAME,
+       GL_VIEW_THUMBS,
+       GL_VIEW_THUMBS_EDIT,
+       GL_VIEW_VIDEOLIST,
+       GL_VIEW_VIDEOLIST_EDIT,
+} gl_view_mode;
+
+typedef enum _gl_ctrl_seg_mode
+{
+       GL_CTRL_SEG_ALL,
+       GL_CTRL_SEG_IMAGES,
+       GL_CTRL_SEG_VIDEOS,
+       GL_CTRL_SEG_CNT
+} gl_ctrl_seg_mode;
+
+typedef enum _gl_app_exit_mode
+{
+       GL_APP_EXIT_NONE,
+       GL_APP_EXIT_MASS_STORAGE,
+} gl_app_exit_mode;
+
+typedef enum _gl_entry_mode
+{
+       GL_ENTRY_NONE,
+       GL_ENTRY_NEW_ALBUM,
+} gl_entry_mode;
+
+
+/******** Structure ********/
+
+typedef struct
+{
+       Elm_Genlist_Item_Class videolic;        /* Genlist item class of list view */
+       Evas_Object *video_view;
+       Evas_Object *video_nocontents;
+       int videos_cnt;                                         /* Media items count append to listview */
+       /* UUID of item selected for playing */
+       char *played_uuid;
+} gl_list_info;
+
+typedef struct
+{
+       Evas_Coord x;
+       Evas_Coord y;
+       bool b_pressed;
+} gl_grid_touch_info;
+
+typedef struct
+{
+       Elm_Gengrid_Item_Class thumbgic;        /* Gengrid item class of thumbnails view */
+       Evas_Object *edit_view;
+       Evas_Object *edit_layout;
+       Evas_Object *layout;
+       Evas_Object *all_view;
+       Evas_Object *all_nocontents;
+       Evas_Object *image_view;
+       Evas_Object *image_nocontents;
+
+       /* edit item */
+       Elm_Object_Item *edit_it;
+
+       /* Naviframe item pushed to stack */
+       Elm_Object_Item *nf_it;
+       Elm_Object_Item *nf_it_edit;
+       gl_grid_touch_info touch_info;  /* Added for shrink effect while select thumbnail */
+       /* It's thumbnails icon size, not grid item size */
+       int icon_size;
+       Ecore_Idler *append_idler;              /* Use idler to append other medias to gridview */
+                                                                               /* if album contains more than (GL_FIRST_VIEW_END_POS+1) medias */
+       int grid_view_mode;                                     /* Types: gl_grid_mode; */
+                                                                               /* 1. Indicate grid view mode of thumbnails view */
+                                                                               /* 2. Set types for creating nocontents view */
+       int thumbs_cnt;                                         /* Media items count appended to gridview */
+       int updated_thumbs_cnt;                         /* Media items count appended to gridview while refreshing */
+       bool back_to_normal;                            /* When back from edit mode, reset checkbox state */
+} gl_grid_info;
+
+typedef struct
+{
+       bool app_called_by_me;                          /* Indicates if any application invoked by Gallery */
+       struct ui_gadget *ug_called_by_me;
+       void *ug_login_data;
+       int sort_type;                                          /* Types: minfo_media_sort_type; pass it to imageviewer */
+       struct ui_gadget *gallery_ug_called_by_me;      /* The gallery-ug called by Gallery for appsvc */
+} gl_ug_info;
+
+
+typedef struct
+{
+       Elm_Gengrid_Item_Class albumgic;        /* Gengrid item class of albums view */
+       Elm_Gengrid_Item_Class albumgic_blue;   /* Gengrid item class of albums view */
+       Evas_Object *layout;                    /* Albums view layout object */
+       Evas_Object *view;                      /* Albums view object */
+       Evas_Object *edit_layout;               /* Albums view layout object */
+       Evas_Object *edit_view;                 /* Albums view object */
+       Evas_Object *nocontents;                /* Nocontents object */
+       /* Naviframe item pushed to stack */
+       Elm_Object_Item *nf_it;
+       Elm_Object_Item *nf_it_edit;
+       /* edit item */
+       Elm_Object_Item *edit_it;
+       /* State of active segment: all, image or video */
+       int seg_mode;
+
+       gl_item *cover_thumbs[GL_ALBUM_COVER_THUMB_NUM];        /* Media items of album cover */
+       gl_cluster *current_album;                      /* Album selected for showing thumbnails view/list view */
+       /* Album selected for rename/open locked album */
+       gl_cluster *selected_album;
+       /* Save destination album id while move/save */
+       char *move_album_id;
+       char new_album_name[GL_ALBUM_NAME_LEN_MAX];
+       Eina_List *selected_albums_elist;       /* List of all selected albums */
+       gl_cluster_list *cluster_list;          /* List of all albums */
+       int albums_cnt;                                         /* Albums count appended to gridview */
+       int album_medias_cnt;                           /* Media items count of a album, it is showed in album cover */
+       bool update_albums_list;                        /* Flag indicate to update albums list when back to normal view. */
+                                                                               /* 1. MMC Inserted/Removed in thumbnails edit mode; */
+       char dest_folder[GL_DIR_PATH_LEN_MAX];  /* The full path of destination album of movement */
+       bool move_new_album;                            /* True: move medias to album newly created, */
+                                                                               /* False: move to album already created */
+                                                                               /* Variables below are related to gallery launching */
+       bundle *recv_bundle;                    /* The bundle received when app_reset */
+       bool gallery_launched;
+       bool aul_launch_by_mime;
+       int aul_launch_type;
+       int aul_file_type;
+       int aul_setas_type;
+       char *aul_album_id;
+       int aul_contact_id;
+       char* aul_homescreen_path;
+       char* aul_lockscreen_path;
+       char* aul_callid_size;
+       char* aul_callid_path;
+
+       Ecore_Idler *create_albums_idler;       /* Use idler to append albums to albums view */
+} gl_album_info;
+
+typedef struct
+{
+       Evas_Object *editfield;
+       Evas_Object *imf_ly;
+       Evas_Object *imf_entry;
+       Ecore_IMF_Context *imf_context;
+       int entry_mode;                                                 /* Type: gl_entry_mode; Indicate usage of entry */
+       /* Button 'Done' in new album view */
+       Evas_Object *done_btn;
+       /* Handle for play vibration */
+       int haptic_handle;
+       /* Timer for closing vibration */
+       Ecore_Timer *vibration_timer;
+} gl_entry_info;
+
+typedef struct
+{
+       Elm_Genlist_Item_Class popuplit;                /* Genlist item class of list view in popupinfo.popup */
+       Evas_Object *popup;
+       int popup_mode;
+       char popup_item_label[GL_ALBUM_NAME_LEN_MAX];/* Selected item label of list in popupinfo.popup */
+       /* Selectioninfo popup */
+       Evas_Object *selinfo;
+       Evas_Object *selinfo_ly;
+       Ecore_Timer *del_timer;
+} gl_popup_info;
+
+typedef struct {
+       Eina_List *medias_elist;        /* List of all selected medias of a album */
+       int images_cnt; /* Images count selected */
+} gl_selected_info;
+
+typedef struct {
+       Evas_Object *pbar_popup;
+       Evas_Object *pbar;
+       Evas_Object *status_label;
+       Ecore_Timer *pbar_timer;
+       /**
+       * After progressbar showed completely, use timer to
+       * emit next signal to write pipe to continue to operate medias.
+       */
+       Ecore_Timer *start_thread_timer;
+       /**
+       * After thread operation done, use idler to
+       * delete progressbar after it's showed completely(status is 100%).
+       */
+       Ecore_Idler *del_pbar_idler;
+       Ecore_Pipe *sync_pipe;                          /* Pipe for communication between main and child thread */
+       pthread_mutex_t pbar_lock;                      /* Lock for state of 'Cancel' button */
+       pthread_mutex_t refresh_lock;           /* Lock for progressbar refreshing */
+       pthread_cond_t refresh_cond;            /* Condition for progressbar refreshing */
+       int refresh_flag;                                       /* Indicates progressbar updated or not while moving or deleting */
+       int pbar_cancel;                                        /* State of 'Cancel' button on progressbar popup */
+       /* Medias count already operated */
+       int finished_cnt;
+} gl_pbar_info;
+
+typedef struct
+{
+       Evas_Object *win;
+       double win_scale;
+       Evas_Object *ly_main;
+       Evas_Object *navi_bar;
+       Evas_Object *bg;
+       int view_mode;                                          /* Type: gl_view_mode; Indicate view mode of whole application */
+       Ecore_Timer *ums_update_timer;          /* Timer handler for update albums view if usb was disconnected in UMS mode */
+       int app_exit_mode;
+       bool reentrant;
+
+       MediaSvcHandle *db_handle;                      /* media svc handle */
+       Eina_List *medias_elist;                        /* List of all medias of a album */
+       int medias_cnt;                                         /* Count of all medias of a album */
+       int medias_op_type;                                     /* Type: Move or Delete medias */
+       int mmc_state;                                          /* MMC state(Inserted, Removed) */
+       Ecore_Job *rename_album_job;
+} gl_main_info;
+
+
+struct _gl_appdata
+{
+       gl_main_info maininfo;                  /* Global variables about global info */
+       gl_album_info albuminfo;                /* Global variables about albums view */
+       gl_grid_info gridinfo;                  /* Global variables about thumbnails view */
+       gl_list_info listinfo;                  /* Global variables about videos list view */
+       gl_entry_info entryinfo;                /* Global variables about entry */
+       gl_popup_info popupinfo;                /* Global variables about popup */
+       gl_pbar_info pbarinfo;                  /* Global variables about progressbar */
+       gl_ug_info uginfo;                              /* Global variables about ug */
+       gl_selected_info selectedinfo;  /* Global variables about files selected */
+};
+
+typedef struct _gl_appdata gl_appdata;
+
+int gallery_reset_app(void *data, const char *cluster_id);
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif                         /* _GALLERY_H_ */
diff --git a/include/util/gl-db-handler.h b/include/util/gl-db-handler.h
new file mode 100755 (executable)
index 0000000..f90412d
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+  * 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://www.tizenopensource.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 _GL_DB_HANDLER_H_
+#define _GL_DB_HANDLER_H_
+
+#include <eina_list.h>
+#include <visual-svc.h>
+#include <Elementary.h>
+
+#ifdef _cplusplus
+extern "C"
+{
+#endif
+
+#define GL_MAX_BYTES_FOR_CHAR 3
+#define GL_FILE_PATH_LEN_MAX (4095 * GL_MAX_BYTES_FOR_CHAR + 1)
+#define GL_FILE_NAME_LEN_MAX (255 * GL_MAX_BYTES_FOR_CHAR + 1)
+#define GL_DIR_PATH_LEN_MAX GL_FILE_PATH_LEN_MAX
+#define GL_ARRAY_LEN_MAX 256
+#define GL_FILE_EXT_LEN_MAX 256
+#define GL_FIRST_VIEW_START_POS 0
+#define GL_FIRST_VIEW_END_POS 47       /*maybe 2 pages(=48 medias) is better, especially select album then drag up immediately */
+#define GL_GET_UNTIL_LAST_RECORD 65536 /* Fixme: Do not use 65536. */
+#define GL_GET_ALL_RECORDS -1
+#define GL_GET_ONE_RECORDS 1
+#define GL_GET_ALL_RECORDS_ID NULL
+/**
+* Get a new mtype item from libmedia-info,
+* if ID is NULL, libmedia-info just allocate memory for mtype item,
+* then return it, instead of loading record from DB to initialize each field.
+*/
+#define GL_NEW_RECORD_ID NULL
+
+enum
+{
+       GL_DB_SUCCESS,
+       GL_DB_FAIL,
+};
+
+enum
+{
+       GL_RENAME_ALBUM_SUCCESS,
+       GL_RENAME_ALBUM_INVALIDATE_NAME,
+       GL_RENAME_ALBUM_DUPLICATED_NAME,
+       GL_RENAME_ALBUM_FAIL
+};
+
+enum
+{
+       GL_DELETE_ALBUM_SUCCESS,
+       GL_DELETE_ALBUM_FAIL
+};
+
+typedef struct
+{
+       Mcluster *cluster;
+       int index;
+       time_t item_mtime;
+       Elm_Object_Item *item;
+       bool checked;
+
+       void *ad;               /* Save ad to prevent use global variable */
+       void *_reserved;
+} gl_cluster;
+
+typedef struct
+{
+       Eina_List *clist;
+       int cur_pos;
+       int edit_cnt;
+} gl_cluster_list;
+
+typedef struct _gl_item
+{
+       Mitem *item;
+       Elm_Object_Item *elm_item;
+       Evas_Object *check_obj;
+       bool checked;
+       int sequence;
+
+       void *ad;               /* Save ad to prevent use global variable */
+       void *_reserved;
+} gl_item;
+
+bool gl_db_get_cluster_list(void *data);
+int gl_db_update_cluster_list(void *data);
+int gl_db_cluster_list_remove(void *data, gl_cluster * item);
+int gl_db_add_cluster(void *data, char *cluster_url);
+bool gl_db_exists_item(void *data, const char *id);
+int gl_db_get_cluster_by_id(void *data, const char *cluster_id, gl_cluster **cluster, int *pos);
+int gl_db_get_item_cnt(void *data, const char *cluster_id, int *item_cnt);
+int gl_db_update_item_cnt(gl_cluster * album);
+int gl_db_update_item_list(void *data);
+int gl_db_get_item_list(void *data,
+               gl_cluster * album,
+               int start_pos,
+               int end_pos);
+bool gl_db_is_item_cnt_zero(void *data, minfo_file_type type);
+int gl_db_clear_item_list(void *data);
+int gl_db_get_first_several_items(gl_cluster * album,
+               gl_item * items[],
+               int *item_count,
+               minfo_media_sort_type sort_type);
+gl_item *gl_db_new_item_mitem(Mitem * mitem);
+int gl_db_destroy_item(gl_item * gitem);
+int gl_db_get_item_by_index(void *data, int idx, bool select_mode, gl_item ** gitem);
+int gl_db_item_list_remove(void *data, gl_item * gitem);
+int gl_db_append_item(void *data, gl_item * gitem);
+int gl_db_remove_item(gl_item * gitem);
+int gl_db_selected_list_append(void *data, gl_item * gitem);
+int gl_db_selected_list_remove(void *data, gl_item * gitem);
+gl_item *gl_db_selected_list_get_nth(void *data, int idx);
+int gl_db_selected_list_finalize(void *data);
+int gl_db_selected_list_count(void *data);
+int gl_db_get_albums_selected_cnt(void *data);
+bool gl_db_is_albums_selected_list_empty(void *data);
+int gl_db_albums_selected_list_append(void *data, gl_cluster * item);
+int gl_db_albums_selected_list_remove(void *data, gl_cluster * item);
+int gl_db_finalize_albums_selected_list(void *data);
+int gl_db_init(void *data);
+int gl_db_finalize(void *data);
+gl_cluster *gl_db_new_cluster(void);
+Mitem *gl_db_new_mitem(void *data, const char *item_id);
+Mcluster *gl_db_new_mcluster(void *data, const char *cluster_id);
+int gl_db_get_folder_fullpath(void *data, const char *cluster_id, char *path);
+bool gl_db_is_root_path(void *data, const char *cluster_id, const char *path);
+bool gl_db_is_default_album(void *data, Mcluster *mcluster);
+int gl_db_free_cluster(gl_cluster * gcluster);
+
+#ifdef _cplusplus
+}
+#endif
+#endif /* _GL_DB_HANDLER_H_ */
diff --git a/include/util/gl-debug.h b/include/util/gl-debug.h
new file mode 100755 (executable)
index 0000000..76336f4
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+  * 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://www.tizenopensource.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 _GL_DEBUG_H_
+#define _GL_DEBUG_H_
+
+#include <dlog.h>
+#include <assert.h>
+#include <stdio.h>
+
+#ifdef _cplusplus
+extern "C"
+{
+#endif
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+
+#define LOG_TAG "GALLERY"
+
+
+/* anci c color type */
+#define FONT_COLOR_RESET    "\033[0m"
+#define FONT_COLOR_RED      "\033[31m"
+#define FONT_COLOR_GREEN    "\033[32m"
+#define FONT_COLOR_YELLOW   "\033[33m"
+#define FONT_COLOR_BLUE     "\033[34m"
+#define FONT_COLOR_PURPLE   "\033[35m"
+#define FONT_COLOR_CYAN     "\033[36m"
+#define FONT_COLOR_GRAY     "\033[37m"
+
+#ifdef _USE_LOG_FILE_
+FILE *g_log_fp;
+#endif // _USE_LOG_FILE_
+
+#ifdef _USE_LOG_FILE_
+
+#define gl_dbg(fmt,arg...)             fprintf(g_log_fp, "[%s: %d]" fmt "\n", __FUNCTION__, __LINE__, ##arg)
+
+#elif defined _USE_DLOG_
+
+#define gl_dbg(fmt, arg...)            LOGD("[%s : %d] " fmt "\n", __FUNCTION__, __LINE__, ##arg)
+#define gl_dbgW(fmt, arg...)           LOGW(FONT_COLOR_GREEN"[%s : %d] " fmt "\n"FONT_COLOR_RESET, __FUNCTION__, __LINE__,  ##arg)
+#define gl_dbgE(fmt, arg...)           LOGE(FONT_COLOR_RED"[%s : %d] " fmt "\n"FONT_COLOR_RESET, __FUNCTION__, __LINE__,  ##arg)
+
+#elif defined _USE_LOG_CONSOLE_
+
+#define gl_dbg(fmt,arg...)             fprintf(stdout, "[%s: %d]" fmt "\n", __FUNCTION__, __LINE__, ##arg)
+#define gl_dbgW(fmt, arg...)           fprintf(stdout, "[%s : %d] " fmt "\n", __FUNCTION__, __LINE__, ##arg)
+#define gl_dbgE(fmt, arg...)           fprintf(stdout, "[%s : %d] " fmt "\n", __FUNCTION__, __LINE__, ##arg)
+
+#else
+
+#define gl_dbg(fmt,arg...)
+#define gl_dbgW(fmt, arg...)
+#define gl_dbgE(fmt, arg...)
+#endif
+
+#include <time.h>
+#include <sys/time.h>
+
+void gl_print_debug_time_ex(long start, long end, const char *func_name, char *time_string);
+
+
+
+#define gl_retm_if(expr, fmt, arg...) do { \
+       if(expr) { \
+               gl_dbgE(fmt, ##arg); \
+               gl_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+               return; \
+       } \
+} while (0)
+
+#define gl_retvm_if(expr, val, fmt, arg...) do { \
+       if(expr) { \
+               gl_dbgE(fmt, ##arg); \
+               gl_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+               return (val); \
+       } \
+} while (0)
+
+#define GL_CHECK_EXCEP(expr) do { \
+       if(!(expr)) { \
+               gl_dbgE("Critical ERROR ########################################## Check below item.");\
+               goto gl_exception;\
+       } \
+} while (0)
+
+#define GL_CHECK_VAL(expr, val)                gl_retvm_if(!(expr), val, "Invalid parameter, return ERROR code!")
+#define GL_CHECK_NULL(expr)                    gl_retvm_if(!(expr), NULL, "Invalid parameter, return NULL!")
+#define GL_CHECK_FALSE(expr)                   gl_retvm_if(!(expr), false, "Invalid parameter, return FALSE!")
+#define GL_CHECK_CANCEL(expr)                  gl_retvm_if(!(expr), ECORE_CALLBACK_CANCEL, "Invalid parameter, return ECORE_CALLBACK_CANCEL!")
+#define GL_CHECK(expr)                                         gl_retm_if(!(expr), "Invalid parameter, return!")
+
+#define gl_assert(expr) do { \
+       if(!(expr)) { \
+               gl_dbgE("Critical ERROR ########################################## Check below item.");\
+               assert(false); \
+       } \
+} while (0)
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif /* _GL_DEBUG_H_ */
diff --git a/include/util/gl-ext-exec.h b/include/util/gl-ext-exec.h
new file mode 100755 (executable)
index 0000000..b9b5b9b
--- /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://www.tizenopensource.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 _GL_EXT_EXEC_H_
+#define _GL_EXT_EXEC_H_
+
+typedef enum
+{
+       GL_LAUNCH_FAIL,
+       GL_LAUNCH_SUCCESS
+} gl_launch_status;
+
+typedef enum
+{
+       GL_APP_NONE = -1,
+       GL_APP_VIDEOPLAYER,
+} gl_ext_app_type;
+
+int gl_ext_exec(void *data, gl_ext_app_type type);
+
+#endif /* _GL_EXT_EXEC_H_ */
diff --git a/include/util/gl-ext-ug-load.h b/include/util/gl-ext-ug-load.h
new file mode 100755 (executable)
index 0000000..df71afd
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  * 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://www.tizenopensource.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 _GL_EXT_UG_LOAD_H_
+#define _GL_EXT_UG_LOAD_H_
+
+#include <ui-gadget.h>
+#include "gl-db-handler.h"
+
+typedef enum
+{
+       GL_UG_FAIL,
+       GL_UG_SUCCESS
+} gl_ug_load_status;
+
+int gl_ext_load_iv_ug(void *data, gl_item *cur_item);
+int gl_ext_load_gallery_ug(void *data);
+int gl_ext_destroy_gallery_ug(void *data);
+
+#endif /* _GL_EXT_UG_LOAD_H_ */
diff --git a/include/util/gl-strings.h b/include/util/gl-strings.h
new file mode 100755 (executable)
index 0000000..2bf9ec1
--- /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://www.tizenopensource.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.
+  */
+
+/* This header file includes all multi language strings which need display */
+#ifndef _GL_STRINGS_H_
+#define _GL_STRINGS_H_
+
+#ifdef _cplusplus
+extern "C"
+{
+#endif
+
+/* hard code strings and already translated strings in gallery po files */
+#define GL_ALBUM_ALL_NAME _("IDS_MEDIABR_BODY_ALL_ALBUMS")
+#define GL_ALBUM_DEFAULT_NAME _("Camera shots")
+#define GL_STR_NEW_ALBUM _("IDS_MEDIABR_TAB4_NEW_ALBUM")
+#define GL_STR_INVALID_INPUT_PARAMETER _("IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER")
+#define GL_STR_ENTRY_IS_EMPTY _("IDS_MEDIABR_POP_ENTRY_IS_EMPTY")
+#define GL_STR_SAME_NAME_ALREADY_IN_USE _("IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE")
+#define GL_STR_UNABLE_TO_RENAME _("IDS_MEDIABR_POP_UNABLE_TO_RENAME")
+#define GL_STR_NO_ALBUMS_SELECTED _("IDS_MEDIABR_POP_NO_ALBUMS_SELECTED")
+#define GL_STR_SELECT_ALBUM _("IDS_MEDIABR_HEADER_SELECT_ALBUM")
+#define GL_STR_SELECT_ITEM _("IDS_MEDIABR_HEADER_SELECT_ITEM")
+#define GL_STR_NO_ALBUMS _("IDS_MEDIABR_BODY_NO_ALBUMS")
+#define GL_STR_UNABLE_USE_IN_UMS_MODE _("IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE")
+#define GL_STR_EMPTY _("")
+#define GL_ALBUM_PHOME_ROOT_NAME _("IDS_MEDIABR_POP_NO_NAME")
+#define GL_STR_RETRY_Q _("IDS_MEDIABR_POP_RETRY_Q")
+
+/* system strings which are included in sys-string-0 po files */
+#define GL_ALBUM_IMAGES_NAME dgettext("sys_string", "IDS_COM_BODY_IMAGES")
+#define GL_ALBUM_VIDEOS_NAME dgettext("sys_string", "IDS_COM_BODY_VIDEOS")
+#define GL_STR_MOVE dgettext("sys_string", "IDS_COM_BODY_MOVE")
+#define GL_STR_CANCEL dgettext("sys_string", "IDS_COM_SK_CANCEL")
+#define GL_STR_BACK dgettext("sys_string", "IDS_COM_SK_BACK")
+#define GL_STR_DELETE dgettext("sys_string", "IDS_COM_OPT_DELETE")
+#define GL_STR_DONE dgettext("sys_string", "IDS_COM_SK_DONE")
+#define GL_STR_ALBUMS dgettext("sys_string", "IDS_COM_BODY_ALBUMS")
+#define GL_STR_NO_ITEMS dgettext("sys_string", "IDS_COM_BODY_NO_ITEMS")
+#define GL_STR_NO_IMAGES dgettext("sys_string", "IDS_COM_BODY_NO_IMAGES")
+#define GL_STR_NO_CONTENTS dgettext("sys_string", "IDS_COM_BODY_NO_CONTENTS")
+#define GL_STR_DELETED dgettext("sys_string", "IDS_COM_POP_DELETED")
+#define GL_STR_REMOVED dgettext("sys_string", "IDS_COM_POP_REMOVED")
+#define GL_BUT_NAME_EDIT dgettext("sys_string", "IDS_COM_BODY_EDIT")
+#define GL_BUT_NAME_REMOVE dgettext("sys_string", "IDS_COM_SK_REMOVE")
+#define GL_CTRL_SEG_ITEM_ALL dgettext("sys_string", "IDS_COM_BODY_ALL")
+#define GL_CTRL_SEG_ITEM_IMAGES dgettext("sys_string", "IDS_COM_BODY_IMAGES")
+#define GL_CTRL_SEG_ITEM_VIDEOS dgettext("sys_string", "IDS_COM_BODY_VIDEOS")
+#define GL_STR_YES dgettext("sys_string", "IDS_COM_SK_YES")
+#define GL_STR_NO dgettext("sys_string", "IDS_COM_SK_NO")
+#define GL_STR_DELETE_COMFIRMATION dgettext("sys_string", "IDS_COM_POP_DELETE_Q")
+#define GL_STR_OK dgettext("sys_string", "IDS_COM_SK_OK")
+#define GL_STR_SELECTED  dgettext("sys_string", "IDS_COM_POP_SELECTED")
+#define GL_STR_CHNAGE_NAME dgettext("sys_string", "IDS_COM_BODY_CHANGE_NAME")
+#define GL_STR_NO_VIDEOS dgettext("sys_string", "IDS_COM_BODY_NO_VIDEOS")
+#define GL_STR_ADDED dgettext("sys_string", "IDS_COM_POP_ADDED")
+#define GL_STR_MOVED dgettext("sys_string", "IDS_COM_POP_MOVED")
+#define GL_STR_DELETING dgettext("sys_string", "IDS_COM_POP_DELETING")
+#define GL_STR_MOVING dgettext("sys_string", "IDS_COM_POP_MOVING")
+#define GL_BUT_NAME_RENAME dgettext("sys_string", "IDS_COM_SK_RENAME")
+#define GL_STR_SELECT_ALL dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL")
+#define GL_STR_NO_FILES_SELECTED dgettext("sys_string", "IDS_COM_POP_NO_FILES_SELECTED")
+#define GL_STR_APPLICATION_NOT_INSTALLED dgettext("sys_string", "IDS_COM_BODY_APPLICATION_NOT_INSTALLED")
+
+#ifdef _cplusplus
+}
+#endif
+#endif
diff --git a/include/util/gl-thread-util.h b/include/util/gl-thread-util.h
new file mode 100755 (executable)
index 0000000..9246c0c
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+  * 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://www.tizenopensource.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 _GL_THREAD_UTIL_H_
+#define _GL_THREAD_UTIL_H_
+typedef enum
+{
+       GL_PB_CANCEL_NONE,              /* Initial state */
+       GL_PB_CANCEL_NORMAL,    /* Moving or deleting is in process */
+       GL_PB_CANCEL_BUTTON,    /* Cancel button tapped while moving or deleting */
+       GL_PB_CANCEL_MMC,               /* MMC removed, src album or dest album vanished while moving or deleting */
+       GL_PB_CANCEL_ERROR,     /* Error happened while moving or deleting */
+       GL_PB_CANCEL_RESET,     /* Reset gallery while moving or deleting */
+} gl_pb_cancel_mode;
+
+int gl_thread_emit_next_signal(void *data);
+int gl_thread_wait_next_signal(void *data);
+int gl_thread_set_cancel_state(void *data, int val);
+int gl_thread_get_cancel_state(void *data, int *val);
+void gl_thread_write_pipe(void *data, int finished_cnt, int popup_op);
+int gl_thread_gen_data_thread(void *data);
+int gl_thread_destroy_lock(void *data);
+int gl_thread_init_lock(void *data);
+
+#endif /* _GL_THREAD_UTIL_H_ */
diff --git a/include/util/gl-ui-util.h b/include/util/gl-ui-util.h
new file mode 100755 (executable)
index 0000000..1bf81fd
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+  * 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://www.tizenopensource.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 _GL_UI_UTIL_H_
+#define _GL_UI_UTIL_H_
+
+#include <Elementary.h>
+#include <appcore-efl.h>
+#include "gallery.h"
+
+#ifdef _cplusplus
+extern "C"
+{
+#endif
+
+#define _EDJ(o)         elm_layout_edje_get(o)
+#define _GETICON(_path) \
+               ((1 == ecore_file_exists(_path) && (ecore_file_size(_path) > 0)) ? _path : GL_DEFAULT_THUMB_ICON)
+
+
+typedef enum
+{
+       GL_NAVI_ALBUMS,
+       GL_NAVI_ALBUMS_EDIT,
+       GL_NAVI_ALBUMS_RENAME,
+       GL_NAVI_ALBUMS_NEW,
+       GL_NAVI_THUMBS,
+       GL_NAVI_THUMBS_EDIT,
+} gl_navi_mode;
+
+typedef enum
+{
+       GL_UI_NOTIFY_DELETED,
+       GL_UI_NOTIFY_REMOVED,
+       GL_UI_NOTIFY_ADDED,
+       GL_UI_NOTIFY_MOVED,
+} gl_ui_notify_mode;
+
+Evas_Object *gl_ui_create_naviframe(Evas_Object * parent);
+Evas_Object *gl_ui_create_main_ly(Evas_Object * parent);
+Evas_Object *gl_ui_create_view_ly(Evas_Object *parent);
+int gl_ui_create_title_and_push(void *data, Evas_Object *parent,
+                               Evas_Object *obj, gl_navi_mode mode, char *title);
+int gl_ui_remake_titlebar(void *data, Evas_Object * parent, Evas_Object * obj, gl_navi_mode mode);
+Evas_Object *gl_ui_load_edj(Evas_Object * parent, const char *file, const char *group);
+Evas_Object *gl_ui_create_nocontents_full(void *data);
+int gl_ui_create_selinfo(void *data, Evas_Object *parent, Elm_Object_Item *nf_it,
+                         int all_cnt, int selected_cnt, bool b_update);
+int gl_ui_destroy_selinfo(void *data);
+int gl_ui_update_select_widgets(void *data);
+int gl_ui_show_selall(void *data);
+int gl_ui_destroy_imf(void *data);
+int gl_ui_rename_album(gl_cluster * album_item);
+int gl_ui_set_album_lock(void *data, gl_cluster * sel_album);
+int gl_ui_reset_toolbar_item(void *data, gl_ctrl_seg_mode seg_mode, bool force);
+int gl_ui_back_to_normal(void *data);
+int gl_ui_move_to_newalbum(void *data);
+int gl_ui_edit_cancel(void *data);
+int gl_ui_disable_toolbar_item(void *data, bool disabled, gl_navi_mode mode,
+                              bool edit);
+int gl_ui_cancel_rename_album(void *data);
+int gl_ui_cancel_new_album(void *data);
+bool gl_ui_display_nocontents(void *data);
+int gl_ui_disable_cbar_item(Elm_Object_Item *it);
+int gl_ui_enable_cbar_item(Elm_Object_Item *it);
+int gl_ui_disable_toolbar_items(void *data, Elm_Object_Item *nf_it);
+int gl_ui_create_notiinfo(void *data, Evas_Object *parent,
+                          gl_ui_notify_mode n_mode);
+int gl_ui_destroy_notiinfo(void *data);
+int gl_ui_disable_add_account_btn(void *data, bool b_disable);
+int _gl_ui_elm_bg_file_set(Evas_Object *bg, gl_item *git);
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif // end of _GL_UI_UTIL_H_
diff --git a/include/util/gl-util.h b/include/util/gl-util.h
new file mode 100755 (executable)
index 0000000..42277c1
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+  * 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://www.tizenopensource.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 _GL_UTIL_H_
+#define _GL_UTIL_H_
+
+#include "gl-db-handler.h"
+#include "gallery.h"
+
+typedef enum
+{
+       GL_MMC_STATE_NONE,
+       GL_MMC_STATE_ADDED,
+       GL_MMC_STATE_ADDED_MOVING,      /* Move medias to MMC or from MMC */
+       GL_MMC_STATE_ADDING_MOVING,     /* Insert MMC while operate medias */
+       GL_MMC_STATE_REMOVED,
+       GL_MMC_STATE_REMOVED_MOVING,    /* Remove MMC while move medias to MMC or from MMC */
+} gl_mmc_state_mode;
+
+typedef enum
+{
+       GL_UPDATE_VIEW_NONE,
+       GL_UPDATE_VIEW_NORMAL,
+       GL_UPDATE_VIEW_MMC_REMOVED,     /* Update view when MMC removed */
+       GL_UPDATE_VIEW_MMC_ADDED,       /* Update view when MMC inserted */
+} gl_update_view_mode;
+
+typedef enum
+{
+       GL_MEDIA_OP_NONE,
+       GL_MEDIA_OP_MOVE,
+       GL_MEDIA_OP_DELETE,
+} gl_media_op_mode;
+
+typedef enum
+{
+       GL_POPUP_OP_NONE,
+       GL_POPUP_OP_SAME_ALBUM,
+       GL_POPUP_OP_DUPLICATED_NAME,
+       GL_POPUP_OP_PROTECTED_FILE,
+} gl_popup_op_mode;
+
+typedef enum
+{
+       GL_INVALID_NONE,
+       GL_INVALID_RENAME_ALBUM,
+       GL_INVALID_NEW_ENTRY,
+       GL_INVALID_NEW_ENTRY_NOC,       /* Show nocontents view */
+} gl_invalid_mode;
+
+int gl_get_view_mode(void *data);
+int gl_set_view_mode(void *data, int mode);
+int gl_move_media_item(gl_item * gitem, char *new_dir_name, bool is_full_path, int *popup_op);
+int gl_move_selected(void *data);
+int gl_move_to_album(void *data);
+int gl_move_root_album(void* data, gl_cluster* cur_album, char* dest_path);
+int gl_update_move_view(void *data);
+int gl_del_medias(void *data);
+int gl_del_selected(void *data);
+int gl_update_del_view(void *data);
+int gl_check_mmc_state(void *data, char *dest_folder);
+int gl_del_albums(void *data);
+int gl_refresh_albums_list(void *data);
+int gl_reg_db_update_noti(void *data);
+int gl_dereg_db_update_noti(void);
+int gl_reg_mass_storage_noti(void *data);
+int gl_dereg_mass_storage_noti(void);
+void gl_set_mmc_notifd(int fd);
+Eina_Bool gl_update_view(void *data, int mode);
+int gl_get_default_images_path(char *directory_path);
+int gl_get_selected_files_path_str(void *data, gchar sep_c, char **path_str, int *sel_cnt);
+int gl_make_dir(const char *dir_full_path);
+int gl_make_new_album(const char *name);
+bool gl_check_gallery_empty(void* data);
+bool gl_is_rotation_locked(void);
+bool gl_is_image_valid(void *data, char *filepath);
+int gl_get_mass_storage_state(void *data);
+bool gl_validate_album_name(const char *new_name);
+int gl_get_entry_text(Evas_Object * entry, char *entry_text, int len_max);
+int gl_set_entry_text(Evas_Object *entry, char *entry_text);
+int gl_del_invalid_widgets(void *data, int invalid_m);
+int _gl_destroy_thumbs_edit_view(void *data);
+int gl_destroy_thumbs_view(void *data);
+int gl_pop_to_ctrlbar_ly(void *data, bool b_update_albums_list);
+int gl_play_vibration(void *data);
+char *_gl_get_thumb(void *data, const char *file_path, char **thumb_path);
+
+#endif /* _GL_UTIL_H_ */
diff --git a/libug/libug-gallery-efl/CMakeLists.txt b/libug/libug-gallery-efl/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..62c7a0b
--- /dev/null
@@ -0,0 +1,86 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(ug-gallery-efl C)
+
+SET(SRCS src/gallery-efl.c
+       src/ge-albums.c
+       src/ge-gridview.c
+       src/ge-button.c
+       src/ge-debug.c
+       src/ge-ui-util.c
+       src/ge-ext-ug-load.c
+       src/ge-util.c
+       src/ge-db-handler.c )
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(EXEC_PREFIX "\${prefix}")
+SET(LIBDIR "\${prefix}/lib")
+SET(INCLUDEDIR "\${prefix}/include")
+SET(VERSION 1.0)
+
+ADD_DEFINITIONS("-D_USE_DLOG_")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED appcore-common appcore-efl libmedia-service
+ui-gadget secure-storage)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fpie")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -fpie")
+SET(CMAKE_LDFLAGS "-Wl,-zdefs" )
+
+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")
+
+#SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION 0.0.1)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+# EDJE
+ADD_CUSTOM_COMMAND(OUTPUT gallery-efl.edj
+                COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images
+                ${CMAKE_CURRENT_SOURCE_DIR}/res/edc/gallery-efl.edc
+                               ${CMAKE_BINARY_DIR}/gallery-efl.edj
+                DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edc/gallery-efl.edc
+)
+
+#ADD_CUSTOM_COMMAND(OUTPUT gallery-efl-effect.edj
+#                COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/res/images
+#                ${CMAKE_CURRENT_SOURCE_DIR}/res/edc/gallery-efl-effect.edc
+#                ${CMAKE_BINARY_DIR}/gallery-efl-effect.edj
+#                DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/res/edc/gallery-efl.edc
+#)
+
+
+#ADD_DEPENDENCIES(${PROJECT_NAME} gallery-efl.edj)
+#ADD_CUSTOM_TARGET(gallery_efl_edj_build DEPENDS gallery-efl.edj gallery-efl-effect.edj)
+ADD_CUSTOM_TARGET(gallery_efl_edj_build DEPENDS gallery-efl.edj)
+ADD_DEPENDENCIES(${PROJECT_NAME} gallery_efl_edj_build)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/gallery-efl.edj DESTINATION
+/opt/ug/res/edje/gallery-efl)
+
+#INSTALL(FILES ${CMAKE_BINARY_DIR}/gallery-efl-effect.edj DESTINATION
+#/opt/ug/res/edje/gallery-efl)
+
+
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/images DESTINATION
+/opt/ug/res/images/gallery-efl)
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /opt/ug/lib)
diff --git a/libug/libug-gallery-efl/include/gallery-efl.h b/libug/libug-gallery-efl/include/gallery-efl.h
new file mode 100755 (executable)
index 0000000..4a6429d
--- /dev/null
@@ -0,0 +1,365 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/*
+* About invoking gallery UG view. F.E.
+*
+* struct ug_cbs cbs = {0, };
+* bundle* param = NULL;
+*
+* cbs.layout_cb = test_ug_layout_cb;
+* cbs.result_cb = test_ug_return_cb;
+* cbs.destroy_cb = test_ug_closed_cb;
+*
+* param = bundle_create();
+*
+* bundle_add( param, "launch-type", "select-one" );
+* bundle_add( param, "return-type", "vconf");
+* bundle_add( param, "file-type", "all" );
+*
+* struct ui_gadget *ext_ug = ug_create( NULL, "gallery-efl", UG_MODE_FULLVIEW, param, &cbs );
+*
+*
+*
+* About parameter.
+*      (1)"select-setas"
+*      It's added for wallpaper setting and contact caller ID setting.
+*      If caller pass "select-setas", after image tapped, image viewer would be invoke, then user can
+*      apply setting in image viewer.
+*      It's unnecessary to pass parameter of return-type in set-as case..
+*
+*      A)"setas-type"
+*      And for set-as case, bundle parameter "setas-type" is used to specify different kind of setting, there are two set-as types:
+*              a)"wallpaper"
+*              This is for wallpaper setting.
+*              b)"callerid"
+*              This is for contact caller ID setting.
+*              And there are another two bundle parameters for callerid, both of them are optional , that is:
+*                      b1)"callerid-size"
+*                              It's added to set the size of caller ID, f.e.
+*                              If you want to set the size as 200x200, you can set bundler parameter like :
+*                                      bundle_add( param, "callerid-size", "200" );
+*                      b2)"callerid-path"
+*                              It's added to specify the saved path of call ID, and note that this is a full path, f.e..
+*                              You can pass path string like :
+*                                      bundle_add( param, "callerid-path", "/opt/media/test_folder/test_caller_id_1.jpg");
+*
+*      B) comand
+*      Launching ug comand: ug-launcher -F -n gallery-efl -d "launch-type,select-setas" -d "file-type,image" -d "setas-type,wallpaper"
+*      Launching ug comand: ug-launcher -F -n gallery-efl -d "launch-type,select-setas" -d "file-type,image" -d "setas-type,callerid" \
+*                                                      -d "callerid-size,200" -d "callerid-path,/opt/media/test_folder/test_caller_id_1.jpg"
+*
+*      (2)"select-one" and "select-multiple"
+*      In this case, after image(s) tapped, it will be added to list and return path(s) to caller if done button tapped.
+*      Note that, caller must pass return-type, ug will return path(s) strings of selected image(s).
+*
+*      Launching ug comand: ug-launcher -F -n gallery-efl -d "launch-type,select-one" -d "return-type,vconf" -d "file-type,all"
+*                                               ug-launcher -F -n gallery-efl -d "launch-type,select-multiple" -d "return-type,vconf" -d "file-type,all"
+*
+*      Note that, file-type is optional while select-type is select-one or select-multiple.
+*
+*      (3)"file-type"
+*      User can set file type via parameter "file-type", there are "image", "video" and "all", here, "all" including image and video.
+*      But for now in imageviewer, wallpaper setting only support image type.
+*
+*/
+
+
+#ifndef __GALLERY_EFL_H__
+#define __GALLERY_EFL_H__
+
+
+#include <glib.h>
+#include <Elementary.h>
+#include <stdio.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <bundle.h>
+#include <ui-gadget-module.h>
+#include <visual-svc.h>
+#include <Eina.h>
+#include <Ecore_X.h>
+#include <Ethumb.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define GALLERY_RES_DIR "/opt/apps/org.tizen.gallery/res/"
+#define GALLERY_ICON_DIR GALLERY_RES_DIR"icons/default/small/"
+#define GALLERY_EDJ_DIR GALLERY_RES_DIR"edje/"
+#define GALLERY_BLACK_EDJ_FILE GALLERY_EDJ_DIR"gl-black-theme.edj"
+#define GE_UG_RES_DIR "/opt/ug/res/"
+#define GE_IMAGES_DIR GE_UG_RES_DIR"images/gallery-efl/images/"
+#define GE_EDJ_DIR GE_UG_RES_DIR"edje/gallery-efl/"
+#define GE_EDJ_FILE GE_EDJ_DIR"gallery-efl.edj"
+
+#define GE_GRP_GRIDVIEW "gallery_efl/gridview"
+#define GE_GRP_ALBUMVIEW "gallery_efl/albumview"
+#define GE_GRP_NOCONTENTS "gallery_efl/nocontents"
+
+#define GE_CBAR_STYLE_DEFAULT "gallery/default"
+#define GE_NAVIFRAME_STYLE_DEFAULT "gallery/default"
+#define GE_CHECKBOX_STYLE_GRID "gallery_efl/grid"
+
+#define DEFAULT_ICON GALLERY_ICON_DIR"org.tizen.gallery.png"
+#define GE_LOCK_ICON GE_IMAGES_DIR"T01_icon_lock.png"
+#define GE_THUMB_BOOKMARK GE_IMAGES_DIR"T01_icon_thumbnail_bookmark.png"
+#define GE_DEFAULT_THUMB_ICON GE_IMAGES_DIR"T01_Nocontents_broken.png"
+#define GE_CBAR_ICON_DONE GE_IMAGES_DIR"T01_controlbar_icon_done.png"
+
+#define GE_ROOT_PATH_PHONE     "/opt/media"
+#define GE_ROOT_PATH_MMC       "/opt/storage/sdcard"
+
+#define GE_ALBUM_ALL_ID "GALLERY_ALBUM_ALL_ALBUMS_ID"
+/* String length of mtye item id */
+#define GE_MTYPE_ITEN_ID_LEN_MAX 37
+
+#define GE_BASE_WIN_WIDTH      720
+#define GE_BASE_WIN_HEIGHT     1280
+
+#define GE_GRID_ITEM_SIZE_W 178
+#define GE_GRID_ITEM_SIZE_H 182
+
+#define GE_GRID_ITEM_ZOOM_LEVEL_01 4
+#define GE_GRID_ITEM_ZOOM_LEVEL_02 2
+#define GE_GRID_ITEM_ZOOM_LEVEL_01_CNT 1
+#define GE_GRID_ITEM_ZOOM_LEVEL_02_CNT 6
+
+#define GE_LIST_ICON_WIDTH 133
+#define GE_LIST_ICON_HEIGHT 100
+
+#define GE_ALBUM_COVER_THUMB_NUM 7 /* There are 7 thumbnails of 'Camera shots' and 'All' cover*/
+#define GE_ALBUM_COVER_THUMB_NUM_SEC 4 /* Other albums cover have maximum 4 thumbnails */
+#define GE_ALBUM_ITEM_WIDTH 358
+#define GE_ALBUM_ITEM_HEIGHT 360
+#define GE_COVER_SIZE 318
+#define GE_COVER_PAD 3
+#define GE_COVER_ICON_S (GE_COVER_SIZE - 2 * GE_COVER_PAD)
+#define GE_COVER_GRID_S 102
+#define GE_COVER_2X_GRID_S (GE_COVER_ICON_S - GE_COVER_GRID_S - GE_COVER_PAD)
+
+#define GE_SELINFO_TEXT_LEN_MAX 64
+#define GE_ALBUM_DATE_LEN_MAX 256
+#define GE_MAX_BYTES_FOR_CHAR 3
+#define GE_ALBUM_NAME_LEN_MAX (255 * GE_MAX_BYTES_FOR_CHAR + 1)
+#define GE_VIDEO_DURATION_MAX 256
+#define GE_NOCONTENTS_LABEL_LEN_MAX 512
+#define GE_FILE_PATH_LEN_MAX (4095 * GE_MAX_BYTES_FOR_CHAR + 1)
+#define GE_DIR_PATH_LEN_MAX GE_FILE_PATH_LEN_MAX
+
+#define GE_TIME_SECOND_MILLISECOND 1000 // 1s=1000ms
+#define GE_TIME_USEC_PER_SEC 1000000L
+#define GE_TIME_MINUTE_SECOND 60 // 1min=60s
+#define GE_TIME_HOUR_MINUTE 60 // 1h=60min
+#define GE_TIME_HOUR_SECOND (GE_TIME_HOUR_MINUTE * GE_TIME_MINUTE_SECOND) // 1h=(60x60)s
+
+#define GE_FIRST_VIEW_START_POS 0
+#define GE_FIRST_VIEW_END_POS 47
+#define GE_GET_UNTIL_LAST_RECORD 65536 /* Fixme: Do not use 65536. */
+#define GE_GET_ALL_RECORDS -1
+
+#define GE_BUNDLE_LAUNCH_TYPE                          "launch-type"
+#define GE_BUNDLE_FILE_TYPE                            "file-type"
+#define GE_BUNDLE_SETAS_TYPE                           "setas-type"
+#define GE_BUNDLE_CALLERID_SIZE                        "callerid-size"
+#define GE_BUNDLE_CALLERID_PATH                        "callerid-path"
+#define GE_BUNDLE_HOMESCREEN_PATH                      "homescreen-path"
+#define GE_BUNDLE_LOCKSCREEN_PATH                      "lockscreen-path"
+
+#define GE_ALBUM_SELECT_ONE                            "select-album"
+#define GE_ALBUM_SELECT_RETURN_ID                      "album-id"
+#define GE_ALBUM_SELECT_RETURN_PATH                    "folder-path"
+
+#define GE_FILE_SELECT_ONE                             "select-one"
+#define GE_FILE_SELECT_MULTIPLE                        "select-multiple"
+#define GE_FILE_SELECT_SETAS                           "select-setas"
+#define GE_FILE_SELECT_IMFT                            "select-imft"
+
+#define GE_FILE_SELECT_TYPE_IMAGE                      "image"
+#define GE_FILE_SELECT_TYPE_VIDEO                      "video"
+#define GE_FILE_SELECT_TYPE_ALL                        "all"
+
+#define GE_FILE_SELECT_SETAS_WALLPALER                 "wallpaper"
+#define GE_FILE_SELECT_SETAS_CALLERID          "callerid"
+
+#define GE_FILE_SELECT_RETURN_COUNT            "count"
+#define GE_FILE_SELECT_RETURN_PATH                     "path"
+
+#define GE_FILE_SELECT_RETURN_QUIT                     "ug-quit"
+#define GE_FILE_SELECT_QUIT_STATE                      "normal"
+
+#define GE_SETAS_CALLERID_CROP_IMAGE_PATH      "crop-image-path"
+#define GE_SETAS_IMAGE_PATH                                    "image-path"
+
+/*Image viewer UG bundle parameters*/
+#define GE_IMAGEVIEWER_CALLERID_SIZE           "Area size"
+#define GE_IMAGEVIEWER_CALLERID_PATH           "CallerID path"
+
+#define GE_IMAGEVIEWER_CROP_IMAGE_PATH                 "crop_image_path"
+#define GE_IMAGEVIEWER_IMAGE_PATH                      "image_path"
+
+#define GE_IMAGEVIEWER_HOMESCREEN_PATH                 "Wallpaper path"
+#define GE_IMAGEVIEWER_LOCKSCREEN_PATH                 "Lockscreen path"
+#define GE_IMAGEVIEWER_RETURN_ERROR            "Error"
+/*Image viewer UG bundle parameters-End*/
+
+typedef enum {
+       GE_Album_Select_None,
+       GE_Album_Select_One,
+} ge_album_select;
+
+typedef enum {
+       GE_File_Select_None,
+       GE_File_Select_One,
+       GE_File_Select_Multiple,
+       GE_File_Select_Setas,
+       GE_File_Select_Imft,
+} ge_file_select;
+
+typedef enum {
+       GE_File_Select_Setas_None,
+       GE_File_Select_Setas_Wallpaper,
+       GE_File_Select_Setas_CallerID,
+} ge_file_select_setas;
+
+typedef enum {
+       GE_File_Select_Type_None,
+       GE_File_Select_Type_Image,
+       GE_File_Select_Type_Video,
+       GE_File_Select_Type_All,
+} ge_file_type;
+
+typedef enum view_by_mode_e
+{
+       GE_AlbumsView_Mode,
+       GE_ThumbnailView_Mode,
+       GE_ThumbnailEdit_Mode,
+} ge_view_mode;
+
+typedef enum _ge_ug_exit_mode {
+       GE_UG_EXIT_NONE,
+       GE_UG_EXIT_MASS_STORAGE,
+} ge_ug_exit_mode;
+
+typedef enum {
+       GE_UPDATE_NONE,
+       GE_UPDATE_NORMAL,
+       GE_UPDATE_MMC_REMOVED,
+       GE_UPDATE_MMC_ADDED,
+}ge_update_mode;
+
+typedef struct _ge_ugdata ge_ugdata;
+
+typedef struct {
+       Mcluster* cluster;
+       ge_ugdata* ugd;
+       int index;
+
+       time_t item_mtime;
+       Elm_Object_Item *griditem;
+       void* _reserved;
+}ge_cluster;
+
+typedef struct {
+       Eina_List* clist;
+       int cur_pos;
+}ge_cluster_list;
+
+typedef struct _gl_item {
+       Mitem* item;
+       ge_ugdata* ugd;
+       Elm_Object_Item *elm_item;
+       Evas_Object* check_obj;
+    bool checked;
+       char* drm_filepath;
+
+       void* _reserved;
+}ge_item;
+
+struct _ge_ugdata {
+       Evas_Object *win;
+       int win_w;
+       int win_h;
+       double win_scale;
+       Evas_Object *ly_main;
+       Evas_Object *bg;
+       Elm_Theme *th;
+       /* add more variables here */
+       Evas_Object *navi_bar;
+
+       Evas_Object *albums_view;
+       Evas_Object *albums_view_ly;
+       Evas_Object *thumbs_view;
+       Evas_Object *thumbs_view_ly;
+       Elm_Object_Item *thumbs_nf_it;
+       Evas_Object *thumbs_nocontents;
+       Ecore_Idler* grid_append_idler;
+       Evas_Object *nocontents;
+       Ecore_Event_Handler* event_handler;
+       Evas_Object *popup;
+       Ecore_Timer *del_timer;
+       int popup_mode;
+
+       MediaSvcHandle *db_handle;
+       ge_cluster_list* cluster_list;
+       struct ui_gadget *ug_called_by_me;
+       struct ui_gadget *ug;
+       bundle *bundle;         /*added for "ug_send_result"*/
+       /* It's thumbnails icon size, not grid item size */
+       int icon_size;
+       Ecore_Timer *thumbs_clicked_timer;
+
+       int album_select_mode;
+       int file_select_mode;
+       int file_type_mode;
+       int file_select_contact_id;
+       int file_select_setas_mode;
+       char* file_setas_callid_size;
+       char* file_setas_callid_path;
+       char* file_setas_image_path;
+       char* file_setas_crop_image_path;
+       char albums_view_title[GE_ALBUM_NAME_LEN_MAX];
+       char* file_setas_homescreen_path;
+       char* file_setas_lockscreen_path;
+
+       Evas_Object *selectioninfo_ly;
+       Evas_Object *selectioninfo;
+
+       int ug_exit_mode;
+       bool b_inited_view;             /* true: show albums view; false: show popup */
+       /* Update view in timer if UMS OFF */
+       Ecore_Timer *ums_update_timer;
+};
+
+
+#define GE_DEL_TIMER(timer) if(timer){ecore_timer_del(timer); timer = NULL;}
+#define GE_DEL_IDLER(idler) if(idler){ecore_idler_del(idler); idler = NULL;}
+#define GE_DEL_OBJ(obj)        if(obj){evas_object_del(obj); obj = NULL;}
+#define GE_FREE_MEM(mem) if(mem){free(mem); mem = NULL;}
+
+
+ge_view_mode _ge_get_view_mode(void);
+void _ge_set_view_mode(ge_view_mode mode);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __GALLERY_EFL_H__ */
+
diff --git a/libug/libug-gallery-efl/include/ge-albums.h b/libug/libug-gallery-efl/include/ge-albums.h
new file mode 100755 (executable)
index 0000000..9c5174c
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+  * 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://www.tizenopensource.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 _GE_ALBUMS_H_
+#define _GE_ALBUMS_H_
+
+#include "gallery-efl.h"
+
+Evas_Object* ge_albums_create_view(ge_ugdata *ugd, Evas_Object* parent);
+int ge_albums_sel_album(ge_cluster* album_item);
+int ge_albums_update_view(ge_ugdata *ugd);
+Evas_Object* ge_albums_create_ly(Evas_Object* parent);
+int ge_albums_back_to_view(ge_ugdata *ugd);
+int ge_albums_del_callbacks(ge_ugdata *ugd);
+int ge_albums_free_cover_thumbs(ge_ugdata *ugd);
+
+#endif /* _GE_ALBUMS_H_ */
+
diff --git a/libug/libug-gallery-efl/include/ge-button.h b/libug/libug-gallery-efl/include/ge-button.h
new file mode 100755 (executable)
index 0000000..a5abcb5
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+  * 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://www.tizenopensource.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 _GE_BUTTON_H_
+#define _GE_BUTTON_H_
+
+#include "gallery-efl.h"
+
+typedef enum _ge_but_mode {
+       GE_BUT_CANCEL,
+       GE_BUT_OK,
+       GE_BUT_DONE,
+} ge_but_mode;
+
+typedef void (*But_Smart_Cb) (void *data, Evas_Object *obj, void *event_info); /**< Evas smart objects' "smart callback" function signature */
+
+Evas_Object *ge_but_create_title_but(ge_ugdata *ugd, Evas_Object *parent, ge_but_mode mode);
+Evas_Object *_ge_but_create_but(Evas_Object *parent, ge_but_mode mode, But_Smart_Cb cb_func, const void *data);
+
+#endif /* _GE_BUTTON_H_ */
diff --git a/libug/libug-gallery-efl/include/ge-db-handler.h b/libug/libug-gallery-efl/include/ge-db-handler.h
new file mode 100755 (executable)
index 0000000..bd6c5eb
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+  * 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://www.tizenopensource.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 _GE_DB_HANDLER_H_
+#define _GE_DB_HANDLER_H_
+
+#include "gallery-efl.h"
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+
+enum {
+       GE_DB_SUCCESS,
+       GE_DB_FAIL,
+       GE_PROTECTED_FILE
+};
+
+
+int ge_db_update_items_cnt(ge_ugdata* ugd, ge_cluster *album);
+int ge_db_get_clusters_list(ge_ugdata* ugd);
+int ge_db_clear_items_list(void);
+int ge_db_get_items_list(ge_ugdata* ugd, ge_cluster *album, int start_pos, int end_pos);
+int ge_db_update_items_list(ge_ugdata* ugd, ge_cluster *album);
+int ge_db_get_count_all(void);
+int ge_db_get_first_several_items(ge_ugdata* ugd, ge_cluster *album,
+                                 ge_item* items[], int *item_count,
+                                 minfo_media_sort_type sort_type);
+int ge_db_destroy_mtype_item(void* item);
+int ge_db_destroy_item(ge_item* gitem);
+int ge_db_get_item_by_index(ge_item** gitem, int idx);
+int  ge_db_init(ge_ugdata* ugd);
+int ge_db_finalize(ge_ugdata* ugd);
+bool ge_db_is_default_album(ge_ugdata* ugd, Mcluster* mcluster);
+Mcluster* ge_db_new_mcluster(ge_ugdata* ugd, const char *cluster_id);
+Mitem* ge_db_new_mitem(ge_ugdata* ugd, const char *item_id);
+bool ge_db_is_root_path(ge_ugdata* ugd, const char *cluster_id, const char *path);
+int ge_db_del_media_id(ge_ugdata* ugd, const char *media_id);
+int ge_db_get_folder_fullpath(ge_ugdata* ugd, const char *id, char *path);
+int ge_db_item_list_remove(ge_item* gitem);
+int ge_db_selected_list_count(void);
+Eina_List* ge_db_selected_list_get(void);
+int ge_db_selected_list_append(ge_item* gitem);
+int ge_db_selected_list_remove(ge_item* gitem);
+int ge_db_selected_list_finalize(void);
+int ge_db_get_selected_item_by_index(ge_item** gitem, int idx);
+
+#ifdef _cplusplus
+}
+#endif
+#endif /* _GE_DB_HANDLER_H_ */
+
diff --git a/libug/libug-gallery-efl/include/ge-debug.h b/libug/libug-gallery-efl/include/ge-debug.h
new file mode 100755 (executable)
index 0000000..bac4443
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+  * 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://www.tizenopensource.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 _GL_DEBUG_H_
+#define _GL_DEBUG_H_
+
+#include <dlog.h>
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "GALLERY-EFL"
+
+typedef enum {
+       DEBUG_CRITICAL,
+       DEBUG_CHECK,
+       MB_DEBUG_LOG,
+       DEBUG_MAX
+} GlDebugType;
+
+/* anci c color type */
+#define FONT_COLOR_RESET    "\033[0m"
+#define FONT_COLOR_RED      "\033[31m"
+#define FONT_COLOR_GREEN    "\033[32m"
+#define FONT_COLOR_YELLOW   "\033[33m"
+#define FONT_COLOR_BLUE     "\033[34m"
+#define FONT_COLOR_PURPLE   "\033[35m"
+#define FONT_COLOR_CYAN     "\033[36m"
+#define FONT_COLOR_GRAY     "\033[37m"
+
+#ifdef _USE_LOG_FILE_
+FILE* g_log_fp;
+#endif // _USE_LOG_FILE_
+
+#ifdef _USE_LOG_FILE_
+
+#define ge_dbg(fmt,arg...)             fprintf(g_log_fp, "[%s: %d]" fmt "\n", __FUNCTION__, __LINE__, ##arg)
+
+#elif defined _USE_DLOG_
+
+#define ge_dbg(fmt, arg...)            LOGD("[%s : %d] " fmt "\n", __FUNCTION__, __LINE__, ##arg)
+#define ge_dbgW(fmt, arg...)           LOGW(FONT_COLOR_GREEN"[%s : %d] " fmt "\n"FONT_COLOR_RESET, __FUNCTION__, __LINE__,  ##arg)
+#define ge_dbgE(fmt, arg...)           LOGE(FONT_COLOR_RED"[%s : %d] " fmt "\n"FONT_COLOR_RESET, __FUNCTION__, __LINE__,  ##arg)
+
+#elif defined _USE_LOG_CONSOLE_
+
+#define ge_dbg(fmt,arg...)             fprintf(stdout, "[%s: %d] [%s]" fmt "\n", __FILE__, __LINE__, __FUNCTION__, ##arg)
+#define ge_dbgW(fmt, arg...)           fprintf(stdout, "[%s : %d] [%s] " fmt "\n", __FILE__, __LINE__, __FUNCTION__,  ##arg)
+#define ge_dbgE(fmt, arg...)           fprintf(stdout, "[%s : %d] [%s] " fmt "\n", __FILE__, __LINE__, __FUNCTION__,  ##arg)
+
+#else
+
+#define ge_dbg(fmt,arg...)
+#define ge_dbgW(fmt, arg...)
+#define ge_dbgE(fmt, arg...)
+#endif
+
+#define ge_warn_if(expr, fmt, arg...) do { \
+        if(expr) { \
+            ge_dbg("(%s) -> "fmt, #expr, ##arg); \
+        } \
+    } while (0)
+#define ge_ret_if(expr) do { \
+        if(expr) { \
+            ge_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+            return; \
+        } \
+    } while (0)
+#define ge_retv_if(expr, val) do { \
+        if(expr) { \
+            ge_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+            return (val); \
+        } \
+    } while (0)
+#define ge_retm_if(expr, fmt, arg...) do { \
+        if(expr) { \
+            ge_dbgE(fmt, ##arg); \
+            ge_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+            return; \
+        } \
+    } while (0)
+#define ge_retvm_if(expr, val, fmt, arg...) do { \
+        if(expr) { \
+            ge_dbgE(fmt, ##arg); \
+            ge_dbgE("(%s) -> %s() return", #expr, __FUNCTION__); \
+            return (val); \
+        } \
+    } while (0)
+
+
+#define GE_CHECK_VAL(expr, val)                ge_retvm_if(!(expr), val, "Invalid parameter, return ERROR code!")
+#define GE_CHECK_NULL(expr)                    ge_retvm_if(!(expr), NULL, "Invalid parameter, return NULL!")
+#define GE_CHECK_FALSE(expr)                   ge_retvm_if(!(expr), false, "Invalid parameter, return FALSE!")
+#define GE_CHECK_CANCEL(expr)                  ge_retvm_if(!(expr), ECORE_CALLBACK_CANCEL, "Invalid parameter, return ECORE_CALLBACK_CANCEL!")
+#define GE_CHECK(expr)                                         ge_retm_if(!(expr), "Invalid parameter, return!")
+
+
+#include <time.h>
+#include <sys/time.h>
+
+void _ge_print_debug_time_ex(long start, long end, const char* func_name, char* time_string);
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif /* _GL_DEBUG_H_ */
+
diff --git a/libug/libug-gallery-efl/include/ge-ext-ug-load.h b/libug/libug-gallery-efl/include/ge-ext-ug-load.h
new file mode 100755 (executable)
index 0000000..a81b388
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+  * 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://www.tizenopensource.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 _GE_EXT_UG_LOAD_H_
+#define _GE_EXT_UG_LOAD_H_
+
+#include <ui-gadget.h>
+#include "gallery-efl.h"
+
+
+int ge_ext_load_iv_ug(ge_ugdata* ugd);
+
+#endif /* _GE_EXT_UG_LOAD_H_ */
+
diff --git a/libug/libug-gallery-efl/include/ge-gridview.h b/libug/libug-gallery-efl/include/ge-gridview.h
new file mode 100755 (executable)
index 0000000..e8263aa
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+  * 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://www.tizenopensource.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 _GE_GRIDVIEW_H_
+#define _GE_GRIDVIEW_H_
+
+#include "gallery-efl.h"
+
+Evas_Object* ge_grid_create_ly(Evas_Object* parent);
+Evas_Object* ge_grid_create_view(ge_ugdata* ugd, Evas_Object* parent);
+int ge_grid_clear_view(ge_ugdata *ugd);
+int ge_grid_update_view(ge_ugdata *ugd);
+int ge_grid_del_callbacks(ge_ugdata *ugd);
+int ge_grid_idler_append_thumbs(void* data);
+
+#endif /* _GE_GRIDVIEW_H_ */
diff --git a/libug/libug-gallery-efl/include/ge-strings.h b/libug/libug-gallery-efl/include/ge-strings.h
new file mode 100755 (executable)
index 0000000..be5bfbd
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+  * 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://www.tizenopensource.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 _GE_STRINGS_H_
+#define _GE_STRINGS_H_
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+#define _GE_GETSYSTEMSTR(ID)         dgettext("sys_string", (ID))
+#define _GE_GETLOCALSTR(ID)         dgettext("ug-gallery-efl", (ID))
+/* hard code strings */
+#define GE_ALBUM_ALL_NAME      _GE_GETLOCALSTR("IDS_MEDIABR_BODY_ALL_ALBUMS")
+#define GE_ALBUM_MY_NAME       "Camera shots"
+#define GE_TITLE_CHANGE_CALLER_ID      _("Change caller ID")
+/**
+*  when IDS_MEDIABR_BODY_NO_ALBUMS is added to po file,
+*  we can use _("IDS_MEDIABR_BODY_NO_ALBUMS")
+*  instead
+*/
+#define GE_LABEL_NO_ALBUMS             _GE_GETLOCALSTR("IDS_MEDIABR_BODY_NO_ALBUMS")
+#define GE_POPUP_ONLY_SUPPORT_IMAGE    _("Only image is supported!")
+#define GE_ALBUM_ROOT_NAME             _GE_GETLOCALSTR("IDS_MEDIABR_POP_NO_NAME")
+
+#define GE_UNABLE_USE_IN_UMS_MODE _GE_GETLOCALSTR("IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE")
+
+/* system strings which are included in sys-string-0 po files */
+#define GE_TITLE_ADD           _GE_GETSYSTEMSTR("IDS_COM_ADD")
+#define GE_TITLE_ALBUMS                _GE_GETSYSTEMSTR("IDS_COM_BODY_ALBUMS")
+#define GE_TITLE_IMAGE         _GE_GETSYSTEMSTR("IDS_COM_OPT_IMAGE")
+#define GE_TITLE_FILE          _GE_GETSYSTEMSTR("IDS_COM_POP_FILE")
+#define GE_TITLE_IMAGES                _GE_GETSYSTEMSTR("IDS_COM_BODY_IMAGES")
+#define GE_TITLE_VIDEOS                _GE_GETSYSTEMSTR("IDS_COM_BODY_VIDEOS")
+#define GE_TITLE_FILES         _GE_GETSYSTEMSTR("IDS_COM_OPT_FILES")
+#define GE_TITLE_CHANGE_WALLPAPER      _GE_GETSYSTEMSTR("IDS_COM_HEADER_CHANGE_WALLPAPER")
+#define GE_TITLE_VIDEO                 _GE_GETSYSTEMSTR("IDS_COM_BODY_VIDEO")
+#define GE_LABEL_NO_VIDEOS             _GE_GETSYSTEMSTR("IDS_COM_BODY_NO_VIDEOS")
+#define GE_SELINFO_SELECTED            _GE_GETSYSTEMSTR("IDS_COM_POP_SELECTED")
+#define GE_POPUP_NO_FILES_SELECTED     _GE_GETSYSTEMSTR("IDS_COM_POP_NO_FILES_SELECTED")
+
+#ifdef _cplusplus
+}
+#endif
+#endif
diff --git a/libug/libug-gallery-efl/include/ge-ui-util.h b/libug/libug-gallery-efl/include/ge-ui-util.h
new file mode 100755 (executable)
index 0000000..a3ed15b
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+  * 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://www.tizenopensource.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 _GE_UI_UTIL_H_
+#define _GE_UI_UTIL_H_
+
+#include <appcore-efl.h>
+#include "gallery-efl.h"
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+#define _EDJ(o)         elm_layout_edje_get(o)
+
+#define _GETICON(_path) \
+               ((1 == ecore_file_exists(_path) && (ecore_file_size(_path) > 0)) ? _path : GE_DEFAULT_THUMB_ICON)
+
+typedef enum {
+       AlbumsView_Title,
+       ThumbnailView_Title,
+}NaviTitleMode;
+
+typedef enum {
+       GE_Popup_NoButton,
+       GE_Popup_OneButton,
+       GE_Popup_TwoButton,
+       GE_Popup_UgExit,
+}GE_PopupMode;
+
+Evas_Object* ge_ui_create_navibar(ge_ugdata* ugd, Evas_Object* parent);
+Evas_Object* ge_ui_create_main_ly(ge_ugdata* ugd, Evas_Object* parent);
+int ge_ui_create_title_and_push(ge_ugdata *ugd, Evas_Object* parent,
+                               Evas_Object* obj, NaviTitleMode mode,
+                               char* title);
+Evas_Object* ge_ui_load_edj(Evas_Object *parent, const char *file, const char *group);
+Evas_Object* ge_ui_create_nocontents(ge_ugdata* ugd);
+Evas_Object* ge_ui_create_popup(ge_ugdata* ugd, GE_PopupMode mode, char* desc);
+int ge_ui_create_selinfo(ge_ugdata* ugd, Evas_Object* parent);
+int ge_ui_destroy_selinfo(ge_ugdata* ugd);
+
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif // end of _GE_UI_UTIL_H_
diff --git a/libug/libug-gallery-efl/include/ge-util.h b/libug/libug-gallery-efl/include/ge-util.h
new file mode 100755 (executable)
index 0000000..7df218d
--- /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://www.tizenopensource.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 _GE_UTIL_H_
+#define _GE_UTIL_H_
+
+#include "gallery-efl.h"
+
+ge_item* _ge_get_current_item(void);
+void _ge_set_current_item(ge_item* gitem);
+int ge_reg_db_update_noti(ge_ugdata* ugd);
+int ge_dereg_db_update_noti(void);
+int ge_reg_ums_noti(ge_ugdata* ugd);
+int ge_dereg_ums_noti(void);
+Eina_Bool ge_update_view(ge_ugdata* ugd, int mode);
+int _ge_ug_iv_get(void);
+void _ge_ug_iv_set(int ug_iv_state);
+ge_cluster* _ge_get_current_album(void);
+void _ge_set_current_album(ge_cluster* album_item);
+int ge_get_ums_state(ge_ugdata* ugd);
+
+#endif /* _GE_EXT_EXEC_H_ */
+
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-button.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-button.edc
new file mode 100755 (executable)
index 0000000..fdec384
--- /dev/null
@@ -0,0 +1,1124 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define BUTTON_STATE_ENABLED  0
+#define BUTTON_STATE_DISABLED 1
+
+#define BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC 108 115 118 255
+#define BUTTON_TEXT_STYLE1_TEXT_DISABLED_COLOR_INC 180 180 1 255
+
+#define BUTTON_TEXT_NAVIFRAME_NORMAL_COLOR_INC 211 211 211 255
+#define BUTTON_TEXT_NAVIFRAME_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_NAVIFRAME_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_NAVIFRAME_DISABLED_COLOR_INC 193 193 193 255
+
+#define BUTTON_TEXT_STYLE1_BG_MIN_INC 100 74
+#define BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC 148 74
+#define BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_TEXT_STYLE1_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 20 5
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 32
+
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_CONTENT_MIN_MAX_INC 35 35
+
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC 106 74
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC 56 56
+
+#define BUTTON_NAVIFRAME_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_VISIBLE_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_NAVIFRAME_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_PADDING_MIN_INC 5 5
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_NAVIFRAME_FONT_SIZE_INC 28
+#define BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC 124 74
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/style1";
+      alias: "elm/button/base/text_only/style1";
+      alias: "elm/button/base/center";
+      alias: "elm/button/base/icon_and_text/center";
+      alias: "elm/button/base/nocontents/search_button";
+      images {
+         image: GE_EDC_IMAGE_BTN_01_NORMAL COMP;
+         image: GE_EDC_IMAGE_BTN_01_PRESS COMP;
+         image: GE_EDC_IMAGE_BTN_01_DIM COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               image {
+                  normal: GE_EDC_IMAGE_BTN_01_NORMAL;
+                  border: BUTTON_TEXT_STYLE1_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_BTN_01_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              image.normal: GE_EDC_IMAGE_BTN_01_DIM;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_BTN_01_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_BG_MIN_INC;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_after_icon";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_after_icon";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;
+               text {
+                  font: "HelveticaNeue:style=Medium";
+                  size: BUTTON_TEXT_STYLE1_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+               visible: 1;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_after_icon";
+            target: "icon_rect";
+            target: "bg";
+         }
+         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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+   ///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/naviframe/back_btn/gallery_efl";
+       alias: "elm/button/base/naviframe/back_btn/default";
+       alias: "elm/button/base/naviframe/prev_btn/default";
+       alias: "elm/button/base/naviframe/end_btn/default";
+       images {
+         image: GE_EDC_IMAGE_BTN_PREV COMP;
+         image: GE_EDC_IMAGE_BTN_PREV_PRESS COMP;
+         image: GE_EDC_IMAGE_PREV COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+               image {
+                  normal: GE_EDC_IMAGE_BTN_PREV;
+                  border: BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_BTN_PREV_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_BTN_PREV_PRESS;
+            }
+         }
+         part { name: "back_button";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+               rel1.to: "button_image";
+               rel2.to: "button_image";
+               image.normal: GE_EDC_IMAGE_PREV;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         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: "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";
+         }
+         program { name: "button_unpress";
+            action: SIGNAL_EMIT "elm,action,unpress" "";
+         }
+         program { name: "button_mouseout_clicked";
+            signal: "mouse,up,1";
+            source: "over3";
+            script {
+               if (get_int(button_state) != 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: "disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "button_image";
+            target: "disabler";
+            after: "disable_button";
+         }
+         program { name: "disable_button";
+            script {
+               set_int(button_state, 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_button";
+         }
+         program { name: "enable_button";
+            script {
+               set_int(button_state, BUTTON_STATE_ENABLED);
+            }
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/naviframe/title/gallery_efl";
+       alias: "elm/button/base/naviframe/title/default";
+
+      images {
+         image: GE_EDC_IMAGE_TITLE_BTN COMP;
+         image: GE_EDC_IMAGE_TITLE_BTN_PRESS COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC;
+               max: BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC;
+               image {
+                  normal: GE_EDC_IMAGE_TITLE_BTN;
+                  border: BUTTON_NAVIFRAME_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_TITLE_BTN_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GE_EDC_IMAGE_TITLE_BTN_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_NAVIFRAME_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BG_MIN_INC;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_NAVIFRAME_VISIBLE_BG_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_NAVIFRAME_ICONONLY_BG_MIN_INC;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_NAVIFRAME_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_after_icon";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_after_icon";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_TEXT_NAVIFRAME_NORMAL_COLOR_INC;
+               text {
+                  font: "HelveticaNeue:style=Medium";
+                  size: BUTTON_TEXT_NAVIFRAME_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_NAVIFRAME_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_TEXT_NAVIFRAME_DISABLED_COLOR_INC;
+               visible: 1;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_NAVIFRAME_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_after_icon";
+            target: "icon_rect";
+            target: "bg";
+         }
+         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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+#undef BUTTON_STATE_ENABLED
+#undef BUTTON_STATE_DISABLED
+
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-check.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-check.edc
new file mode 100755 (executable)
index 0000000..038e506
--- /dev/null
@@ -0,0 +1,425 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC 42 42
+
+#define CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC        255 255 255 255
+#define CHECK_DEFAULT_TEXT_PRESSED_COLOR_INC      255 255 255 255
+#define CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC          136 136 136 136
+
+////////////////////////////////////////////////////////////////////////////////////////
+//
+// check default textblock style
+//
+///////////////////////////////////////////////////////////////////////////////////////
+       styles {
+               style { name: "check_label_textblock_style";
+                       base: "font=HelveticaNeue:style=Roman font_size=32 color=#ffffff wrap=char";
+                       tag: "br" "\n";
+                       tag: "ps" "ps";
+                       tag: "hilight" "+ font=HelveticaNeue:style=Bold";
+                       tag: "b" "+ font=HelveticaNeue:style=Bold";
+                       tag: "whitecolor" "+ color=#ffffff";
+                       tag: "tab" "\t";
+               }
+       }
+
+#define CHECK_STATE_DEFAULT 0
+#define CHECK_STATE_VISIBLE 1
+#define CHECK_STATE_DISABLED_VISIBLE 2
+#define CHECK_STATE_DISABLED 3
+
+////////////////////////////////////////////////////////////////////////////////
+#define CHECK_STYLE_GRID(style_name, image_grid, width, height) \
+   group { \
+      name: "elm/check/base/"style_name; \
+      images { \
+            image: image_grid COMP; \
+      } \
+      parts { \
+         part { \
+            name: "bg"; \
+            type: RECT; \
+            mouse_events: 1; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               rel1.relative: 0.0 0.0; \
+               rel2.relative: 1.0 1.0; \
+               color: 0 0 0 0; \
+               visible: 1; \
+            } \
+            description { \
+               state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { \
+               state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         } \
+               part { name: "icon_bg_img"; \
+                       type: RECT; \
+                       mouse_events: 0; \
+                       scale : 1; \
+                       description { \
+                               color: 0 0 0 0; \
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; } \
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; } \
+                       } \
+               } \
+               part { \
+                       name: "icon_bg"; \
+                       type: RECT; \
+                       description { \
+                               state: "default" 0.0; \
+                               color: 0 0 0 0; \
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; } \
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; } \
+                       } \
+               } \
+         part { \
+            name: "bg2"; \
+            type: RECT; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               rel1.to: "icon_bg"; \
+               rel2.to: "icon_bg"; \
+               align: 0.5 0.5; \
+               min: width height; \
+               max: width height; \
+               color:  0 0 0 0; \
+               visible: 1; \
+            } \
+            description { \
+               state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { \
+               state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         } \
+         part { \
+            name: "selected_bg"; \
+            type: RECT; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               rel1.to: "icon_bg"; \
+               rel2.to: "icon_bg"; \
+               color: 0 0 0 0; \
+               visible: 0; \
+            } \
+            description { \
+               state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               color: 0 0 0 153; \
+               visible: 1; \
+            } \
+         } \
+         part { \
+            name: "check"; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               rel1.to: "bg2"; \
+               rel2.to: "bg2"; \
+               visible: 0; \
+               image.normal: image_grid; \
+            } \
+            description { \
+               state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { \
+               state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { \
+               state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         } \
+         part { \
+            name: "elm.swallow.content"; \
+            type: SWALLOW; \
+            description { \
+               state: "default" 0.0; \
+               fixed: 1 0; \
+               visible: 0; \
+               color: 255 255 255 255; \
+               align: 0.0 0.5; \
+               rel1.to_x: "bg2"; \
+               rel1.relative: 1.0 0.0; \
+               rel1.offset: 1 1; \
+               rel2.to_x: "bg2"; \
+               rel2.relative: 1.0 1.0; \
+               rel2.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; \
+               color: 128 128 128 128; \
+            } \
+            description { \
+               state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               color: 128 128 128 128; \
+               fixed: 1 1; \
+               visible: 1; \
+               aspect: 1.0 1.0; \
+            } \
+         } \
+         part { \
+            name: "elm.text"; \
+            type: TEXTBLOCK; \
+            mouse_events: 0; \
+            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; } \
+               color: 255 255 255 255; \
+               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: "events"; \
+            type: RECT; \
+            ignore_flags: ON_HOLD; \
+            description { \
+               state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         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: "click"; \
+            signal: "mouse,up,1"; \
+            source: "events"; \
+            action: SIGNAL_EMIT "elm,action,check,toggle" ""; \
+            after: "bg_normal"; \
+         } \
+         program { \
+            name: "bg_normal"; \
+            script { \
+               set_state(PART:"bg", "default", 0.0); \
+               set_state(PART:"bg2", "default", 0.0); \
+               } \
+            } \
+         program { \
+            name: "mouseout"; \
+            signal: "mouse,out"; \
+            source: "events"; \
+            after: "bg_check_normal"; \
+         } \
+         program { \
+            name: "bg_check_normal"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "pressed")) \
+                        set_state(PART:"check", "visible", 0.0); \
+               set_state(PART:"bg", "default", 0.0); \
+               set_state(PART:"bg2", "default", 0.0); \
+            } \
+         } \
+         program { \
+            name: "pressed"; \
+            signal: "mouse,down,1"; \
+            source: "events"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                        set_state(PART:"check", "pressed", 0.0); \
+               set_state(PART:"bg", "pressed", 0.0); \
+               set_state(PART:"bg2", "pressed", 0.0); \
+            } \
+         } \
+         program { \
+            name: "check_on"; \
+            signal: "elm,state,check,on"; \
+            source: "elm"; \
+            action:  STATE_SET "visible" 0.0; \
+            target: "check"; \
+            target: "selected_bg"; \
+         } \
+         program { \
+            name: "check_off"; \
+            signal: "elm,state,check,off"; \
+            source: "elm"; \
+            action:  STATE_SET "default" 0.0; \
+            target: "check"; \
+            target: "selected_bg"; \
+         } \
+         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: "bg"; \
+            target: "bg2"; \
+            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); \
+            } \
+         } \
+         program { \
+            name: "enable"; \
+            signal: "elm,state,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "disabler"; \
+            target: "bg"; \
+            target: "bg2"; \
+            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); \
+            } \
+         } \
+      } \
+   }
+
+////////////////////////////////////////////////////////////////////////////////
+       CHECK_STYLE_GRID("gallery_efl/grid", GE_EDC_IMAGE_CHECK_GRID, 64, 64)
+
+
+#undef CHECK_STATE_DEFAULT
+#undef CHECK_STATE_VISIBLE
+#undef CHECK_STATE_DISABLED_VISIBLE
+#undef CHECK_STATE_DISABLED
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-edc-res.h b/libug/libug-gallery-efl/res/edc/gallery-efl-edc-res.h
new file mode 100755 (executable)
index 0000000..122c47f
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/* Definition of image path used in edc file */
+
+/* gallery-efl-nocontents.edc */
+#define         GE_EDC_IMAGE_NOCONTENTS_PIC "T01_Nocontents_picture.png"
+
+/* gallery-efl-gengrid-item-albums.edc */
+#define        GE_EDC_IMAGE_MAIN_FOLDER_BG "T01_main_folder_bg.png"
+
+/* gallery-efl-gengrid-item-thumbview.edc */
+#define        GE_EDC_IMAGE_BUTTON_PLAY "T01_btn_play.png"
+#define GE_EDC_IMAGE_THUMB_BG "T01_thumbs_bg.png"
+
+/* gallery-efl-button.edc */
+#define        GE_EDC_IMAGE_BTN_PREV "00_winset_Back_btn_normal.png"
+#define        GE_EDC_IMAGE_BTN_PREV_PRESS "00_winset_Back_btn_press.png"
+#define        GE_EDC_IMAGE_PREV "00_winset_Back.png"
+#define        GE_EDC_IMAGE_TITLE_BTN "T01_title_btn.png"
+#define        GE_EDC_IMAGE_TITLE_BTN_PRESS "T01_title_btn_press.png"
+#define        GE_EDC_IMAGE_BTN_01_NORMAL "T01_title_btn.png"
+#define        GE_EDC_IMAGE_BTN_01_PRESS "T01_title_btn_press.png"
+#define        GE_EDC_IMAGE_BTN_01_DIM "T01_title_btn_press.png"
+
+/* gallery-efl-check.edc */
+#define        GE_EDC_IMAGE_CHECK_GRID "T01_grid_select_check.png"
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-albums.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-albums.edc
new file mode 100755 (executable)
index 0000000..24dd248
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/* 14 + 334 + 10 */
+#define ALBUM_ITEM_W 358
+/* 26 + 334 */
+#define ALBUM_ITEM_H 360
+
+#define ALBUM_W 334
+#define ALBUM_H 334
+
+#define ALBUM_GAP_L 12
+#define ALBUM_GAP_R 12
+#define ALBUM_GAP_T 26
+
+#define ALBUM_ICON_W 318
+#define ALBUM_ICON_H 318
+
+#define ALBUM_ICON_GAP_L 8
+#define ALBUM_ICON_GAP_R 8
+#define ALBUM_ICON_GAP_B 16
+#define ALBUM_ICON_PAD 3
+
+#define ALBUM_TEXT_AREA_W 207
+#define ALBUM_TEXT_AREA_H 102
+#define ALBUM_TEXT_GAP_L 4
+#define ALBUM_TEXT_GAP_R 4
+#define ALBUM_TEXT_Y 60
+#define ALBUM_TEXT_NAME_H 32
+#define ALBUM_TEXT_DATE_H 25
+
+#define ALBUM_RENAME_BTN_W 64
+#define ALBUM_RENAME_BTN_H 64
+
+#define ALBUM_CHECKBOX_W 42
+#define ALBUM_CHECKBOX_H 42
+#define ALBUM_CHECKBOX_GAP_L 1
+#define ALBUM_CHECKBOX_GAP_T 8
+
+
+group {
+       name: "elm/gengrid/item/albums_view/gallery_efl/default";
+
+       data.item: "texts" "elm.text.name elm.text.date elm.text.count";
+       data.item: "contents" "elm.swallow.firsticon elm.swallow.icon elm.swallow.onlyicon elm.swallow.check_bg label_bg";
+
+    images {
+               image: GE_EDC_IMAGE_MAIN_FOLDER_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                       state: "default" 0.0;
+                               color: 255 0 0 0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_W ALBUM_H;
+                               state: "default" 0.0;
+                               image {
+                                       normal : GE_EDC_IMAGE_MAIN_FOLDER_BG;
+                               }
+                               rel1 { relative: ALBUM_GAP_L/ALBUM_ITEM_W ALBUM_GAP_T/ALBUM_ITEM_H; to:"bg"; }
+                               rel2 { relative: (ALBUM_ITEM_W-ALBUM_GAP_R-1)/ALBUM_ITEM_W 1.0; to:"bg"; }
+                       }
+               }
+               part { name: "icon_bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_ICON_W ALBUM_ICON_H;
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_ICON_GAP_L/ALBUM_ICON_W 0.0; to:"icon_bg_img"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_GAP_R+2)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_GAP_B+2)/ALBUM_ICON_H; to:"icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.onlyicon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                                       rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+       }
+               part {
+                       name: "label_bg";
+                       type: SWALLOW;
+            mouse_events: 1;
+            repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                               rel2 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W-1)/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H-1)/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.firsticon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W+ALBUM_ICON_PAD)/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+        }
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                                               state: "default" 0.0;
+                                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H); to: "icon_bg"; }
+                                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+        }
+               part {
+                       name: "edit_text_bg";
+                       type: RECT;
+               mouse_events: 1;
+               repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                       rel1 { relative: 0.0  0.0; to: "label_bg"; }
+                       rel2 { relative: 1.0  1.0; to: "label_bg"; }
+                               color: 100 100 100 100;
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+        part {
+                       name: "elm.text.date";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W  ALBUM_TEXT_NAME_H/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  (ALBUM_TEXT_NAME_H+ALBUM_TEXT_DATE_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                                       color: 190 190 190 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 22;
+                                       align: 0.0 0.5;
+                               }
+                       }
+        }
+               part {
+                       name: "elm.text.count";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               rel1 { relative: ((ALBUM_TEXT_GAP_L+1)/ALBUM_TEXT_AREA_W)  ALBUM_TEXT_Y/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  1.0; to: "label_bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 38;
+                                       align: 1.0 0.5;
+                               }
+                       }
+                       description {
+                                               state: "hide" 0.0;
+                                               inherit: "default" 0.0;
+                                               visible: 0;
+                                       }
+        }
+               part {
+                       name: "selected_bg";
+                       type: RECT;
+                       description {
+                state: "default" 0.0;
+                               visible: 0;
+                rel1 { relative: 0.0 0.0; to: "elm.swallow.icon"; }
+                rel2 { relative: 1.0 1.0; to: "elm.swallow.icon"; }
+            }
+                       description {
+                               state: "selected" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+        part {
+                       name: "elm.swallow.check_bg";
+                       type: SWALLOW;
+            mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                               rel2 { relative: ((ALBUM_ICON_W-ALBUM_ICON_PAD-1)/ALBUM_ICON_W) ((ALBUM_ICON_H-ALBUM_ICON_PAD-1)/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.text.name";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                                               rel1 { relative: (ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W) 0.0; to: "label_bg"; }
+                                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W (ALBUM_TEXT_NAME_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                                       color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 28;
+                                       align: 0.0 0.5;
+                               }
+                       }
+                                       description {
+                                               state: "blue" 0.0;
+                                               inherit: "default" 0.0;
+                                               color: 111 198 235 255;
+                                       }
+                               }
+        }
+
+      programs {
+               program {
+               name: "go_active";
+               signal: "elm,state,selected";
+               source: "elm";
+               action: STATE_SET "selected" 0.0;
+               target: "selected_bg";
+       }
+       program {
+               name: "go_passive";
+               signal:  "elm,state,unselected";
+               source:  "elm";
+               action:  STATE_SET "default" 0.0;
+               target:  "selected_bg";
+       }
+               program {       /* Show blue name */
+                       name: "show_blue_name";
+                       signal: "elm,name,show,blue";
+                       source: "elm";
+                      script {
+                          set_state(PART:"elm.text.name", "blue", 0.0);
+                       }
+               }
+       }
+}
+
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-thumbview.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-gengrid-item-thumbview.edc
new file mode 100755 (executable)
index 0000000..a0d981a
--- /dev/null
@@ -0,0 +1,598 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define THUMBNAILS_BG_COLOR            190 189 189 255
+
+/* Grid item background size W: 14+158+6; H: 24+158 */
+#define W               178
+#define H               182
+
+/* Gap between bg and icon */
+#define GAP_BG_L         14
+#define GAP_BG_R         6
+#define GAP_BG_T         24
+
+/* Gap between icon and shadow */
+#define GAP_ICON_L         3
+#define GAP_ICON_R         3
+#define GAP_ICON_T         0
+#define GAP_ICON_B         4
+
+/* Shadow image size */
+#define SHADOW_W               (W-GAP_BG_L-GAP_BG_R+GAP_ICON_L+GAP_ICON_R)
+#define SHADOW_H               (H-GAP_BG_T+GAP_ICON_B)
+
+/* Gap between bg and shadow */
+#define GAP_SHADOW_L         (GAP_BG_L-GAP_ICON_L)
+#define GAP_SHADOW_R         (GAP_BG_R-GAP_ICON_R)
+#define GAP_SHADOW_T         (GAP_BG_T-GAP_ICON_T)
+#define GAP_SHADOW_B         (0+GAP_ICON_B)
+
+/* Thumbnail boundary size */
+#define INNER         1
+
+/* Bookmark icon boundary size */
+#define BOOKMARK_ICON_W         30
+#define BOOKMARK_ICON_H         38
+
+/* Backgroud size for setting play icon position */
+#define PLAY_BG_W         (47+64+47)
+#define PLAY_BG_H         (27+64+28)
+#define PLAY_W         64
+#define PLAY_H         64
+#define PLAY_X         47
+#define PLAY_Y         27
+
+group {
+       name: "elm/gengrid/item/thumbnail_view/gallery_efl/default";
+
+       data.item: "contents" "elm.swallow.icon elm.swallow.end";
+
+       parts {
+        part {
+            name: "bg";
+            type: RECT;
+            description {
+                state: "default" 0.0;
+                color: 0 0 0 0;
+                rel1 { relative: 0.0 0.0; offset: 0 0;}
+                rel2 { relative: 1.0 1.0; offset: 0 0;}
+            }
+        }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       scale : 1;
+
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.5;
+                               visible: 0;
+                               color: 0 0 0 0;
+                               rel1 { relative: 0.0 0.0;to:"bg"; }
+                               rel2 { relative: 1.0 1.0;to:"bg"; }
+
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                               rel1 { relative: 0.0 0.0; to: "icon_bg"; }
+                               rel2 { relative: 1.0 1.0; to: "icon_bg"; }
+                       }
+               }
+        part {
+            name: "elm.swallow.end";
+            type: SWALLOW;
+            description {
+                state: "default" 0.0;
+                rel1 { relative: 0.0 0.0; to: "elm.swallow.icon"; }
+                rel2 { relative: 1.0 1.0; to: "elm.swallow.icon"; }
+            }
+        }
+       }
+
+       programs {
+               program {
+                       name: "movedonw_bg";
+                       signal: "movedown,bg,show";
+                       source: "bg";
+                       action: STATE_SET "move_down" 0.0;
+                       target: "bg";
+               }
+       }
+}
+
+
+
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout";
+
+       images {
+               image: GE_EDC_IMAGE_THUMB_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GE_EDC_IMAGE_THUMB_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout_video";
+       images {
+               image: GE_EDC_IMAGE_BUTTON_PLAY COMP;
+               image: GE_EDC_IMAGE_THUMB_BG COMP;
+       }
+
+               parts {
+                       part {
+                       name: "bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GE_EDC_IMAGE_THUMB_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                       state: "default" 0.0;
+                       color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.text.bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               color: 0 0 0 130;
+                               align: 0.5 1.0;
+                               fixed: 0 1;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER-BOOKMARK_ICON_H+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1+0.5)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.videoicon_bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               align: 0.5 0.0;
+                               fixed: 1 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.swallow.icon";}
+                               rel2 { relative: 1.0 0.0; to_x: "elm.swallow.icon"; to_y: "elm.text.bg";}
+                       }
+               }
+               part {
+                       name: "elm.swallow.videoicon";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               align: 0.5 0.5;
+                               aspect: 1.0 1.0;
+                               rel1 { relative: PLAY_X/PLAY_BG_W PLAY_Y/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               rel2 { relative: (PLAY_X+PLAY_W)/PLAY_BG_W (PLAY_Y+PLAY_H)/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               image.normal: GE_EDC_IMAGE_BUTTON_PLAY;
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               rel1 { relative: 0.0  0.0; to: "elm.text.bg"; }
+                               rel2 { relative: 1.0  1.0; to: "elm.text.bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "HelveticaNeue:style=Medium";
+                                       size: 26;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout_video_bookmark";
+       images {
+               image: GE_EDC_IMAGE_BUTTON_PLAY COMP;
+               image: GE_EDC_IMAGE_THUMB_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GE_EDC_IMAGE_THUMB_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.text.bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale : 1;
+
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               color: 0 0 0 130;
+                               min: 0 24;
+                               align: 0.5 1.0;
+                               fixed: 0 1;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER-BOOKMARK_ICON_H+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1+0.5)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.videoicon_bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               align: 0.5 0.0;
+                               fixed: 1 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.swallow.icon";}
+                               rel2 { relative: 1.0 0.0; to_x: "elm.swallow.icon"; to_y: "elm.text.bg";}
+                       }
+               }
+               part {
+                       name: "elm.swallow.videoicon";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 40 40;
+                               visible: 1;
+                               align: 0.5 0.5;
+                               aspect: 1.0 1.0;
+                               rel1 { relative: PLAY_X/PLAY_BG_W PLAY_Y/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               rel2 { relative: (PLAY_X+PLAY_W)/PLAY_BG_W (PLAY_Y+PLAY_H)/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               image.normal: GE_EDC_IMAGE_BUTTON_PLAY;
+                       }
+               }
+               part {
+                       name: "bookmarkicon_bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOOKMARK_ICON_W BOOKMARK_ICON_H;
+                               max: BOOKMARK_ICON_W BOOKMARK_ICON_H;
+                               align: 0.0 0.5;
+                               fixed: 1 1;
+                               visible: 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.text.bg"; }
+                               rel2 { relative: 0.0 1.0; to: "elm.text.bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.bookmarkicon";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.5;
+                               visible: 1;
+                               rel1 { relative: 0.0 0.0; to: "bookmarkicon_bg"; }
+                               rel2 { relative: 1.0 1.0; to: "bookmarkicon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                               rel1 { relative: 0.9  0.0; to_x: "elm.swallow.bookmarkicon"; to_y: "elm.text.bg"; }
+                               rel2 { relative: 1.0  1.0; to: "elm.text.bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "HelveticaNeue:style=Medium";
+                                       size: 26;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-nocontents.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-nocontents.edc
new file mode 100755 (executable)
index 0000000..82718d3
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC 32
+#define NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC 173 170 165 255
+
+   group {
+      name: "elm/layout/nocontents/gallery_efl";
+      styles{
+         style { name: "nocontent_style";
+            base: "font=Helvetica Neue:style=Roman font_size="NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC" align=center color=#ffffff wrap=word";
+            tag:  "br" "\n";
+            tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+            tag:  "b" "+ font=Helvetica Neue:style=Bold";
+            tag:  "tab" "\t";
+         }
+      }
+      images {
+         image: GE_EDC_IMAGE_NOCONTENTS_PIC COMP;
+      }
+      parts {
+         part { name: "bg";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 1;
+               rel1 { relative: 0.0 0.0;}
+               rel2 { relative: 1.0 1.0;}
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "nocontents.image";
+            description { state: "default" 0.0;
+               visible: 1;
+               align: 0.5 0.0;
+               rel1 { relative: 203/720 296/1016; to: "bg";}
+               rel2 { relative: (203+314)/720 (296+310)/1016; to: "bg";}
+               image {
+                  normal: GE_EDC_IMAGE_NOCONTENTS_PIC;
+                  border: 1 1 1 1;
+                  border_scale: 1;
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: BOTH;
+            }
+         }
+         part { name: "middle.padding";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "nocontents.image";}
+               rel2 { relative: 1.0 (296+310+54)/1016; to: "bg";}
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            description { state: "default" 0.0;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               visible: 1;
+               rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "middle.padding";}
+               rel2 { relative: 1.0 1.0; to: "bg";}
+               color: NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC;
+               text {
+                  style: "nocontent_style";
+                  align: 0.5 0.5;
+                  min: 0 0;
+                  max: 0 1;
+               }
+            }
+         }
+      }
+   }
+
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl-selection-info.edc b/libug/libug-gallery-efl/res/edc/gallery-efl-selection-info.edc
new file mode 100755 (executable)
index 0000000..a575104
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define SELINFO_PORT_W         720
+#define SELINFO_H              48
+#define SELINFO_TOP_LINE_COLOR  56 56 56 255
+#define SELINFO_TOP_LINE_H             2
+#define SELINFO_PAD_L          14
+
+#define GE_EDC_COLOR_THEME_GRAY  91 91 91 255
+
+group
+{
+    name: "elm/standard/selectioninfo/ug_selectioninfo_viewer";
+
+
+    parts {
+        part {
+            name: "bg";
+            type: RECT;
+                       mouse_events: 1;
+            repeat_events: 1;
+            scale : 1;
+            description {
+                  state: "default" 0.0;
+                  min: SELINFO_PORT_W SELINFO_H;
+                  fixed: 1 1;
+                  align: 0.5 1.0;
+                  rel1.relative: 0.5 1.0;
+                  rel2.relative: 0.5 1.0;
+                  color: GE_EDC_COLOR_THEME_GRAY;
+
+            }
+        }
+        part { name: "top_line";
+                               type: RECT;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 SELINFO_TOP_LINE_H;
+                                       fixed: 1 0;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "bg"; }
+                                       rel2 { relative: 1.0 SELINFO_TOP_LINE_H/SELINFO_H; to: "bg"; }
+                                       color: SELINFO_TOP_LINE_COLOR;
+                               }
+               }
+               part { name: "left_padding";
+                       type: RECT;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               min: SELINFO_PAD_L SELINFO_H;
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               rel1 { relative: 0.0 0.0; to: "bg"; }
+                               rel2 { relative: 0.0 1.0; to: "bg"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.0 0.5;
+                               rel1 { relative: 1.0 0.0; to_x: "left_padding"; to_y: "bg"; }
+                               rel2 { relative: 1.0 1.0; to: "bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 32;
+                                       text: "";
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+
+       programs {
+           program {//default selection
+            name: "selectioninfo_portrait";
+            signal: "elm,selectioninfo,ug_portrait";
+            source: "elm";
+            script {
+               set_state(PART:"bg", "default", 0.0);
+            }
+
+           }
+       }
+}
+
diff --git a/libug/libug-gallery-efl/res/edc/gallery-efl.edc b/libug/libug-gallery-efl/res/edc/gallery-efl.edc
new file mode 100755 (executable)
index 0000000..86b84f9
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define FONT_ROM       "HelveticaNeue:style=Roman"
+#define FONT_MED       "HelveticaNeue:style=Medium"
+
+#include "gallery-efl-edc-res.h"
+
+collections {
+#include "gallery-efl-gengrid-item-thumbview.edc"
+#include "gallery-efl-gengrid-item-albums.edc"
+#include "gallery-efl-selection-info.edc"
+#include "gallery-efl-button.edc"
+#include "gallery-efl-check.edc"
+#include "gallery-efl-nocontents.edc"
+
+       group
+       {
+        name: "gallery_efl/gridview";
+
+        parts {
+                       part {
+                           name: "background";
+                               type, RECT;
+
+                       description {
+                       state: "default" 0.0;
+                       rel1 { relative: 0.0 0.0; offset: 0 0; }
+                       rel2 { relative: 1.0 1.0; offset: -1 -1; }
+                       color, 0 0 0 0;
+                       }
+                       }
+
+                       part {
+                               name: "contents";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "background";}
+                                       rel2 { relative: 1.0 1.0; to: "background";}
+                               }
+                               description {
+                                       state: "moveup" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "background";}
+                                       rel2 { relative: 1.0 0.0; to: "elm.padding.selinfo"; }
+                               }
+
+                       }
+                       part {
+                               name: "elm.padding.selinfo";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                               state: "default" 0.0;
+                                               min: 0 SELINFO_H; // bottom padding size for selectioninfo
+                                               fixed: 0 1;
+                                               align: 0.5 1.0;
+                                               rel1 { relative: 0.0 1.0; }
+                                               rel2 { relative: 1.0 1.0; }
+                                               color: 0 0 0 0;
+                                               visible: 0;
+                               }
+                       }
+               }
+
+               programs {
+               program {
+                       name: "thumb_view_default";
+                       signal: "elm,thumb_view,state,default";
+                       source: "elm";
+                       script {
+                               set_state(PART:"contents", "default", 0.0);
+               }
+            }
+               program {
+                       name: "thumb_view_moveup";
+                       signal: "elm,thumb_view,state,moveup";
+                       source: "elm";
+                       script {
+                               set_state(PART:"contents", "moveup", 0.0);
+               }
+            }
+        }
+       }
+
+       group
+       {
+           name: "gallery_efl/albumview";
+
+           parts {
+                       part {
+                           name: "background";
+                               type, RECT;
+
+                       description {
+                       state: "default" 0.0;
+                       rel1 { relative: 0.0 0.0; offset: 0 0; }
+                       rel2 { relative: 1.0 1.0; offset: -1 -1; }
+                       color, 0 0 0 0;
+                       }
+                       }
+
+                       part {
+                       name: "contents";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       scale: 1;
+
+                       description {
+                       state: "default" 0.0;
+                       rel1 { relative: 0.0 0.0; to: "background";}
+                       rel2 { relative: 1.0 1.0; to: "background";}
+
+                       }
+                       }
+               }
+       }
+}
diff --git a/libug/libug-gallery-efl/res/images/00_winset_Back.png b/libug/libug-gallery-efl/res/images/00_winset_Back.png
new file mode 100755 (executable)
index 0000000..780e24e
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/00_winset_Back.png differ
diff --git a/libug/libug-gallery-efl/res/images/00_winset_Back_btn_normal.png b/libug/libug-gallery-efl/res/images/00_winset_Back_btn_normal.png
new file mode 100755 (executable)
index 0000000..cb7ca0b
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/00_winset_Back_btn_normal.png differ
diff --git a/libug/libug-gallery-efl/res/images/00_winset_Back_btn_press.png b/libug/libug-gallery-efl/res/images/00_winset_Back_btn_press.png
new file mode 100755 (executable)
index 0000000..7032b70
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/00_winset_Back_btn_press.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_Nocontents_broken.png b/libug/libug-gallery-efl/res/images/T01_Nocontents_broken.png
new file mode 100755 (executable)
index 0000000..9326d0a
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_Nocontents_broken.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_Nocontents_picture.png b/libug/libug-gallery-efl/res/images/T01_Nocontents_picture.png
new file mode 100644 (file)
index 0000000..0f98480
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_Nocontents_picture.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_btn_play.png b/libug/libug-gallery-efl/res/images/T01_btn_play.png
new file mode 100644 (file)
index 0000000..b25d19c
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_btn_play.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_controlbar_icon_done.png b/libug/libug-gallery-efl/res/images/T01_controlbar_icon_done.png
new file mode 100755 (executable)
index 0000000..46304a4
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_controlbar_icon_done.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_grid_select_check.png b/libug/libug-gallery-efl/res/images/T01_grid_select_check.png
new file mode 100644 (file)
index 0000000..f131f47
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_grid_select_check.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_icon_lock.png b/libug/libug-gallery-efl/res/images/T01_icon_lock.png
new file mode 100755 (executable)
index 0000000..44c98da
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_icon_lock.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_icon_thumbnail_bookmark.png b/libug/libug-gallery-efl/res/images/T01_icon_thumbnail_bookmark.png
new file mode 100644 (file)
index 0000000..bdb690a
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_icon_thumbnail_bookmark.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_main_folder_bg.png b/libug/libug-gallery-efl/res/images/T01_main_folder_bg.png
new file mode 100644 (file)
index 0000000..16d1d59
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_main_folder_bg.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_thumbs_bg.png b/libug/libug-gallery-efl/res/images/T01_thumbs_bg.png
new file mode 100644 (file)
index 0000000..c71e2d3
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_thumbs_bg.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_title_btn.png b/libug/libug-gallery-efl/res/images/T01_title_btn.png
new file mode 100644 (file)
index 0000000..0d1fbcf
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_title_btn.png differ
diff --git a/libug/libug-gallery-efl/res/images/T01_title_btn_press.png b/libug/libug-gallery-efl/res/images/T01_title_btn_press.png
new file mode 100644 (file)
index 0000000..afdecba
Binary files /dev/null and b/libug/libug-gallery-efl/res/images/T01_title_btn_press.png differ
diff --git a/libug/libug-gallery-efl/src/gallery-efl.c b/libug/libug-gallery-efl/src/gallery-efl.c
new file mode 100755 (executable)
index 0000000..0215aa7
--- /dev/null
@@ -0,0 +1,633 @@
+/*
+  * 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://www.tizenopensource.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 UG_MODULE_API
+#define UG_MODULE_API __attribute__ ((visibility("default")))
+#endif
+
+#include <Evas.h>
+#include <aul.h>
+#include "gallery-efl.h"
+#include "ge-debug.h"
+#include "ge-albums.h"
+#include "ge-gridview.h"
+#include "ge-db-handler.h"
+#include "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-ext-ug-load.h"
+#include "ge-strings.h"
+
+static ge_view_mode g_view_mode = GE_AlbumsView_Mode;
+#define GE_BG_COLOR_DEFAULT 45
+#define GE_BG_ALPHA_DEFAULT 255
+
+
+ge_view_mode _ge_get_view_mode(void)
+{
+       return g_view_mode;
+}
+
+void _ge_set_view_mode(ge_view_mode mode)
+{
+       g_view_mode = mode;
+}
+
+static int _ge_create_ly_view(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(ugd->navi_bar, -1);
+
+       /**
+       * Init libmedia-info.
+       * If failed, records couldn't be got from DB, cluster list is emty.
+       * Show warning message instead of return -1;
+       */
+       if(ge_db_init(ugd) != GE_DB_SUCCESS)
+       {
+               ge_dbgW("ge_db_init failed!");
+       }
+
+       /**
+       * Get cluster list from DB.
+       * If cluster list is empty, GE_DB_FAILED returned,
+       * "No contents" view would be created and showed.
+       * Show warning message instead of return -1;
+       */
+       if(ge_db_get_clusters_list(ugd) != GE_DB_SUCCESS)
+       {
+               ge_dbgW("ge_db_get_clusters_list failed!");
+       }
+       /* Create layout of albums view */
+       ugd->albums_view_ly = ge_albums_create_ly(ugd->navi_bar);
+       GE_CHECK_VAL(ugd->albums_view_ly, -1);
+       /* Create albums view */
+       ugd->albums_view = ge_albums_create_view(ugd, ugd->albums_view_ly);
+       GE_CHECK_VAL(ugd->albums_view, -1);
+       elm_object_part_content_set(ugd->albums_view_ly, "contents", ugd->albums_view);
+
+       ge_ui_create_title_and_push(ugd, ugd->navi_bar, ugd->albums_view_ly, AlbumsView_Title, ugd->albums_view_title);
+       _ge_set_view_mode( GE_AlbumsView_Mode );
+
+       return 0;
+}
+
+static Evas_Object *_ge_create_bg(Evas_Object *parent)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(parent);
+       Evas_Object *bg = NULL;
+
+       bg = elm_bg_add(parent);
+       /* Show special color(48,48,48,255) of background */
+       elm_bg_color_set(bg, GE_BG_COLOR_DEFAULT,
+                        GE_BG_COLOR_DEFAULT, GE_BG_COLOR_DEFAULT);
+
+       evas_object_size_hint_weight_set(bg,
+                                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static int _ge_init_view(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+
+       /* Base Layout */
+       ugd->ly_main = ge_ui_create_main_ly(ugd, ugd->win);
+       GE_CHECK_VAL(ugd->ly_main, -1);
+
+       /* Background */
+       ugd->bg = _ge_create_bg(ugd->ly_main);
+       GE_CHECK_VAL(ugd->bg, -1);
+       /* Pack bg to swallow */
+       elm_object_part_content_set(ugd->ly_main, "elm.swallow.bg", ugd->bg);
+
+       /* Navigation Bar */
+       ugd->navi_bar = ge_ui_create_navibar(ugd, ugd->ly_main);
+       GE_CHECK_VAL(ugd->navi_bar, -1);
+
+       /* Albums view and its layout */
+       if(_ge_create_ly_view(ugd) != 0)
+       {
+               ge_dbgE("Create albums view and layout failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+static int _ge_create_view(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+
+       /* Set inited flag as TRUE */
+       ugd->b_inited_view = true;
+       /* Add new theme */
+       ugd->th = elm_theme_new();
+       GE_CHECK_VAL(ugd->th, -1);
+       elm_theme_ref_set(ugd->th, NULL);
+       elm_theme_extension_add(ugd->th, GE_EDJ_FILE);
+       elm_theme_extension_add(ugd->th, GALLERY_BLACK_EDJ_FILE);
+
+       /* Initialize gallery ug view */
+       if(_ge_init_view(ugd) != 0)
+       {
+               ge_dbgE("Initialize view failed!");
+               return -1;
+       }
+
+       /* Register MMC and UMS changed callback */
+       if(ge_reg_db_update_noti(ugd) != 0) {
+               ge_dbgE("ge_reg_db_update_noti failed!");
+               return -1;
+       }
+       if(ge_reg_ums_noti(ugd) != 0) {
+               ge_dbgE("ge_reg_ums_noti failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+static int _ge_close_view(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+
+       GE_DEL_OBJ(ugd->popup)
+
+       GE_FREE_MEM(ugd->file_setas_callid_path)
+       GE_FREE_MEM(ugd->file_setas_homescreen_path)
+       GE_FREE_MEM(ugd->file_setas_lockscreen_path)
+       GE_FREE_MEM(ugd->file_setas_callid_size)
+       GE_FREE_MEM(ugd->file_setas_image_path)
+       GE_FREE_MEM(ugd->file_setas_crop_image_path)
+
+       if(ugd->b_inited_view) {
+               /* Destroy UG called by me */
+               if (ugd->ug_called_by_me) {
+                       ug_destroy(ugd->ug_called_by_me);
+                       ugd->ug_called_by_me = NULL;
+               }
+
+               GE_DEL_TIMER(ugd->ums_update_timer)
+               GE_DEL_TIMER(ugd->del_timer)
+               GE_DEL_TIMER(ugd->thumbs_clicked_timer)
+               GE_DEL_IDLER(ugd->grid_append_idler)
+
+               ge_dereg_db_update_noti();
+               ge_dereg_ums_noti();
+
+               ge_grid_del_callbacks(ugd);
+               ge_albums_del_callbacks(ugd);
+
+               GE_DEL_OBJ(ugd->navi_bar)
+               GE_DEL_OBJ(ugd->bg)
+               GE_DEL_OBJ(ugd->ly_main)
+
+               ge_albums_free_cover_thumbs(ugd);
+
+               /* Disconnet with libmedia-info */
+               ge_db_finalize(ugd);
+               if(ugd->th) {
+                       elm_theme_extension_del(ugd->th, GE_EDJ_FILE);
+                       elm_theme_extension_del(ugd->th,
+                                               GALLERY_BLACK_EDJ_FILE);
+                       elm_theme_free(ugd->th);
+                       ugd->th = NULL;
+               }
+               ugd->b_inited_view = false;
+       }
+
+       return 0;
+}
+
+static void __ge_parse_param_launch_type_setas(ge_ugdata *ugd, bundle *data)
+{
+       GE_CHECK(ugd);
+       GE_CHECK(data);
+       bundle* b = data;
+
+       const char *setas_type = NULL;
+       const char *callerid_size = NULL;
+       const char *callerid_path = NULL;
+       const char *wallpaper_path = NULL;
+       const char *lockscreen_path = NULL;
+
+       setas_type = bundle_get_val(b, GE_BUNDLE_SETAS_TYPE);
+       if(setas_type == NULL) {
+               ge_dbg("setas-type NULL");
+               return;
+       }
+
+       if (!strcasecmp(setas_type, GE_FILE_SELECT_SETAS_WALLPALER)) {
+               ugd->file_select_setas_mode = GE_File_Select_Setas_Wallpaper;
+               g_strlcpy(ugd->albums_view_title, GE_TITLE_CHANGE_WALLPAPER,
+                               GE_ALBUM_NAME_LEN_MAX);
+
+               wallpaper_path = bundle_get_val(b, GE_BUNDLE_HOMESCREEN_PATH);
+               if (wallpaper_path) {
+                       ge_dbg("path:%s", wallpaper_path);
+                       ugd->file_setas_homescreen_path = strdup(wallpaper_path);
+               }
+
+               lockscreen_path = bundle_get_val(b, GE_BUNDLE_LOCKSCREEN_PATH);
+               if (lockscreen_path) {
+                       ge_dbg("path:%s", lockscreen_path);
+                       ugd->file_setas_lockscreen_path = strdup(lockscreen_path);
+               }
+       } else if (!strcasecmp(setas_type, GE_FILE_SELECT_SETAS_CALLERID))
+       {
+               ugd->file_select_setas_mode = GE_File_Select_Setas_CallerID;
+               g_strlcpy(ugd->albums_view_title, GE_TITLE_CHANGE_CALLER_ID,
+                               GE_ALBUM_NAME_LEN_MAX);
+
+               callerid_size = bundle_get_val(b, GE_BUNDLE_CALLERID_SIZE);
+               if (callerid_size) {
+                       ge_dbg("size:%s", callerid_size);
+                       ugd->file_setas_callid_size = strdup(callerid_size);
+               }
+
+               callerid_path = bundle_get_val(b, GE_BUNDLE_CALLERID_PATH);
+               if (callerid_path) {
+                       ge_dbg("path:%s", callerid_path);
+                       ugd->file_setas_callid_path = strdup(callerid_path);
+               }
+       }
+}
+
+static void __ge_parse_param_file_type(ge_ugdata *ugd, bundle *data)
+{
+       GE_CHECK(ugd);
+       GE_CHECK(data);
+       bundle* b = data;
+
+       const char *file_type = NULL;
+       char file_type_str[GE_ALBUM_NAME_LEN_MAX] = {0,};
+       bool b_singular = true;
+
+
+       if( (ugd->file_select_mode == GE_File_Select_Multiple) ||
+           (ugd->file_select_mode == GE_File_Select_Imft)) {
+               b_singular = false;
+       }
+
+       /* file-type */
+       file_type = bundle_get_val(b, GE_BUNDLE_FILE_TYPE);
+       if(file_type == NULL)
+               goto DEFAULT_FILE_TYPE;
+
+       if (!strcasecmp(file_type, GE_FILE_SELECT_TYPE_IMAGE)) {
+               ugd->file_type_mode = GE_File_Select_Type_Image;
+               if(b_singular) {
+                       g_strlcat(ugd->albums_view_title, GE_TITLE_IMAGE,
+                               sizeof(ugd->albums_view_title));
+               } else {
+                       g_strlcat(ugd->albums_view_title, GE_TITLE_IMAGES,
+                               sizeof(ugd->albums_view_title));
+               }
+               return;
+
+       } else if (!strcasecmp(file_type, GE_FILE_SELECT_TYPE_VIDEO)) {
+               ugd->file_type_mode = GE_File_Select_Type_Video;
+               if(b_singular) {
+                       g_strlcat(ugd->albums_view_title, GE_TITLE_VIDEO,
+                               sizeof(ugd->albums_view_title));
+               } else {
+                       g_strlcat(ugd->albums_view_title, GE_TITLE_VIDEOS,
+                               sizeof(ugd->albums_view_title));
+               }
+               return;
+       }
+
+DEFAULT_FILE_TYPE:
+       ge_dbg("file type is default, set default type(ALL).");
+       ugd->file_type_mode = GE_File_Select_Type_All;
+       if(b_singular) {
+               g_strlcpy(file_type_str, GE_TITLE_FILE, sizeof(file_type_str));
+       } else {
+               g_strlcpy(file_type_str, GE_TITLE_FILES, sizeof(file_type_str));
+       }
+
+       g_strlcat(ugd->albums_view_title, file_type_str,
+                 sizeof(ugd->albums_view_title));
+
+       return;
+}
+
+/* analysis parameters */
+static int _ge_parse_param(ge_ugdata *ugd, bundle *data)
+{
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(data, -1);
+       bundle* b = data;
+       const char *launch_type = NULL;
+
+       launch_type = bundle_get_val(b, GE_BUNDLE_LAUNCH_TYPE);
+       if (launch_type == NULL) {
+               ge_dbg("launch-type == NULL");
+               return -1;
+       }
+       ge_dbg("launch-type [%s]", launch_type);
+
+       if(!strcasecmp(launch_type, GE_ALBUM_SELECT_ONE))
+       {
+               ugd->album_select_mode = GE_Album_Select_One;
+               g_strlcpy(ugd->albums_view_title, GE_TITLE_ALBUMS,
+                               GE_ALBUM_NAME_LEN_MAX);
+       } else if (!strcasecmp(launch_type, GE_FILE_SELECT_SETAS)) {
+               ugd->file_select_mode = GE_File_Select_Setas;
+               __ge_parse_param_launch_type_setas(ugd, data);
+               /* Checkme: Only image type is offered in SETAS  case */
+               ugd->file_type_mode = GE_File_Select_Type_Image;
+       } else {
+               g_strlcpy(ugd->albums_view_title, GE_TITLE_ADD,
+                               GE_ALBUM_NAME_LEN_MAX);
+               g_strlcat(ugd->albums_view_title," ",GE_ALBUM_NAME_LEN_MAX);
+
+               if (!strcasecmp(launch_type, GE_FILE_SELECT_ONE)) {
+                       ugd->file_select_mode = GE_File_Select_One;
+               } else if (!strcasecmp(launch_type, GE_FILE_SELECT_MULTIPLE)) {
+                       ugd->file_select_mode = GE_File_Select_Multiple;
+               } else if (!strcasecmp(launch_type, GE_FILE_SELECT_IMFT)) {
+                       ugd->file_select_mode = GE_File_Select_Imft;
+
+                       const char *contact_id = NULL;
+                       contact_id = bundle_get_val(b, "contact");
+                       if (contact_id) {
+                               ugd->file_select_contact_id = atoi(contact_id);
+                       } else {
+                               ugd->file_select_mode = GE_File_Select_None;
+                               ugd->file_select_contact_id = -1;
+                               ge_dbg("Invalid args");
+                               return -1;
+                       }
+
+                       ge_dbg("contact_id: %d", ugd->file_select_contact_id);
+               }
+
+               __ge_parse_param_file_type(ugd, data);
+
+       }
+
+       return 0;
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param mode
+* @param data
+* @param priv
+*
+* @return
+*/
+static void * _ge_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv)
+{
+       ge_dbg("Enter...");
+       Evas_Object *parent = NULL;
+       ge_ugdata *ugd = NULL;
+       int w = 0;
+       int h = 0;
+
+       GE_CHECK_NULL(priv);
+       GE_CHECK_NULL(data);
+       GE_CHECK_NULL(ug);
+       ge_dbgW("Gallery UG start...");
+
+       ugd = (ge_ugdata *)priv;
+       ugd->ug = ug;
+       /* Get window */
+       parent = (Evas_Object *)ug_get_window();
+       GE_CHECK_NULL(parent);
+       ugd->win = parent;
+       /* Bind text domain for internalization */
+       bindtextdomain("ug-gallery-efl" , "/opt/ug/res/locale");
+       /* Reset inited flag, it would be set as TRUE if albums view created */
+       ugd->b_inited_view = false;
+       /* Get UMS state */
+       ge_get_ums_state(ugd);
+       /* Set view mode */
+       _ge_set_view_mode(GE_AlbumsView_Mode);
+
+       Ecore_X_Window x_win = ecore_x_window_focus_get();
+       GE_CHECK_NULL(x_win);
+       Ecore_X_Window root_win = ecore_x_window_root_get(x_win);
+       GE_CHECK_NULL(root_win);
+       ecore_x_window_size_get(root_win, &w, &h);
+       ge_dbg("x_window_w : %d, x_window_h: %d.", w, h);
+       ugd->win_w = w;
+       ugd->win_h = h;
+       ugd->win_scale = (double)(((double)w)/((double)GE_BASE_WIN_WIDTH));
+       ugd->bundle = data;
+       /* Parse parameters passed from parent */
+       if(_ge_parse_param(ugd, data) != 0) {
+               ge_dbgE("Failed to parse parameters!");
+               return NULL;
+       }
+
+       if ((ugd->file_select_mode == GE_File_Select_Setas) ||
+           (ugd->file_select_mode != GE_File_Select_None) ||
+           (ugd->album_select_mode != GE_Album_Select_None)) {
+               /* create gallery UG */
+               if(_ge_create_view(ugd) != 0) {
+                       ge_dbgE("Failed to create Gallery UG view!");
+                       return NULL;
+               }
+       } else {
+               ge_dbgE("Wrong file_select_mode[%d] or album_select_mode[%d]",
+                       ugd->file_select_mode, ugd->album_select_mode);
+       }
+
+       return ugd->ly_main;
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param data
+* @param priv
+*/
+static void _ge_start(struct ui_gadget *ug, bundle *data, void *priv)
+{
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param data
+* @param priv
+*/
+static void _ge_pause(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       ge_dbg("");
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param data
+* @param priv
+*/
+static void _ge_resume(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       ge_dbg("");
+       GE_CHECK(priv);
+       ge_ugdata *ugd = (ge_ugdata *)priv;
+       /*update*/
+       if (!_ge_ug_iv_get())
+       {
+               ge_update_view(ugd, GE_UPDATE_NONE);
+       }
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param data
+* @param priv
+*/
+static void _ge_destroy(struct ui_gadget *ug, bundle *data, void *priv)
+{
+       ge_dbgW("");
+       GE_CHECK(ug);
+       GE_CHECK(priv);
+       ge_ugdata *ugd = (ge_ugdata *)priv;
+
+       _ge_close_view(ugd);
+       ge_dbgW("End of the gallery UG!");
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param msg
+* @param data
+* @param priv
+*/
+static void _ge_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv)
+{
+       ge_dbg("");
+}
+
+/**
+* @brief
+*
+* @param ug
+* @param event
+* @param data
+* @param priv
+*/
+static void _ge_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv)
+{
+       GE_CHECK(priv);
+
+       switch (event)
+       {
+       case UG_EVENT_LOW_MEMORY:
+               ge_dbg("UG_EVENT_LOW_MEMORY");
+               break;
+
+       case UG_EVENT_LOW_BATTERY:
+               ge_dbg("UG_EVENT_LOW_BATTERY");
+               break;
+
+       case UG_EVENT_LANG_CHANGE:
+               ge_dbg("UG_EVENT_LANG_CHANGE");
+               break;
+       default:
+               break;
+       }
+
+       return;
+}
+
+static void _ge_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle *data, void *priv)
+{
+       ge_dbg("");
+       GE_CHECK(ug);
+
+    switch (event)
+       {
+        case UG_KEY_EVENT_END:
+                       ge_dbg("Receive key end event");
+            ug_destroy_me(ug);
+            break;
+
+        default:
+            break;
+    }
+}
+
+/**
+* @brief
+*
+* @param ops
+*
+* @return
+*/
+UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
+{
+       ge_dbgW("UG_MODULE_INIT");
+       ge_ugdata *ugd = NULL;
+       GE_CHECK_VAL(ops, -1);
+
+       ugd = calloc(1, sizeof(ge_ugdata));
+       GE_CHECK_VAL(ugd, -1);
+
+       ops->create = _ge_create;
+       ops->start = _ge_start;
+       ops->pause = _ge_pause;
+       ops->resume = _ge_resume;
+       ops->destroy = _ge_destroy;
+       ops->message = _ge_message;
+       ops->event = _ge_event;
+       ops->key_event = _ge_key_event;
+       ops->priv = ugd;
+       ops->opt = UG_OPT_INDICATOR_ENABLE;
+
+       return 0;
+}
+
+/**
+* @brief
+*
+* @param ops
+*
+* @return
+*/
+UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops)
+{
+       struct ug_data *ugd = NULL;
+       GE_CHECK(ops);
+
+       ugd = ops->priv;
+       if (ugd)
+       {
+               free(ugd);
+               ugd = NULL;
+       }
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-albums.c b/libug/libug-gallery-efl/src/ge-albums.c
new file mode 100755 (executable)
index 0000000..8e9033f
--- /dev/null
@@ -0,0 +1,990 @@
+/*
+  * 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://www.tizenopensource.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 "ge-debug.h"
+#include "ge-albums.h"
+#include "ge-gridview.h"
+#include "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-db-handler.h"
+#include "ge-strings.h"
+
+static Elm_Gengrid_Item_Class album_gic;
+static int gl_albums_item_cnt;
+static ge_item* gl_album_items[GE_ALBUM_COVER_THUMB_NUM];
+static int gl_album_count;
+
+struct ge_color {
+       int r;
+       int g;
+       int b;
+};
+
+/* Size of table padding */
+#define GE_COVER_PAD 3
+#define GE_COVER_PAD_2 2
+
+#define GE_ALBUM_TEXT_COLOR_ALPHA 255
+#define GE_BG_COLOR_CNT        6
+static struct ge_color ge_bg_color[] =
+{
+       {50, 50, 50},
+       {78, 74, 64},
+       {206, 108, 1},
+       {157, 35, 39},
+       {20, 60, 128},
+       {84, 109, 49},
+       {25, 25, 25},
+};
+
+
+static void _ge_albums_drag_up(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_drag_right(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_drag_down(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_drag_left(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_drag_stop(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_unselected(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_albums_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static Eina_Bool _ge_albums_append_grid_idler(void *data)
+{
+       GE_CHECK_CANCEL(data);
+       ge_ugdata* ugd = (ge_ugdata*)data;
+
+       /* Try to get other medias from DB and append them to gridview*/
+       int ret = ge_grid_idler_append_thumbs(data);
+       if(ret < 0)
+       {
+               ge_dbg("Failed to append grid items!");
+               if(ret == MB_SVC_ERROR_DB_NO_RECORD)
+               {
+                       /* Maybe all medias were already showed */
+                       ge_dbg("No any more records!");
+               }
+       }
+       else
+       {
+               ge_dbg("Successful to append grid items!");
+       }
+
+       /* Remove idler after all items appended */
+       GE_DEL_IDLER(ugd->grid_append_idler)
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void __ge_albums_sel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GE_CHECK(data);
+       GE_CHECK(event_info);
+       Evas_Event_Mouse_Up *ev = event_info;
+
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+               return;
+
+       ge_dbg("");
+       ge_cluster *album_item = (ge_cluster*)data;
+       GE_CHECK(album_item->cluster);
+       GE_CHECK(album_item->ugd);
+       ge_ugdata *ugd = album_item->ugd;
+       if(ugd->ug == NULL) {
+               ge_dbg("UG already destroyed, return!");
+               return;
+       }
+
+       if (album_item->cluster->count == 0) {
+               ge_dbgW("Empty album, return;");
+               return;
+       }
+
+       ge_albums_sel_album(album_item);
+}
+
+char * _ge_albums_get_text(void *data, Evas_Object *obj, const char *part)
+{
+       GE_CHECK_NULL(part);
+       GE_CHECK_NULL(data);
+       ge_cluster *album_item = (ge_cluster *)data;
+       GE_CHECK_NULL(album_item->cluster);
+       GE_CHECK_NULL(album_item->cluster->uuid);
+       GE_CHECK_NULL(album_item->ugd);
+       ge_ugdata *ugd = album_item->ugd;
+       char buf[GE_FILE_PATH_LEN_MAX] = {0,};
+
+       if (!strcmp(part, "elm.text.name"))
+       {
+               GE_CHECK_NULL(album_item->cluster->display_name);
+               if(strlen(album_item->cluster->display_name)) {
+                       snprintf(buf, sizeof(buf), "%s", (char*)(album_item->cluster->display_name));
+                       buf[strlen(buf)] = '\0';
+               } else if(ge_db_is_root_path(ugd, album_item->cluster->uuid, NULL)) {
+                       snprintf(buf, sizeof(buf), GE_ALBUM_ROOT_NAME);
+                       buf[strlen(buf)] = '\0';
+               }
+               /* Show blue folder name */
+               if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
+                   ge_db_is_default_album(ugd, album_item->cluster)) {
+                       Elm_Object_Item *grid_it = album_item->griditem;
+                       const Evas_Object *con_it_obj = NULL;
+                       con_it_obj = elm_object_item_widget_get(grid_it);
+                       GE_CHECK_NULL(con_it_obj);
+                       Evas_Object *it_obj = (Evas_Object *)con_it_obj;
+                       edje_object_signal_emit(it_obj, "elm,name,show,blue",
+                                               "elm");
+                       edje_object_message_signal_process(it_obj);
+               }
+       }
+       else if (!strcmp(part, "elm.text.date"))
+       {
+               struct tm  t1;
+               struct tm  t2;
+               char date1[GE_ALBUM_DATE_LEN_MAX] = {0,};
+               char date2[GE_ALBUM_DATE_LEN_MAX] = {0,};
+               char date3[GE_ALBUM_DATE_LEN_MAX] = {0,};
+
+               ge_albums_free_cover_thumbs(ugd);
+
+               int item_count = GE_ALBUM_COVER_THUMB_NUM;
+               ge_item** items1 = gl_album_items;
+
+               ge_db_get_first_several_items(ugd, album_item, items1, &item_count, MINFO_MEDIA_SORT_BY_DATE_DESC);
+               if(item_count <= 0)
+               {
+                       gl_album_count = 0;
+                       return NULL;
+               }
+
+               gl_album_count = item_count;
+               if(items1[0] == NULL || items1[0]->item == NULL)
+               {
+                       gl_album_count = 0;
+                       return NULL;
+               }
+               memcpy(&album_item->item_mtime, &(items1[0]->item->mtime), sizeof(time_t));
+
+               item_count = 1;
+               ge_item* items2[1];
+               memset(items2, 0x00, item_count * sizeof(int));
+               ge_db_get_first_several_items(ugd, album_item, items2, &item_count, MINFO_MEDIA_SORT_BY_DATE_ASC);
+
+               if(item_count <= 0)
+               {
+                       return NULL;
+               }
+               else
+               {
+                       memset(&t1, 0x00, sizeof(struct tm));
+                       localtime_r((time_t *) &(album_item->item_mtime), &t1);
+                       strftime(date1, sizeof(date1), "%Y.%m.%d", &t1);
+                       strftime(date3, sizeof(date3), "%Y.%m", &t1);
+
+                       if(items2[0] == NULL || items2[0]->item == NULL)
+                       {
+                               gl_album_count = 0;
+                               return NULL;
+                       }
+                       memset(&t2, 0x00, sizeof(struct tm));
+                       localtime_r((time_t *) &(items2[0]->item->mtime), &t2);
+                       strftime(date2, sizeof(date2), "%Y.%m.%d", &t2);
+
+                       if(!strcmp(date1, date2))
+                       {
+                               g_strlcpy(buf, date1, sizeof(buf));
+                       }
+                       else
+                       {
+                               strftime(date2, sizeof(date2), "%Y.%m", &t2);
+                               snprintf(buf, sizeof(buf), "%s - %s", date2, date3);
+                               buf[strlen(buf)] = '\0';
+                       }
+               }
+
+               int i = 0;
+               for(i = 0; i < item_count; i++)
+               {
+                       ge_db_destroy_item(items2[i]);
+                       items2[i] = NULL;
+               }
+       }
+       else if (!strcmp(part, "elm.text.count"))
+       {
+               ge_db_update_items_cnt(ugd, album_item);
+               snprintf(buf, sizeof(buf), "%d", (int)(album_item->cluster->count));
+               buf[strlen(buf)] = '\0';
+       }
+
+       return strdup(buf);
+}
+
+Evas_Object * _ge_albums_get_content(void *data, Evas_Object *obj, const char *part)
+{
+       GE_CHECK_NULL(part);
+       GE_CHECK_NULL(obj);
+       GE_CHECK_NULL(data);
+       if(strlen(part) <= 0)
+       {
+               ge_dbgE("part length <= 0");
+               return NULL;
+       }
+
+       ge_cluster* album_item = (ge_cluster*)data;
+       GE_CHECK_NULL(album_item->cluster);
+       GE_CHECK_NULL(album_item->cluster->uuid);
+       GE_CHECK_NULL(album_item->ugd);
+       ge_ugdata *ugd = album_item->ugd;
+       double scale_factor = ugd->win_scale;
+       int i = 0;
+       int j =0;
+       int r1 = 0;
+
+       if((!strcmp(part, "elm.swallow.firsticon")) ||
+               (!strcmp(part, "elm.swallow.icon")) ||
+               (!strcmp(part, "elm.swallow.onlyicon")))
+       {
+               if(_ge_get_view_mode() != GE_AlbumsView_Mode)
+               {
+                       ge_dbgE("View mode is wrong!");
+                       return NULL;
+               }
+
+               ge_item **items = gl_album_items;
+               int item_count = gl_album_count;
+               int length = item_count;
+               Evas_Object* bg = NULL;
+
+               if(!strcmp(part, "elm.swallow.onlyicon"))
+               {
+                       /* Part for album contains only one media */
+                       if(length != 1)
+                       {
+                               return NULL;
+                       }
+                       else
+                       {
+                               bg = elm_bg_add(obj);
+                               GE_CHECK_NULL(bg);
+                               elm_bg_load_size_set(bg,
+                                       (int)(GE_COVER_ICON_S * scale_factor),
+                                       (int)(GE_COVER_ICON_S * scale_factor));
+
+                               if(items[0] && (items[0])->item)
+                               {
+                                       elm_bg_file_set(bg, _GETICON((items[0])->item->thumb_url), NULL);
+                               }
+
+                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                               evas_object_size_hint_align_set(bg, 0.5, 0.5);
+                               evas_object_show(bg);
+                               return bg;
+                       }
+               }
+
+               if(!strcmp(part, "elm.swallow.firsticon"))
+               {
+                       ge_dbg("firsticon");
+                       if(length <= 1)
+                       {
+                               return NULL;
+                       }
+                       else
+                       {
+                               bg = elm_bg_add(obj);
+                               GE_CHECK_NULL(bg);
+                               elm_bg_load_size_set(bg,
+                                       (int)(GE_COVER_GRID_S * scale_factor),
+                                       (int)(GE_COVER_GRID_S * scale_factor));
+                               if(items[0] && (items[0])->item)
+                               {
+                                       elm_bg_file_set(bg, _GETICON((items[0])->item->thumb_url), NULL);
+                               }
+                       }
+
+                       evas_object_size_hint_max_set(bg,
+                               (int)(GE_COVER_GRID_S * scale_factor),
+                               (int)(GE_COVER_GRID_S * scale_factor));
+                       evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_show(bg);
+                       return bg;
+               }
+
+               if(!strcmp(part, "elm.swallow.icon"))
+               {
+                       ge_dbg("icon");
+                       Evas_Object * tb = NULL;
+
+                       if(length <= 0)
+                       {
+                               bg = elm_bg_add(obj);
+                               GE_CHECK_NULL(bg);
+                               elm_bg_load_size_set(bg,
+                                       (int)(GE_COVER_ICON_S * scale_factor),
+                                       (int)(GE_COVER_ICON_S * scale_factor));
+                               elm_bg_file_set(bg, GE_DEFAULT_THUMB_ICON, NULL);
+                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                               evas_object_size_hint_align_set(bg, 0.5, 0.5);
+                               evas_object_show(bg);
+                               return bg;
+                       }
+                       else if(length == 1)
+                       {
+                               return NULL;
+                       }
+                       else if(length == 2)
+                       {
+                               bg = elm_bg_add(obj);
+                               GE_CHECK_NULL(bg);
+                               elm_bg_load_size_set(bg,
+                                       (int)(GE_COVER_ICON_S * scale_factor),
+                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+
+                               if(items[1] && (items[1])->item)
+                               {
+                                       elm_bg_file_set(bg, _GETICON((items[1])->item->thumb_url), NULL);
+                               }
+
+                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                               evas_object_size_hint_align_set(bg, 0.5, 0.5);
+                               evas_object_show(bg);
+                               return bg;
+                       }
+                       else if(length == 3)
+                       {
+                               tb = elm_table_add(obj);
+                               GE_CHECK_NULL(tb);
+                               elm_table_padding_set(tb,
+                                                     GE_COVER_PAD * scale_factor,
+                                                     GE_COVER_PAD * scale_factor);
+                               r1 = 1;
+                               for(i = 1; i < length; i++)
+                               {
+                                       bg = elm_bg_add(obj);
+                                       GE_CHECK_NULL(bg);
+                                       if(i==1)
+                                       {
+                                               elm_bg_load_size_set(bg,
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                               evas_object_size_hint_min_set(bg,
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                       }
+                                       else
+                                       {
+                                               elm_bg_load_size_set(bg,
+                                                       (int)(GE_COVER_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                               evas_object_size_hint_min_set(bg,
+                                                       (int)(GE_COVER_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                       }
+
+                                       elm_table_padding_set(tb,
+                                                             GE_COVER_PAD_2 * scale_factor,
+                                                             GE_COVER_PAD_2 * scale_factor);
+
+                                       if(items[i] && (items[i])->item)
+                                       {
+                                               elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
+                                       }
+
+                                       if(i==1)
+                                       {
+                                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                                               elm_table_pack(tb, bg, 0, 0, 2, 2);
+                                       }
+                                       else
+                                       {
+                                               evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                                               elm_table_pack(tb, bg, 2, 0, 1, 2);
+                                       }
+                                       evas_object_show(bg);
+                               }
+                       }
+                       else if(length < GE_ALBUM_COVER_THUMB_NUM)
+                       {
+                               length = GE_ALBUM_COVER_THUMB_NUM_SEC;
+                               tb = elm_table_add(obj);
+                               GE_CHECK_NULL(tb);
+                               elm_table_padding_set(tb,
+                                                     GE_COVER_PAD * scale_factor,
+                                                     GE_COVER_PAD * scale_factor);
+                               elm_table_padding_set(tb,
+                                                     GE_COVER_PAD_2 * scale_factor,
+                                                     GE_COVER_PAD_2 * scale_factor);
+                               r1 = 1;
+                               for(i = 1; i < length; i++)
+                               {
+                                       bg = elm_bg_add(obj);
+                                       GE_CHECK_NULL(bg);
+                                       if(i == 1)
+                                       {
+                                               elm_bg_load_size_set(bg,
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                               evas_object_size_hint_min_set(bg,
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                       }
+                                       else
+                                       {
+                                               elm_bg_load_size_set(bg,
+                                                       (int)(GE_COVER_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_GRID_S * scale_factor));
+                                               evas_object_size_hint_min_set(bg,
+                                                       (int)(GE_COVER_GRID_S * scale_factor),
+                                                       (int)(GE_COVER_GRID_S * scale_factor));
+                                       }
+
+                                       if(items[i] && (items[i])->item)
+                                       {
+                                               elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
+                                       }
+
+                                       evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                                       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                                       if(i == 1)
+                                               elm_table_pack(tb, bg, 0, 0, 2, 2);
+                                       else if(i == 2)
+                                               elm_table_pack(tb, bg, 2, 0, 1, 1);
+                                       else if(i == 3)
+                                               elm_table_pack(tb, bg, 2, 1, 1, 1);
+                                       evas_object_show(bg);
+                               }
+                       }
+                       else
+                       {
+                               tb = elm_table_add(obj);
+                               GE_CHECK_NULL(tb);
+                               elm_table_padding_set(tb,
+                                                     GE_COVER_PAD * scale_factor,
+                                                     GE_COVER_PAD * scale_factor);
+
+                               if((!strcmp(album_item->cluster->display_name, GE_ALBUM_ALL_NAME)) ||
+                                       (!strcmp(album_item->cluster->display_name, GE_ALBUM_MY_NAME)))
+                               {
+                                       for(i = 1; i < GE_ALBUM_COVER_THUMB_NUM; i++)
+                                       {
+                                               if(i < item_count)
+                                               {
+                                                       bg = elm_bg_add(obj);
+                                                       GE_CHECK_NULL(bg);
+                                                       elm_bg_load_size_set(bg,
+                                                               (int)(GE_COVER_GRID_S * scale_factor),
+                                                               (int)(GE_COVER_GRID_S * scale_factor));
+
+                                                       if(items[i] && (items[i])->item)
+                                                       {
+                                                               elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       bg = evas_object_rectangle_add(evas_object_evas_get(obj));
+
+                                                       if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
+                                                           ge_db_is_default_album(ugd, album_item->cluster))
+                                                               j = GE_BG_COLOR_CNT;
+                                                       else
+                                                               j = (album_item->index) % GE_BG_COLOR_CNT;
+                                                       evas_object_color_set(bg, ge_bg_color[j].r,
+                                                                             ge_bg_color[j].g, ge_bg_color[j].b,
+                                                                             GE_ALBUM_TEXT_COLOR_ALPHA);
+                                               }
+
+                                               evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                                               elm_table_pack(tb, bg, (int)((i-1)%3), (int)((i-1)/3), 1, 1);
+
+                                               evas_object_show(bg);
+                                       }
+                               }
+                               else
+                               {
+                                       elm_table_padding_set(tb,
+                                                             GE_COVER_PAD_2 * scale_factor,
+                                                             GE_COVER_PAD_2 * scale_factor);
+                                       r1= 1;
+                                       for(i = 1; i < GE_ALBUM_COVER_THUMB_NUM_SEC; i++)
+                                       {
+                                               bg = elm_bg_add(obj);
+                                               GE_CHECK_NULL(bg);
+                                               if(i == 1)
+                                               {
+                                                       elm_bg_load_size_set(bg,
+                                                               (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                               (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                                       evas_object_size_hint_min_set(bg,
+                                                               (int)(GE_COVER_2X_GRID_S * scale_factor),
+                                                               (int)(GE_COVER_2X_GRID_S * scale_factor));
+                                               }
+                                               else
+                                               {
+                                                       elm_bg_load_size_set(bg,
+                                                               (int)(GE_COVER_GRID_S * scale_factor),
+                                                               (int)(GE_COVER_GRID_S * scale_factor));
+                                                       evas_object_size_hint_min_set(bg,
+                                                               (int)(GE_COVER_GRID_S * scale_factor),
+                                                               (int)(GE_COVER_GRID_S * scale_factor));
+                                               }
+
+                                               if(items[i] && (items[i])->item)
+                                               {
+                                                       elm_bg_file_set(bg, _GETICON((items[i])->item->thumb_url), NULL);
+                                               }
+
+                                               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                                               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                                               if(i == 1)
+                                                       elm_table_pack(tb, bg, 0, 0, 2, 2);
+                                               else if(i == 2)
+                                                       elm_table_pack(tb, bg, 2, 0, 1, 1);
+                                               else if( i == 3)
+                                                       elm_table_pack(tb, bg, 2, 1, 1, 1);
+                                               evas_object_show(bg);
+                                       }
+                               }
+                       }
+                       evas_object_show(tb);
+                       return tb;
+               }
+       }
+       else if (!strcmp(part, "label_bg"))
+       {
+               Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(obj));
+               GE_CHECK_NULL(bg);
+               /**
+               *  for "All"  their colors should be
+               *  25:25:25 by new gui
+               */
+               if (!g_strcmp0(album_item->cluster->uuid, GE_ALBUM_ALL_ID) ||
+                   ge_db_is_default_album(ugd, album_item->cluster))
+                       j = GE_BG_COLOR_CNT;
+               else
+                       j = (album_item->index) % GE_BG_COLOR_CNT;
+               evas_object_color_set(bg, ge_bg_color[j].r,
+                                     ge_bg_color[j].g, ge_bg_color[j].b,
+                                     GE_ALBUM_TEXT_COLOR_ALPHA);
+
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(bg);
+
+               return bg;
+       }
+
+       return NULL;
+}
+
+static int _ge_albums_create_album(ge_ugdata* ugd, Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(parent, -1);
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(ugd->cluster_list, -1);
+       int i = 0;
+       int grid_cnt = 0;
+       ge_cluster *album_item = NULL;
+
+       album_gic.item_style = "albums_view";
+       album_gic.func.text_get = _ge_albums_get_text;
+       album_gic.func.content_get = _ge_albums_get_content;
+
+       int length = eina_list_count(ugd->cluster_list->clist);
+       ge_dbg("Albums list length: %d.", length);
+
+       elm_gengrid_clear(parent);
+
+       if(ugd->th)
+       {
+               elm_object_theme_set(parent, ugd->th);
+       }
+       elm_object_style_set(parent, "gallery_efl/default");
+
+       for(i = 0; i < length; i++)
+       {
+               album_item = eina_list_nth(ugd->cluster_list->clist, i);
+               GE_CHECK_VAL(album_item, -1);
+               GE_CHECK_VAL(album_item->cluster, -1);
+               GE_CHECK_VAL(album_item->cluster->display_name, -1);
+
+               album_item->griditem = elm_gengrid_item_append(parent,
+                                                              &album_gic,
+                                                              album_item,
+                                                              __ge_albums_sel_cb,
+                                                              album_item);
+               album_item->index = grid_cnt;
+               grid_cnt++;
+
+               ge_dbg("Append [%s], id=%s.", album_item->cluster->display_name,
+                      album_item->cluster->uuid);
+       }
+
+       gl_albums_item_cnt = grid_cnt;
+
+       if(grid_cnt)
+       {
+               return 0;
+       }
+       else
+       {
+               ge_dbgW("None albums appended to view!");
+               return -1;
+       }
+}
+
+int ge_albums_free_cover_thumbs(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       int i = 0;
+
+       for(i = 0; i < GE_ALBUM_COVER_THUMB_NUM; i++)
+       {
+               if(gl_album_items[i])
+               {
+                       ge_db_destroy_item(gl_album_items[i]);
+                       gl_album_items[i] = NULL;
+               }
+       }
+
+       return 0;
+}
+
+int ge_albums_back_to_view(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+
+       if(ugd->file_select_mode == GE_File_Select_Multiple)
+       {
+               ge_ui_destroy_selinfo(ugd);
+               ge_db_selected_list_finalize();
+       }
+
+       GE_DEL_IDLER(ugd->grid_append_idler)
+
+       ge_albums_update_view(ugd);
+       ge_grid_clear_view(ugd);
+
+       _ge_set_view_mode(GE_AlbumsView_Mode);
+       return 0;
+}
+
+int ge_albums_sel_album(ge_cluster* album_item)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(album_item, -1);
+       GE_CHECK_VAL(album_item->cluster, -1);
+       GE_CHECK_VAL(album_item->cluster->uuid, -1);
+       GE_CHECK_VAL(album_item->ugd, -1);
+
+       if(_ge_get_view_mode() != GE_AlbumsView_Mode)
+       {
+               ge_dbgE("error mode.. now return!");
+               return -1;
+       }
+       else
+       {
+               ge_dbg("ViewMode");
+       }
+
+       ge_ugdata *ugd = album_item->ugd;
+       GE_CHECK_VAL(ugd->cluster_list, -1);
+       GE_CHECK_VAL(ugd->navi_bar, -1);
+       ge_dbg("Album: %s, id: %s, cluster_index: %d.",
+              album_item->cluster->display_name, album_item->cluster->uuid,
+              album_item->index);
+
+       if(ugd->album_select_mode == GE_Album_Select_One)
+       {
+               ge_dbg("One album selected, return album id and destroy the ug!");
+
+               char folder_path[GE_DIR_PATH_LEN_MAX] = { 0, };
+               ge_db_get_folder_fullpath(ugd, album_item->cluster->uuid,
+                                         folder_path);
+               bundle_del(ugd->bundle, GE_ALBUM_SELECT_RETURN_PATH);
+               bundle_add(ugd->bundle, GE_ALBUM_SELECT_RETURN_PATH, folder_path);
+               ge_dbg("return folder-path: %s", folder_path);
+               ug_send_result(ugd->ug, ugd->bundle);
+               ug_destroy_me(ugd->ug);
+               ugd->ug = NULL;
+               return 0;
+       }
+
+       /* Set current album */
+       _ge_set_current_album(album_item);
+       /* Remove idler */
+       GE_DEL_IDLER(ugd->grid_append_idler)
+       /* Get album contents from DB */
+       ge_db_get_items_list(ugd, album_item, GE_FIRST_VIEW_START_POS, GE_FIRST_VIEW_END_POS);
+
+       if(ugd->file_select_mode == GE_File_Select_Setas)
+       {
+               ge_dbg("setas mode->thumbnail is view mode");
+               _ge_set_view_mode(GE_ThumbnailView_Mode);
+       }
+       else
+       {
+               ge_dbg("select mode->thumbnail is edit mode");
+               _ge_set_view_mode(GE_ThumbnailEdit_Mode);
+       }
+
+       ugd->cluster_list->cur_pos = album_item->index; //save the index of current selected album
+       ge_dbg("\n\nIndex is %d\n",album_item->index);
+
+       ugd->thumbs_view_ly = ge_grid_create_ly(ugd->navi_bar);
+       GE_CHECK_VAL(ugd->thumbs_view_ly, -1);
+       Evas_Object* gv = NULL;
+
+       gv = ge_grid_create_view(ugd, ugd->thumbs_view_ly);
+       GE_CHECK_VAL(gv, -1);
+
+       elm_object_part_content_set(ugd->thumbs_view_ly, "contents", gv);
+       ugd->thumbs_view = gv;
+       if(gv == ugd->nocontents)
+       {
+               ugd->thumbs_nocontents = gv;
+       }
+
+       /* Clear view */
+       elm_gengrid_clear(ugd->albums_view);
+
+       if(_ge_get_view_mode() == GE_ThumbnailView_Mode)
+       {
+               /* Check root case */
+               if(ge_db_is_root_path(ugd, album_item->cluster->uuid, NULL))
+               {
+                       ge_ui_create_title_and_push(ugd, ugd->navi_bar,
+                               ugd->thumbs_view_ly, ThumbnailView_Title, GE_ALBUM_ROOT_NAME);
+               }
+               else
+               {
+                       ge_ui_create_title_and_push(ugd, ugd->navi_bar,
+                               ugd->thumbs_view_ly, ThumbnailView_Title, album_item->cluster->display_name);
+               }
+       }
+       else
+       {
+               ge_ui_create_title_and_push(ugd, ugd->navi_bar,
+                       ugd->thumbs_view_ly, ThumbnailView_Title, ugd->albums_view_title);
+       }
+
+       if(ge_db_get_count_all() == (GE_FIRST_VIEW_END_POS+1))
+       {
+               ge_dbg("\n\n>>>>>>>>Use idler to append other medias--Start>>>>>>>>\n");
+               ugd->grid_append_idler = ecore_idler_add(_ge_albums_append_grid_idler, ugd);
+       }
+
+       ge_dbg("Done ge_albums_sel_album");
+       return 0;
+}
+
+Evas_Object* ge_albums_create_ly(Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(parent);
+       Evas_Object* layout = ge_ui_load_edj(parent, GE_EDJ_FILE, GE_GRP_ALBUMVIEW);
+       GE_CHECK_NULL(layout);
+       evas_object_show (layout);
+
+       return layout;
+}
+
+int ge_albums_del_callbacks(ge_ugdata* ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       if(ugd->albums_view)
+       {
+               ge_dbg("Delete albums callbacks!");
+               evas_object_smart_callback_del(ugd->albums_view, "selected", _ge_albums_selected);
+               evas_object_smart_callback_del(ugd->albums_view, "unselected", _ge_albums_unselected);
+               evas_object_smart_callback_del(ugd->albums_view, "clicked", _ge_albums_clicked);
+               evas_object_smart_callback_del(ugd->albums_view, "longpressed", _ge_albums_longpress);
+               evas_object_smart_callback_del(ugd->albums_view, "drag,start,up", _ge_albums_drag_up);
+               evas_object_smart_callback_del(ugd->albums_view, "drag,start,right", _ge_albums_drag_right);
+               evas_object_smart_callback_del(ugd->albums_view, "drag,start,down", _ge_albums_drag_down);
+               evas_object_smart_callback_del(ugd->albums_view, "drag,start,left", _ge_albums_drag_left);
+               evas_object_smart_callback_del(ugd->albums_view, "drag,stop", _ge_albums_drag_stop);
+               evas_object_smart_callback_del(ugd->albums_view, "realized", _ge_albums_realized);
+       }
+       return 0;
+}
+
+Evas_Object* ge_albums_create_view(ge_ugdata* ugd, Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(parent);
+       GE_CHECK_NULL(ugd);
+       GE_CHECK_NULL(ugd->cluster_list);
+
+       memset(gl_album_items, 0x00, GE_ALBUM_COVER_THUMB_NUM * sizeof(int));
+       gl_album_count = 0;
+
+       ge_get_ums_state(ugd);
+       if(ugd->ug_exit_mode || !ugd->cluster_list->clist ||
+          (eina_list_count(ugd->cluster_list->clist) == 0)) {
+               ge_dbgW("It's UMS mode or clusters list is empty!");
+               goto ALBUMS_FAILED;
+       }
+
+       double scale_factor = ugd->win_scale;
+       ge_dbg("Own scale facotr: %f, elm_config_scale_get =%f.", scale_factor, elm_config_scale_get());
+
+       Evas_Object *grid = elm_gengrid_add(parent);
+       GE_CHECK_NULL(grid);
+       elm_gengrid_item_size_set(grid,
+               (int)(GE_ALBUM_ITEM_WIDTH * scale_factor),
+               (int)(GE_ALBUM_ITEM_HEIGHT * scale_factor));
+       elm_gengrid_align_set(grid, 0.5, 0.0);
+       elm_gengrid_horizontal_set(grid, EINA_FALSE);
+       elm_gengrid_bounce_set(grid, EINA_FALSE, EINA_TRUE);
+       elm_gengrid_multi_select_set(grid, EINA_TRUE);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       if(_ge_albums_create_album(ugd, grid) != 0)
+       {
+               ge_dbgW("Failed to append album items!");
+               evas_object_del(grid);
+               grid = NULL;
+
+               goto ALBUMS_FAILED;
+       }
+       else
+       {
+               evas_object_show (grid);
+       }
+
+       evas_object_smart_callback_add(grid, "selected", _ge_albums_selected, NULL);
+       evas_object_smart_callback_add(grid, "unselected", _ge_albums_unselected, NULL);
+       evas_object_smart_callback_add(grid, "clicked", _ge_albums_clicked, NULL);
+       evas_object_smart_callback_add(grid, "longpressed", _ge_albums_longpress, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,up", _ge_albums_drag_up, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,right", _ge_albums_drag_right, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,down", _ge_albums_drag_down, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,left", _ge_albums_drag_left, NULL);
+       evas_object_smart_callback_add(grid, "drag,stop", _ge_albums_drag_stop, NULL);
+       evas_object_smart_callback_add(grid, "realized", _ge_albums_realized, NULL);
+
+       return grid;
+
+ALBUMS_FAILED:
+       /* Show no contents if none albums exist */
+       ge_dbgW("@@@@@@@  To create nocontents view  @@@@@@@@");
+       ugd->nocontents = ge_ui_create_nocontents(ugd);
+       ugd->albums_view = ugd->nocontents;
+       evas_object_show (ugd->nocontents);
+
+       return ugd->nocontents;
+}
+
+int ge_albums_update_view(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(ugd->cluster_list, -1);
+       /* Changed to show no contents if needed */
+       ge_get_ums_state(ugd);
+       if(ugd->ug_exit_mode || !ugd->cluster_list->clist ||
+          (eina_list_count(ugd->cluster_list->clist) == 0)) {
+               ge_dbgW("It's UMS mode or clusters list is empty!");
+               goto ALBUMS_FAILED;
+       }
+
+       if(ugd->nocontents && ugd->nocontents == ugd->albums_view) {
+               /* It is nocontents, unset it first then create albums view*/
+               evas_object_del(ugd->nocontents);
+               ugd->nocontents = NULL;
+
+               ugd->albums_view = ge_albums_create_view(ugd, ugd->navi_bar);
+               GE_CHECK_VAL(ugd->albums_view, -1);
+               elm_object_part_content_set(ugd->albums_view_ly, "contents",
+                                      ugd->albums_view);
+               evas_object_show(ugd->albums_view);
+       } else {
+               if(_ge_albums_create_album(ugd, ugd->albums_view) != 0)
+                       goto ALBUMS_FAILED;
+       }
+
+       return 0;
+
+ALBUMS_FAILED:
+
+       if(ugd->albums_view && ugd->albums_view != ugd->nocontents)
+               ge_albums_del_callbacks(ugd);
+
+       evas_object_del(ugd->albums_view);
+
+       ge_dbgW("@@@@@@@  To create nocontents view @@@@@@@@");
+       ugd->nocontents = ge_ui_create_nocontents(ugd);
+       ugd->albums_view = ugd->nocontents;
+       GE_CHECK_VAL(ugd->albums_view, -1);
+       evas_object_show(ugd->albums_view);
+
+       elm_object_part_content_set(ugd->albums_view_ly, "contents", ugd->albums_view);
+       return -1;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-button.c b/libug/libug-gallery-efl/src/ge-button.c
new file mode 100755 (executable)
index 0000000..52e6255
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+  * 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://www.tizenopensource.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 "ge-debug.h"
+#include "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-button.h"
+#include "ge-strings.h"
+
+#define GE_BTN_NF_TITLE "naviframe/title/gallery_efl"
+
+Evas_Object *ge_but_create_title_but(ge_ugdata *ugd, Evas_Object *parent, ge_but_mode mode)
+{
+       ge_dbg("Button mode: %d", mode);
+       Evas_Object* btn = NULL;
+       GE_CHECK_NULL(ugd);
+       GE_CHECK_NULL(parent);
+
+       btn = elm_button_add(parent);
+       GE_CHECK_NULL(btn);
+       if(ugd->th)
+               elm_object_theme_set(btn, ugd->th);
+
+       elm_object_style_set(btn, GE_BTN_NF_TITLE);
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.5);
+
+       switch (mode) {
+       case GE_BUT_DONE:
+               elm_object_text_set(btn,
+                                   (char*)_GE_GETSYSTEMSTR("IDS_COM_SK_DONE"));
+               break;
+       case GE_BUT_CANCEL:
+               elm_object_text_set(btn,
+                                   (char*)_GE_GETSYSTEMSTR("IDS_COM_SK_CANCEL"));
+               break;
+       default:
+               break;
+       }
+
+       evas_object_show(btn);
+
+       return btn;
+}
+
+Evas_Object *_ge_but_create_but(Evas_Object *parent, ge_but_mode mode, But_Smart_Cb cb_func, const void *data)
+{
+       ge_dbg("Button mode: %d", mode);
+       Evas_Object *btn = NULL;
+       GE_CHECK_NULL(parent);
+
+       btn = elm_button_add(parent);
+       GE_CHECK_NULL(btn);
+
+       switch (mode) {
+       case GE_BUT_OK:
+               elm_object_text_set(btn,
+                                   (char*)_GE_GETSYSTEMSTR("IDS_COM_SK_OK"));
+               break;
+       case GE_BUT_CANCEL:
+               elm_object_text_set(btn,
+                                   (char*)_GE_GETSYSTEMSTR("IDS_COM_SK_CANCEL"));
+               break;
+       default:
+               break;
+       }
+
+       if (cb_func)
+               evas_object_smart_callback_add(btn, "clicked", cb_func, data);
+
+       return btn;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-db-handler.c b/libug/libug-gallery-efl/src/ge-db-handler.c
new file mode 100755 (executable)
index 0000000..8e80195
--- /dev/null
@@ -0,0 +1,1141 @@
+/*
+  * 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://www.tizenopensource.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 <media-svc.h>
+#include <visual-svc.h>
+#include "ge-db-handler.h"
+#include "ge-debug.h"
+#include "ge-util.h"
+#include "ge-strings.h"
+
+static int ge_all_count = 0;
+static Eina_List* ge_db_item_list = NULL;
+static Eina_List* ge_item_selected_list = NULL;
+
+#define ALBUM_ALL_LEN 4
+#define GE_DB_FILE_LEN_MAX 1024
+
+static int _ge_db_elist_ite_fn(Mitem *item, void *user_data)
+{
+       Eina_List **list = (Eina_List **)user_data;
+       *list = eina_list_append(*list, item);
+       return GE_DB_SUCCESS;
+}
+
+static int _ge_db_cluster_elist_ite_fn(Mcluster *cluster, void *user_data)
+{
+       Eina_List **list = (Eina_List **)user_data;
+       *list = eina_list_append(*list, cluster);
+       return GE_DB_SUCCESS;
+}
+
+/*
+*  create a gitem
+*/
+static ge_item* _ge_db_new_item(void)
+{
+       ge_item* gitem = (ge_item*)calloc(1, sizeof(ge_item));
+       GE_CHECK_NULL(gitem);
+       return gitem;
+}
+
+/*
+*   destroy a ge_item
+*/
+static int _ge_db_destroy_item(ge_item* gitem)
+{
+       if(gitem)
+       {
+               if(gitem->item)
+               {
+                       ge_db_destroy_mtype_item(gitem->item);
+                       gitem->item = NULL;
+               }
+
+               if(gitem->_reserved)
+               {
+                       free(gitem->_reserved);
+                       gitem->_reserved = NULL;
+               }
+
+               gitem->elm_item = NULL;
+               gitem->checked = false;
+               gitem->check_obj = NULL;
+               free(gitem);
+               gitem = NULL;
+       }
+       return GE_DB_SUCCESS;
+}
+
+static int _ge_db_clear_mtype_items_list(Eina_List **elist)
+{
+       void *current = NULL;
+
+       if (elist && *elist) {
+               ge_dbg("Clear Mitems list.");
+               EINA_LIST_FREE(*elist, current) {
+                       if (current) {
+                               ge_db_destroy_mtype_item(current);
+                               current = NULL;
+                       }
+               }
+
+               *elist = NULL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
+static int _ge_db_clear_items_list(void)
+{
+       ge_item* current = NULL;
+
+       if (ge_db_item_list)
+       {
+               ge_dbg("Clear items list.");
+               EINA_LIST_FREE(ge_db_item_list, current)
+               {
+                       _ge_db_destroy_item(current);
+                       current = NULL;
+               }
+       }
+       ge_db_item_list = NULL;
+       ge_all_count = 0;
+       return GE_DB_SUCCESS;
+}
+
+static int _ge_db_free_cluster(ge_cluster* gcluster)
+{
+       GE_CHECK_VAL(gcluster, GE_DB_FAIL);
+       if(gcluster->cluster)
+       {
+               ge_db_destroy_mtype_item(gcluster->cluster);
+               gcluster->cluster = NULL;
+       }
+       if(gcluster->_reserved)
+       {
+               free(gcluster->_reserved);
+               gcluster->_reserved = NULL;
+       }
+       free(gcluster);
+       return GE_DB_SUCCESS;
+}
+
+/* Free memory allocated for 'All' album */
+static int _ge_db_free_cluster_all(ge_cluster* gcluster)
+{
+       GE_CHECK_VAL(gcluster, GE_DB_FAIL);
+       GE_CHECK_VAL(gcluster->cluster, GE_DB_FAIL);
+
+       if(gcluster->cluster->display_name)
+       {
+               free(gcluster->cluster->display_name);
+               gcluster->cluster->display_name = NULL;
+       }
+
+       if(gcluster->_reserved)
+       {
+               free(gcluster->_reserved);
+               gcluster->_reserved = NULL;
+       }
+
+       free(gcluster->cluster);
+       gcluster->cluster = NULL;
+       free(gcluster);
+       return GE_DB_SUCCESS;
+}
+
+static int _ge_db_clear_clusters_list(ge_ugdata* ugd)
+{
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       ge_cluster* current = NULL;
+       Eina_List* tmp_list = NULL;
+
+       _ge_set_current_album(NULL);
+
+       if(ugd->cluster_list)
+       {
+               if(ugd->cluster_list->clist)
+               {
+                       ge_dbg("Clear clusters list.");
+                       tmp_list = ugd->cluster_list->clist;
+                       EINA_LIST_FREE(tmp_list, current)
+                       {
+                               if(current)
+                               {
+                                       if(current->cluster &&
+                                          current->cluster->uuid &&
+                                          !g_strcmp0(current->cluster->uuid, GE_ALBUM_ALL_ID))
+                                       {
+                                               _ge_db_free_cluster_all(current);
+                                       }
+                                       else
+                                       {
+                                               _ge_db_free_cluster(current);
+                                       }
+                               }
+                               current = NULL;
+                       }
+                       ugd->cluster_list->clist = NULL;
+               }
+
+               free(ugd->cluster_list);
+               ugd->cluster_list = NULL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
+static ge_cluster_list* _ge_db_new_clusters_list(void)
+{
+       ge_cluster_list* clus_list = (ge_cluster_list*)calloc(1, sizeof(ge_cluster_list));
+       GE_CHECK_NULL(clus_list);
+       return clus_list;
+}
+
+static ge_cluster* _ge_db_new_cluster(void)
+{
+       ge_cluster* gcluster = (ge_cluster*)calloc(1, sizeof(ge_cluster));
+       GE_CHECK_NULL(gcluster);
+       return gcluster;
+}
+
+/* Create 'All' album */
+static ge_cluster* _ge_db_new_cluster_all(ge_ugdata* ugd, int count)
+{
+       GE_CHECK_NULL(ugd);
+       ge_cluster* gcluster = _ge_db_new_cluster();
+       GE_CHECK_NULL(gcluster);
+
+       /* Pass -1 to get a mcluster from libmedia-info, not a real record in DB */
+       Mcluster* cluster = ge_db_new_mcluster(ugd, NULL);
+       if(cluster == NULL)
+       {
+               free(gcluster);
+               gcluster = NULL;
+               return NULL;
+       }
+
+       cluster->uuid = strdup(GE_ALBUM_ALL_ID);
+       cluster->display_name = strdup(GE_ALBUM_ALL_NAME);
+       cluster->count = count;
+       gcluster->cluster = cluster;
+       gcluster->ugd = ugd;
+       gcluster->index = 0;
+
+       return gcluster;
+}
+
+/* Case 1: Carema shot[0], All[1], ...; Case 2: All[0], ... */
+static int _ge_db_get_clusters_list(ge_ugdata* ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       int length = 0;
+       int local_item_cnt = 0;
+       Eina_List *item_list = NULL;
+       Mcluster *f_data = NULL;
+       ge_cluster * default_cluster = NULL;
+       ge_cluster* gcluster = NULL;
+       int medias_cnt = 0;
+       int err = -1;
+       minfo_cluster_filter filter;
+       minfo_item_filter item_filter;
+
+       /* Get real albums */
+       memset(&filter, 0x00, sizeof(minfo_cluster_filter));
+       filter.cluster_type = MINFO_CLUSTER_TYPE_ALL;
+       filter.sort_type = MINFO_CLUSTER_SORT_BY_NAME_ASC;
+       filter.start_pos = GE_GET_ALL_RECORDS;
+       filter.end_pos = GE_GET_ALL_RECORDS;
+
+       err = minfo_get_cluster_list(ugd->db_handle, filter,
+                                       _ge_db_cluster_elist_ite_fn, &item_list);
+       if(err == MB_SVC_ERROR_DB_NO_RECORD) {
+               ge_dbgE("No record");
+               if (item_list)
+                       _ge_db_clear_mtype_items_list(&item_list);
+               return err;
+       } else if(err != 0) {
+               ge_dbgE("minfo_get_cluster_list failed(%d)!", err);
+               if (item_list)
+                       _ge_db_clear_mtype_items_list(&item_list);
+               return err;
+       }
+
+       Eina_List* clist = ugd->cluster_list->clist;
+
+       EINA_LIST_FREE(item_list, f_data) {
+               if (f_data == NULL || f_data->uuid == NULL) {
+                       /* Invalid data, next one */
+                       ge_dbgE("Invalid Mcluster!");
+                       continue;
+               }
+               ge_dbg("Cluster ID: %s.", f_data->uuid);
+
+               /* only image is valid in setas mode. */
+               if (ugd->file_type_mode == GE_File_Select_Type_Image ||
+                   ugd->file_type_mode == GE_File_Select_Type_Video) {
+                       memset(&item_filter,0x00,sizeof(minfo_item_filter));
+                       if(ugd->file_type_mode == GE_File_Select_Type_Image)
+                               item_filter.file_type = MINFO_ITEM_IMAGE;
+                       else
+                               item_filter.file_type = MINFO_ITEM_VIDEO;
+                       item_filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+                       item_filter.start_pos = GE_GET_ALL_RECORDS;
+                       item_filter.end_pos = GE_GET_ALL_RECORDS;
+                       item_filter.with_meta = false;
+
+                       err = minfo_get_item_cnt(ugd->db_handle, f_data->uuid,
+                                               item_filter, &medias_cnt);
+                       if(err == 0 || err == MB_SVC_ERROR_DB_NO_RECORD) {
+                               f_data->count = medias_cnt;
+                       } else {
+                               ge_dbgW("minfo_get_cluster_cnt[err:%d]", err);
+                               f_data->count = 0;
+                       }
+               }
+
+               if(f_data->count == 0) {
+                       /* Skip empty album, next one */
+                       ge_dbgW("local album is empty, skipping it.");
+                       ge_db_destroy_mtype_item(f_data);
+                       continue;
+               }
+
+               gcluster = _ge_db_new_cluster();
+               if(gcluster == NULL) {
+                       ge_dbgE("_ge_db_new_cluster failed!");
+                       ge_db_destroy_mtype_item(f_data);
+                       continue;
+               }
+
+               gcluster->cluster = f_data;
+               gcluster->ugd = ugd;
+               length += f_data->count;
+               local_item_cnt += f_data->count;
+
+               if (ge_db_is_default_album(ugd, f_data)) {
+                       /**
+                       * Default album: Camera Shot
+                       * Now Camera Shot is located in Phone.
+                       * If user can determine the location of default album,
+                       * here we should get the path and check it's in Phone or MMC.
+                       */
+                       default_cluster = gcluster;
+                       clist = eina_list_prepend(clist, gcluster);
+               } else {
+                       clist = eina_list_append(clist, gcluster);
+               }
+               ugd->cluster_list->clist = clist;
+       }
+       ge_dbg("Get local clusters list Done!");
+       if(local_item_cnt) {
+               /* Create "All" album if any file exists */
+               gcluster = _ge_db_new_cluster_all(ugd, local_item_cnt);
+               GE_CHECK_VAL(gcluster, -1);
+
+               if(default_cluster)
+                       clist = eina_list_append_relative(clist, gcluster,
+                                                         default_cluster);
+               else
+                       clist= eina_list_prepend(clist, gcluster);
+
+               ugd->cluster_list->clist = clist;
+               ge_dbg("Cluster All added!");
+       }
+
+       return length;
+}
+
+static int _ge_db_get_selected_item_id_list(Eina_List **sel_id_list)
+{
+       GE_CHECK_VAL(sel_id_list, -1);
+       GE_CHECK_VAL(ge_item_selected_list, -1);
+       ge_item *gitem = NULL;
+       char *item_id = NULL;
+
+       /* Save ID of selected items */
+       EINA_LIST_FREE(ge_item_selected_list, gitem) {
+               if (gitem && gitem->item && gitem->item->uuid) {
+                       item_id = strdup(gitem->item->uuid);
+                       *sel_id_list = eina_list_append(*sel_id_list,
+                                                       (void *)item_id);
+               }
+       }
+
+       ge_db_selected_list_finalize();
+       return 0;
+}
+
+/* Free list of selected IDs */
+static int __ge_db_free_selected_id_list(Eina_List **sel_id_list)
+{
+       GE_CHECK_VAL(sel_id_list, -1);
+       if (*sel_id_list == NULL) {
+               ge_dbg("sel_id_list is empty!");
+               return -1;
+       }
+
+       void *p_id = NULL;
+       EINA_LIST_FREE(*sel_id_list, p_id) {
+               if (p_id == NULL) {
+                       ge_dbgE("Invalid p_id!");
+                       continue;
+               }
+               free(p_id);
+               p_id = NULL;
+       }
+       *sel_id_list = NULL;
+       return 0;
+}
+
+/* Check ID is in the list or not */
+static bool _ge_db_check_selected_id(Eina_List **sel_id_list, const char *id)
+{
+       GE_CHECK_FALSE(sel_id_list);
+       GE_CHECK_FALSE(id);
+       Eina_List *tmp_elist = NULL;
+       void *p_id = NULL;
+
+       if (eina_list_count(*sel_id_list) == 0) {
+               ge_dbgE("sel_id_list is empty!");
+               return false;
+       }
+
+       EINA_LIST_FOREACH(*sel_id_list, tmp_elist, p_id) {
+               if (p_id == NULL) {
+                       ge_dbgE("Invalid p_id!");
+                       continue;
+               }
+               if (g_strcmp0(id, p_id)) {
+                       p_id = NULL;
+                       continue;
+               }
+
+               *sel_id_list = eina_list_remove(*sel_id_list, p_id);
+               free(p_id);
+               p_id = NULL;
+               return true;
+       }
+       return false;
+}
+
+/*
+*   get a new cluster from media service by cluster id
+*/
+Mcluster* ge_db_new_mcluster(ge_ugdata* ugd, const char *cluster_id)
+{
+       GE_CHECK_NULL(ugd);
+       Mcluster* mcluster = NULL;
+       int ret = minfo_get_cluster(ugd->db_handle, NULL, cluster_id, &mcluster);
+       if(ret != 0)
+       {
+               ge_dbgE("minfo_get_cluster failed(%d)!", ret);
+               return NULL;
+       }
+
+       return mcluster;
+}
+/*
+*  get a new item from media service by item id
+*/
+Mitem* ge_db_new_mitem(ge_ugdata* ugd, const char *item_id)
+{
+       GE_CHECK_NULL(ugd);
+       Mitem* mitem = NULL;
+       /*new API, to use media id to get item.  */
+       int ret = minfo_get_item_by_id(ugd->db_handle, item_id, &mitem);
+       if(ret != 0)
+       {
+               ge_dbgE("minfo_get_item_by_id failed(%d)!", ret);
+               return NULL;
+       }
+
+       return mitem;
+}
+
+int ge_db_update_items_cnt(ge_ugdata* ugd, ge_cluster *album)
+{
+       GE_CHECK_VAL(album, GE_DB_FAIL);
+       GE_CHECK_VAL(album->cluster, GE_DB_FAIL);
+       GE_CHECK_VAL(album->cluster->uuid, GE_DB_FAIL);
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       minfo_item_filter filter;
+       int err = -1;
+       int item_count = 0;
+
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       if(ugd->file_type_mode == GE_File_Select_Type_Image)
+       {
+               filter.file_type = MINFO_ITEM_IMAGE;
+       }
+       else if(ugd->file_type_mode == GE_File_Select_Type_Video)
+       {
+               filter.file_type = MINFO_ITEM_VIDEO;
+       }
+       else
+       {
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+       }
+       filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+       filter.start_pos = GE_GET_ALL_RECORDS;
+       filter.end_pos = GE_GET_ALL_RECORDS;
+       filter.with_meta = false;
+
+       if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
+               /* real album */
+               err = minfo_get_item_cnt(ugd->db_handle, album->cluster->uuid,
+                                               filter, &item_count);
+               if(err < 0)
+               {
+                       ge_dbg("minfo_get_item_cnt failed(%d)!", err);
+                       return GE_DB_FAIL;
+               }
+       }
+       else// "All" album
+       {
+               ge_dbg("all media count");
+               /**
+               * Fixme: Use better API.
+               * No way to set filter if call minfo_get_all_item_cnt to get all count,
+               * So get item list firstly, then get all items count.
+               */
+               Eina_List* itemlist = NULL;
+               err = minfo_get_all_item_list(ugd->db_handle,
+                                                       MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                       filter, _ge_db_elist_ite_fn,
+                                                       &itemlist);
+
+               if(err < 0 || itemlist == NULL) {
+                       ge_dbg("minfo_get_all_item_list failed(%d)!", err);
+                       if (itemlist)
+                               _ge_db_clear_mtype_items_list(&itemlist);
+                       return GE_DB_FAIL;
+               }
+
+               Mitem *item = NULL;
+               EINA_LIST_FREE(itemlist, item) {
+                       if (item) {
+                               item_count++;
+                               ge_db_destroy_mtype_item(item);
+                               item = NULL;
+                       }
+               }
+       }
+
+       ge_dbg("cluster media count : old=%d, new=%d", album->cluster->count, item_count);
+       album->cluster->count = item_count;
+
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_get_clusters_list(ge_ugdata* ugd)
+{
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       int n_entire_items = 0;
+
+       _ge_db_clear_clusters_list(ugd);
+
+       ugd->cluster_list = _ge_db_new_clusters_list();
+       n_entire_items = _ge_db_get_clusters_list(ugd);
+       ge_dbg("Total media items count:%d", n_entire_items);
+       if(n_entire_items <= 0)//if error code is returned, negative value is possible
+       {
+               return GE_DB_FAIL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
+/* Clear items list */
+int ge_db_clear_items_list(void)
+{
+       return _ge_db_clear_items_list();
+}
+
+int ge_db_get_items_list(ge_ugdata* ugd, ge_cluster *album, int start_pos, int end_pos)
+{
+       GE_CHECK_VAL(album, GE_DB_FAIL);
+       GE_CHECK_VAL(album->cluster, GE_DB_FAIL);
+       GE_CHECK_VAL(album->cluster->uuid, GE_DB_FAIL);
+       GE_CHECK_VAL(ugd, -1);
+       Eina_List* itemlist = NULL;
+       minfo_item_filter filter;
+       int err = -1;
+
+       ge_dbg("--start_pos[%d], end_pos[%d]--", start_pos, end_pos);
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       if(ugd->file_type_mode == GE_File_Select_Type_Image)
+       {
+               filter.file_type = MINFO_ITEM_IMAGE;
+       }
+       else if(ugd->file_type_mode == GE_File_Select_Type_Video)
+       {
+               filter.file_type = MINFO_ITEM_VIDEO;
+       }
+       else
+       {
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+       }
+       filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+       filter.start_pos = start_pos;
+       filter.end_pos = end_pos;
+       filter.with_meta = true;
+
+       if(start_pos == (GE_FIRST_VIEW_END_POS+1) && end_pos == GE_GET_UNTIL_LAST_RECORD)
+       {
+               /* Keep medias_elist and medias_cnt unchanged */
+               ge_dbg("Gridview append idler; Keep ge_db_item_list unchanged.");
+       }
+       else
+       {
+               /*Clear item list before new one got */
+               _ge_db_clear_items_list();
+       }
+
+       if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
+               /* real album */
+               ge_dbg("--Real album--");
+               err = minfo_get_item_list(ugd->db_handle, album->cluster->uuid,
+                                               filter, _ge_db_elist_ite_fn, &itemlist);
+       }
+       else    //add "All" album
+       {
+               ge_dbg("--Album All--");
+               err = minfo_get_all_item_list(ugd->db_handle,
+                                                       MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                       filter, _ge_db_elist_ite_fn,
+                                                       &itemlist);
+       }
+
+       if((err == 0) && (itemlist != NULL))
+       {
+               Mitem *item = NULL;
+               ge_item* gitem = NULL;
+               EINA_LIST_FREE(itemlist, item)
+               {
+                       if (item == NULL || item->uuid == NULL) {
+                               ge_dbgE("Invalid item!");
+                               continue;
+                       }
+
+                       gitem = _ge_db_new_item();
+                       if(gitem == NULL) {
+                               ge_dbgE("_gl_db_new_item() failed");
+                               ge_db_destroy_mtype_item(item);
+                               continue;
+                       }
+
+                       gitem->item = item;
+                       gitem->ugd = ugd;
+                       ge_db_item_list = eina_list_append(ge_db_item_list, gitem);
+                       item = NULL;
+                       gitem = NULL;
+               }
+
+               ge_all_count = eina_list_count(ge_db_item_list);
+       }
+       else
+       {
+               /* Free Mitems */
+               if (itemlist)
+                       _ge_db_clear_mtype_items_list(&itemlist);
+
+               if(start_pos == (GE_FIRST_VIEW_END_POS+1) && end_pos == GE_GET_UNTIL_LAST_RECORD)
+               {
+                       /* Keep medias_elist and medias_cnt unchanged */
+                       ge_all_count = eina_list_count(ge_db_item_list);
+                       ge_dbg("Gridview append idler.");
+               }
+               else
+               {
+                       ge_all_count = 0;
+               }
+       }
+       ge_dbg("DB all count : %d, ge_db_item_list=%p", ge_all_count, ge_db_item_list);
+
+       return err;
+}
+
+/* Update items list, especially used in thumbnails edit view */
+int ge_db_update_items_list(ge_ugdata* ugd, ge_cluster *album)
+{
+       GE_CHECK_VAL(album, -1);
+       GE_CHECK_VAL(album->cluster, -1);
+       GE_CHECK_VAL(album->cluster->uuid, GE_DB_FAIL);
+       GE_CHECK_VAL(ugd, -1);
+       Eina_List* itemlist = NULL;
+       minfo_item_filter filter;
+       int err = -1;
+       ge_dbg("Update content of %s", album->cluster->display_name);
+       int view_mode = _ge_get_view_mode();
+       Eina_List *sel_id_list = NULL;
+
+       if (view_mode == GE_ThumbnailEdit_Mode &&
+           ugd->file_select_mode != GE_File_Select_One) {
+               ge_dbg("Edit view for multiple selection.");
+               /* Get ID list of selected items */
+               _ge_db_get_selected_item_id_list(&sel_id_list);
+       }
+
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       if(ugd->file_type_mode == GE_File_Select_Type_Image)
+               filter.file_type = MINFO_ITEM_IMAGE;
+       else if(ugd->file_type_mode == GE_File_Select_Type_Video)
+               filter.file_type = MINFO_ITEM_VIDEO;
+       else
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+       filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+       filter.start_pos = GE_GET_ALL_RECORDS;
+       filter.end_pos = GE_GET_ALL_RECORDS;
+       filter.with_meta = true;
+
+       /*Clear item list before new one got */
+       _ge_db_clear_items_list();
+
+       if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID))
+               err = minfo_get_item_list(ugd->db_handle, album->cluster->uuid,
+                                               filter, _ge_db_elist_ite_fn, &itemlist);
+       else
+               err = minfo_get_all_item_list(ugd->db_handle,
+                                                       MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                       filter, _ge_db_elist_ite_fn,
+                                                       &itemlist);
+
+       if ((err != 0) || (itemlist == NULL)) {
+               ge_dbgE("(err != 0) || (itemlist == NULL)");
+               /* Free Mitems */
+               if (itemlist)
+                       _ge_db_clear_mtype_items_list(&itemlist);
+               ge_all_count = 0;
+               return err;
+       }
+
+       bool b_selected = false;
+       Mitem *item = NULL;
+       ge_item* gitem = NULL;
+       EINA_LIST_FREE(itemlist, item) {
+               if (item == NULL || item->uuid == NULL) {
+                       ge_dbgE("Invalid item!");
+                       continue;
+               }
+               gitem = _ge_db_new_item();
+               if(gitem == NULL) {
+                       ge_dbgE("_gl_db_new_item() failed");
+                       ge_db_destroy_mtype_item(item);
+                       continue;
+               }
+
+               gitem->item = item;
+               gitem->ugd = ugd;
+               ge_db_item_list = eina_list_append(ge_db_item_list, gitem);
+
+               if (sel_id_list) {
+                       b_selected = _ge_db_check_selected_id(&sel_id_list,
+                                                             item->uuid);
+                       if (b_selected) {
+                               b_selected = false;
+                               /* Set checkbox state */
+                               gitem->checked = true;
+                               /* Append gitem to selected list */
+                               ge_db_selected_list_append(gitem);
+                       }
+               }
+
+               item = NULL;
+               gitem = NULL;
+       }
+
+       /* Clear list of selected ID */
+       if (sel_id_list)
+               __ge_db_free_selected_id_list(&sel_id_list);
+
+       ge_all_count = eina_list_count(ge_db_item_list);
+       ge_dbg("DB all count : %d, ge_db_item_list=%p", ge_all_count,
+              ge_db_item_list);
+
+       return err;
+}
+
+int ge_db_get_first_several_items(ge_ugdata* ugd, ge_cluster *album,
+                                 ge_item* items[], int *item_count,
+                                 minfo_media_sort_type sort_type)
+{
+       GE_CHECK_VAL(item_count, -1);
+       GE_CHECK_VAL(items, -1);
+       GE_CHECK_VAL(album, -1);
+       GE_CHECK_VAL(album->cluster, -1);
+       GE_CHECK_VAL(album->cluster->uuid, -1);
+       GE_CHECK_VAL(ugd, -1);
+       minfo_item_filter filter;
+       Eina_List *item_list = NULL;
+       int result_cnt = 0;
+       Mitem* item = NULL;
+       ge_item* gitem = NULL;
+       int err = -1;
+
+       if(*item_count <= 0)
+       {
+               ge_dbgE("*item_count <= 0");
+               return -1;
+       }
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       if(ugd->file_type_mode == GE_File_Select_Type_Image)
+       {
+               filter.file_type = MINFO_ITEM_IMAGE;
+       }
+       else if(ugd->file_type_mode == GE_File_Select_Type_Video)
+       {
+               filter.file_type = MINFO_ITEM_VIDEO;
+       }
+       else
+       {
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+       }
+       filter.sort_type = sort_type;
+       filter.start_pos = 0;
+       filter.end_pos = (*item_count == 1 ? 1 : (*item_count - 1));
+       filter.with_meta = false;
+
+       if(g_strcmp0(album->cluster->uuid, GE_ALBUM_ALL_ID)) {
+               /*real album */
+               err = minfo_get_item_list(ugd->db_handle, album->cluster->uuid,
+                                               filter, _ge_db_elist_ite_fn, &item_list);
+               if(err != 0 || item_list == NULL)
+               {
+                       ge_dbgE("minfo_get_item_list failed(%d)", err);
+                       goto DB_FAILED;
+               }
+       }
+       else    //add "All" album
+       {
+               err = minfo_get_all_item_list(ugd->db_handle,
+                                                       MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                       filter, _ge_db_elist_ite_fn,
+                                                       &item_list);
+               if(err != 0 || item_list == NULL)
+               {
+                       ge_dbgE("minfo_get_all_item_list failed(%d)", err);
+                       goto DB_FAILED;
+               }
+       }
+
+       EINA_LIST_FREE(item_list, item) {
+               if (item == NULL) {
+                       ge_dbgE("Invalid Mitem!");
+                       continue;
+               }
+               result_cnt++;
+               if(result_cnt <= *item_count) {
+                       gitem = NULL;
+                       gitem = _ge_db_new_item();
+                       if (gitem == NULL) {
+                               ge_dbgE("_ge_db_new_item failed!");
+                               ge_db_destroy_mtype_item(item);
+                               result_cnt--;
+                               continue;
+                       }
+                       gitem->item = item;
+                       items[result_cnt-1] = gitem;
+               } else {
+                       ge_db_destroy_mtype_item(item);
+               }
+               item = NULL;
+       }
+
+       if(*item_count > result_cnt)
+               *item_count = result_cnt;
+
+       ge_dbg("First %d items of [%s]", *item_count, album->cluster->display_name);
+       return *item_count;
+
+ DB_FAILED:
+       *item_count = 0;
+       /* Free Mitems */
+       if (item_list)
+               _ge_db_clear_mtype_items_list(&item_list);
+       return -1;
+}
+
+int ge_db_del_media_id(ge_ugdata* ugd, const char *media_id)
+{
+       GE_CHECK_VAL(media_id, GE_DB_FAIL);
+       int ret = minfo_delete_media_id(ugd->db_handle, media_id);
+       if(ret != 0)
+       {
+               ge_dbgE("minfo_delete_media_id failed(%d)!", ret);
+               return GE_DB_FAIL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_item_list_remove(ge_item* gitem)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+       GE_CHECK_VAL(gitem->item, GE_DB_FAIL);
+       GE_CHECK_VAL(gitem->item->uuid, GE_DB_FAIL);
+       ge_item* current = NULL;
+       Eina_List* l = NULL;
+
+       EINA_LIST_FOREACH(ge_db_item_list, l, current)
+       {
+
+               if(current == NULL || current->item == NULL ||
+                  current->item->uuid == NULL) {
+                       ge_dbgE("Invalid gitem!");
+                       continue;
+               }
+               if(!g_strcmp0(current->item->uuid, gitem->item->uuid))
+               {
+                       ge_db_item_list = eina_list_remove(ge_db_item_list, current);
+                       ge_all_count--;
+                       _ge_db_destroy_item(current);
+                       current = NULL;
+                       break;
+               }
+       }
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_destroy_mtype_item(void* item)
+{
+       GE_CHECK_VAL(item, GE_DB_FAIL);
+       int ret = minfo_destroy_mtype_item(item);
+       if(ret != 0)
+       {
+               ge_dbgE("minfo_destroy_mtype_item failed(%d)!", ret);
+               return GE_DB_FAIL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_destroy_item(ge_item * gitem)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+
+       _ge_db_destroy_item(gitem);
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_get_item_by_index(ge_item** gitem, int idx)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+
+       if (idx > ge_all_count)
+       {
+           ge_dbg("db_get_item_by_index(%d) is failed\n", idx);
+               *gitem = NULL;
+               return GE_DB_FAIL;
+       }
+
+       *gitem = eina_list_nth(ge_db_item_list, idx -1);
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_get_count_all(void)
+{
+       return ge_all_count;
+}
+
+int ge_db_get_selected_item_by_index(ge_item** gitem, int idx)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+
+       if (idx > ge_db_selected_list_count())
+       {
+           ge_dbg("db_get_item_by_index(%d) is failed\n", idx);
+               *gitem = NULL;
+               return GE_DB_FAIL;
+       }
+
+       *gitem = eina_list_nth(ge_item_selected_list, idx -1);
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_selected_list_count(void)
+{
+       return eina_list_count(ge_item_selected_list);
+}
+
+Eina_List* ge_db_selected_list_get(void)
+{
+       return ge_item_selected_list;
+}
+
+int ge_db_selected_list_append(ge_item* gitem)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+
+       ge_item_selected_list = eina_list_append(ge_item_selected_list, gitem);
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_selected_list_remove(ge_item* gitem)
+{
+       GE_CHECK_VAL(gitem, GE_DB_FAIL);
+       GE_CHECK_VAL(gitem->item, GE_DB_FAIL);
+       GE_CHECK_VAL(gitem->item->uuid, GE_DB_FAIL);
+       ge_item* current = NULL;
+       Eina_List* l = NULL;
+
+       EINA_LIST_FOREACH(ge_item_selected_list, l, current)
+       {
+               if(current == NULL || current->item == NULL ||
+                  current->item->uuid == NULL) {
+                       ge_dbgE("Invald gitem!");
+                       continue;
+               }
+               if(!g_strcmp0(current->item->uuid, gitem->item->uuid))
+               {
+                       ge_item_selected_list = eina_list_remove(ge_item_selected_list, current);
+                       break;
+               }
+       }
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_selected_list_finalize(void)
+{
+       ge_item* gitem = NULL;
+
+       EINA_LIST_FREE(ge_item_selected_list, gitem)
+       {
+               if(gitem)
+               {
+                       gitem->checked = false;
+               }
+       }
+
+       ge_item_selected_list = NULL;
+       return GE_DB_SUCCESS;
+}
+
+/*
+*   get full path of cluster
+*/
+int ge_db_get_folder_fullpath(ge_ugdata* ugd, const char *id, char *path)
+{
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       GE_CHECK_VAL(id, GE_DB_FAIL);
+       GE_CHECK_VAL(path, GE_DB_FAIL);
+       /*For safety, we should add one more parameter as a size of the output array. */
+       return minfo_get_cluster_fullpath_by_id(ugd->db_handle,id, path,
+                                               GE_DIR_PATH_LEN_MAX);
+}
+
+/*
+*   Check it's default album[Camera shot] or not
+*/
+bool ge_db_is_default_album(ge_ugdata* ugd, Mcluster* mcluster)
+{
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       GE_CHECK_FALSE(mcluster);
+       GE_CHECK_FALSE(mcluster->display_name);
+       GE_CHECK_FALSE(mcluster->uuid);
+       int ret = -1;
+
+       /* Name is 'Camera shot' and folder locates in Phone */
+       ret = g_strcmp0(mcluster->display_name, GE_ALBUM_MY_NAME);
+       if (ret == 0 && mcluster->type == MINFO_PHONE) {
+               char dir_path[GE_DIR_PATH_LEN_MAX] = { 0, };
+               int ret = minfo_get_cluster_fullpath_by_id(ugd->db_handle,
+                                                               mcluster->uuid,
+                                                               dir_path,
+                                                               GE_DIR_PATH_LEN_MAX);
+               if(ret != 0) {
+                       ge_dbgE("get_cluster_fullpath_by_id failed[%d]!", ret);
+                       return false;
+               }
+               ge_dbg("Full path: %s", dir_path);
+               /* Get parent directory */
+               char *parent_path = ecore_file_dir_get(dir_path);
+               GE_CHECK_FALSE(parent_path);
+               ge_dbg("Parent path: %s", parent_path);
+
+               /* Parent directory is same as Phone root path, it's default folder */
+               ret = g_strcmp0(parent_path, GE_ROOT_PATH_PHONE);
+               GE_FREE_MEM(parent_path)
+
+               if (ret == 0) {
+                       ge_dbgW("Default folder!");
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+bool ge_db_is_root_path(ge_ugdata* ugd, const char *cluster_id, const char *path)
+{
+       int res = 0;
+       char dir_path[GE_DIR_PATH_LEN_MAX] = { 0, };
+
+       if(path) {
+               g_strlcpy(dir_path, path, GE_DIR_PATH_LEN_MAX);
+       } else {
+               GE_CHECK_FALSE(cluster_id);
+               res = minfo_get_cluster_fullpath_by_id(ugd->db_handle,
+                                                               cluster_id, dir_path,
+                                                               GE_DIR_PATH_LEN_MAX);
+               if(res != 0) {
+                       ge_dbgE("minfo_get_cluster_fullpath_by_id failed(%d)!", res);
+                       return false;
+               }
+       }
+
+       ge_dbg("Root path[/opt/media or /opt/storage/sdcard]: %s ?", dir_path);
+       if(!g_strcmp0(GE_ROOT_PATH_PHONE, dir_path) ||
+          !g_strcmp0(GE_ROOT_PATH_MMC, dir_path))
+               return true;
+
+       return false;
+}
+
+int ge_db_init(ge_ugdata* ugd)
+{
+       ge_dbg("Connect to libmedia-info!");
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       MediaSvcHandle *_db_handle = NULL;
+
+       int err = media_svc_connect(&_db_handle);
+       if (err < 0) {
+               ge_dbgE("Connect to DB failed!");
+               return GE_DB_FAIL;
+       }
+
+       ugd->db_handle = _db_handle;
+       return GE_DB_SUCCESS;
+}
+
+int ge_db_finalize(ge_ugdata* ugd)
+{
+       ge_dbg("Free memory and disconnect with libmedia-info!");
+       GE_CHECK_VAL(ugd, GE_DB_FAIL);
+       _ge_db_clear_clusters_list(ugd);
+       _ge_db_clear_items_list();
+
+       int err = media_svc_disconnect(ugd->db_handle);
+       if (err != 0)
+       {
+               ge_dbgE("\n\nDisconnect with libmedia-info failed!!!\n");
+               return GE_DB_FAIL;
+       }
+
+       return GE_DB_SUCCESS;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-debug.c b/libug/libug-gallery-efl/src/ge-debug.c
new file mode 100755 (executable)
index 0000000..0af7d51
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  * 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://www.tizenopensource.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 <unistd.h>
+#include <string.h>
+#include "ge-debug.h"
+
+#ifdef _USE_LOG_FILE_
+static char _g_file_path[GE_DB_FILE_LEN_MAX] = { 0, };
+#endif
+
+
diff --git a/libug/libug-gallery-efl/src/ge-ext-ug-load.c b/libug/libug-gallery-efl/src/ge-ext-ug-load.c
new file mode 100755 (executable)
index 0000000..72b6090
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#include <app_service.h>
+#include "ge-ext-ug-load.h"
+#include "ge-debug.h"
+#include "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-albums.h"
+#include "ge-gridview.h"
+
+#define GE_IV_UG_NAME "image-viewer-efl"
+
+static bool ge_destroy_me = false;
+
+static void _ge_ext_destroy_me(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK(ugd);
+       GE_CHECK(ugd->ug_called_by_me);
+       GE_CHECK(ugd->ug);
+       GE_CHECK(ugd->bundle);
+       bool send_result = false;
+
+       if (_ge_ug_iv_get())
+       {
+               _ge_ug_iv_set(false);
+       }
+
+       if(ge_destroy_me == false)
+       {
+               ug_destroy(ugd->ug_called_by_me);
+               ugd->ug_called_by_me = NULL;
+       }
+       if(ugd->file_select_mode == GE_File_Select_Setas)
+       {
+               if(ugd->file_setas_image_path)
+               {
+                       ge_dbg("GE_SETAS_IMAGE_PATH:%s", ugd->file_setas_image_path);
+                       bundle_add(ugd->bundle, GE_SETAS_IMAGE_PATH, ugd->file_setas_image_path);
+
+                       free(ugd->file_setas_image_path);
+                       ugd->file_setas_image_path = NULL;
+                       send_result = true;
+               }
+
+               if(ugd->file_setas_crop_image_path &&
+                       ugd->file_select_setas_mode == GE_File_Select_Setas_CallerID)
+               {
+                       ge_dbg("GE_SETAS_CALLERID_CROP_IMAGE_PATH:%s", ugd->file_setas_crop_image_path);
+                       bundle_add(ugd->bundle, GE_SETAS_CALLERID_CROP_IMAGE_PATH, ugd->file_setas_crop_image_path);
+
+                       free(ugd->file_setas_crop_image_path);
+                       ugd->file_setas_crop_image_path = NULL;
+                       send_result = true;
+               }
+
+               if(send_result)
+               {
+                       ge_dbg("Call ug_send_result() to send result.");
+                       ug_send_result(ugd->ug, ugd->bundle);
+               }
+       }
+
+       if(ge_destroy_me)
+       {
+               ge_dbg("Seting is appllied, destroy gallery UG.");
+               ge_destroy_me = false;
+               ug_destroy_me(ugd->ug);//close selection ug
+               ugd->ug_called_by_me = NULL;
+       }
+       else
+       {
+               ge_dbg("Cancel button tapped, back to thumbnails view.");
+       }
+}
+
+static void _ge_ext_iv_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void* priv)
+{
+       ge_dbg("");
+       GE_CHECK(priv);
+       GE_CHECK(ug);
+
+       Evas_Object *base = (Evas_Object *) ug_get_layout(ug);
+       if (!base)
+       {
+               ug_destroy(ug);
+               return;
+       }
+
+       ge_ugdata *ugd = (ge_ugdata *)priv;
+
+       evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(ugd->win, base);
+       evas_object_show(base);
+}
+
+static void _ge_ext_iv_result_cb(struct ui_gadget *ug, bundle *result, void *priv)
+{
+       ge_dbg("");
+       GE_CHECK(priv);
+       GE_CHECK(result);
+       ge_ugdata *ugd = (ge_ugdata *)priv;
+       const char* path = NULL;
+
+       if(ugd->file_select_mode == GE_File_Select_Setas)
+       {
+               path = bundle_get_val(result, GE_IMAGEVIEWER_IMAGE_PATH);
+               ge_dbg("SETAS_IMAGE_PATH");
+               ge_destroy_me = true;
+               if(path)
+               {
+                       ge_dbg(":%s", path);
+                       ugd->file_setas_image_path = strdup(path);
+               }
+
+               if(ugd->file_select_setas_mode == GE_File_Select_Setas_CallerID)
+               {
+                       path = bundle_get_val(result, GE_IMAGEVIEWER_CROP_IMAGE_PATH);
+                       ge_dbg("CALLERID_CROP_IMAGE_PATH");
+                       if(path)
+                       {
+                               ge_dbg(":%s", path);
+                               ugd->file_setas_crop_image_path = strdup(path);
+                       }
+               }
+       }
+
+       const char *error_state = bundle_get_val(result, GE_IMAGEVIEWER_RETURN_ERROR);
+       if (error_state)
+       {
+               ge_dbg("error string : %s", error_state);
+
+               if (!g_strcmp0(error_state, "not_supported_file_type")) {
+                       ge_destroy_me = FALSE;
+                       ge_item* cur_item = _ge_get_current_item();
+                       if(cur_item == NULL || cur_item->item == NULL ||
+                          cur_item->item->file_url == NULL) {
+                               ge_dbgE("current item is NULL");
+                               return;
+                       }
+                       service_h service;
+                       service_create(&service);
+                       GE_CHECK(service);
+                       service_set_operation(service, SERVICE_OPERATION_VIEW);
+                       service_set_uri(service, cur_item->item->file_url);
+                       service_send_launch_request(service, NULL, NULL);
+                       service_destroy(service);
+               }
+       }
+}
+
+static void _ge_ext_iv_destroy_cb(struct ui_gadget *ug, void *priv)
+{
+       ge_dbg("");
+       GE_CHECK(priv);
+       ge_ugdata *ad = (ge_ugdata *) priv;
+
+       _ge_ext_destroy_me(ad);
+}
+
+int ge_ext_load_iv_ug(ge_ugdata* ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+
+       struct ug_cbs cbs;
+       struct ui_gadget* ug = NULL;
+       bundle* param = NULL;
+
+       if(ugd->ug_called_by_me)
+       {
+               ge_dbg("Already exits some UG called by me");
+               return -1;
+       }
+
+       ge_item* cur_item = _ge_get_current_item();
+       if(cur_item == NULL || cur_item->item == NULL)
+       {
+               ge_dbg("current item is NULL");
+               return -1;
+       }
+       memset(&cbs,0x00,sizeof(struct ug_cbs));
+       cbs.layout_cb = _ge_ext_iv_layout_cb;
+       cbs.result_cb = _ge_ext_iv_result_cb;
+       cbs.destroy_cb = _ge_ext_iv_destroy_cb;
+       cbs.priv = ugd;
+
+       param = bundle_create();
+       GE_CHECK_VAL(param, -1);
+
+       _ge_ug_iv_set(true);
+
+       bundle_add(param, "View Mode", "SETAS" );
+       bundle_add(param, "Path", cur_item->item->file_url);
+
+       if(ugd->file_select_setas_mode == GE_File_Select_Setas_Wallpaper)
+       {
+               bundle_add(param, "Setas type", "Wallpaper");
+
+               if(ugd->file_setas_homescreen_path)
+               {
+                       ge_dbg("homescreen_path:%s", ugd->file_setas_homescreen_path);
+                       bundle_add(param, GE_IMAGEVIEWER_HOMESCREEN_PATH, ugd->file_setas_homescreen_path);
+                       free(ugd->file_setas_homescreen_path);
+                       ugd->file_setas_homescreen_path = NULL;
+               }
+
+               if(ugd->file_setas_lockscreen_path)
+               {
+                       ge_dbg("lockscreen_path:%s", ugd->file_setas_lockscreen_path);
+                       bundle_add(param, GE_IMAGEVIEWER_LOCKSCREEN_PATH, ugd->file_setas_lockscreen_path);
+                       free(ugd->file_setas_lockscreen_path);
+                       ugd->file_setas_lockscreen_path = NULL;
+               }
+       }
+       else if(ugd->file_select_setas_mode == GE_File_Select_Setas_CallerID)
+       {
+               bundle_add(param, "Setas type", "CallerID");
+               if(ugd->file_setas_callid_size)
+               {
+                       ge_dbg("callerid_size:%s", ugd->file_setas_callid_size);
+                       bundle_add(param, GE_IMAGEVIEWER_CALLERID_SIZE, ugd->file_setas_callid_size);
+                       free(ugd->file_setas_callid_size);
+                       ugd->file_setas_callid_size = NULL;
+               }
+
+               if(ugd->file_setas_callid_path)
+               {
+                       ge_dbg("callerid_path:%s", ugd->file_setas_callid_path);
+                       bundle_add(param, GE_IMAGEVIEWER_CALLERID_PATH, ugd->file_setas_callid_path);
+                       free(ugd->file_setas_callid_path);
+                       ugd->file_setas_callid_path = NULL;
+               }
+       }
+       ug = ug_create(ugd->ug, GE_IV_UG_NAME, UG_MODE_FULLVIEW, param, &cbs);
+       ugd->ug_called_by_me = ug;
+       bundle_free(param);
+
+       return 0;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-gridview.c b/libug/libug-gallery-efl/src/ge-gridview.c
new file mode 100755 (executable)
index 0000000..e2e6e81
--- /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://www.tizenopensource.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 "ge-debug.h"
+#include "ge-gridview.h"
+#include "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-ext-ug-load.h"
+#include "ge-db-handler.h"
+#include "ge-strings.h"
+
+/* Icon swallowed to part "elm.swallow.icon" */
+#define GE_GRID_ICON_SIZE 156
+#define GE_ITEM_MOUSE_UP_DISTANCE_X 20
+#define GE_ITEM_MOUSE_UP_DISTANCE_Y 20
+#define GE_GIRD_ICON_CLICK_TIME_DELAY 0.01f
+
+static Elm_Gengrid_Item_Class gic;
+static int ge_grid_item_cnt = 0;
+
+typedef struct
+{
+       Evas_Coord x;
+       Evas_Coord y;
+       bool b_pressed;
+}ge_grid_touch_info;
+
+static ge_grid_touch_info ge_touch_info;
+
+static void _ge_grid_drag_up(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_drag_right(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_drag_down(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_drag_left(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_drag_stop(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_unselected(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+}
+
+static void _ge_grid_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(data);
+       if(_ge_get_view_mode() != GE_ThumbnailView_Mode)
+       {
+               //ge_dbgE("EditMode.. now return.");
+               return;
+       }
+       else
+       {
+               ge_dbg("ViewMode");
+       }
+
+       ge_item* gitem = (ge_item*)data;
+       GE_CHECK(gitem->item);
+       GE_CHECK(gitem->ugd);
+       ge_ugdata* ugd = gitem->ugd;
+
+       if(gitem->item->file_url == NULL || strlen(gitem->item->file_url) <= 0)
+       {
+               ge_dbgE("file_url is invalid!");
+               return;
+       }
+       else
+       {
+               ge_dbg("file_url: %s.", gitem->item->file_url);
+       }
+
+       if(ugd->file_select_mode == GE_File_Select_Setas)//imageviewer only supprot image type while setting wallpaper
+       {
+               if(gitem->item->type == MINFO_ITEM_IMAGE)
+               {
+                       _ge_set_current_item(gitem);
+                       ge_dbg("Loading UG-IMAGE(VIDEO)-VIEWER");
+                       ge_ext_load_iv_ug(ugd);
+               }
+               else if(gitem->item->type == MINFO_ITEM_VIDEO && ugd->popup == NULL)
+               {
+                       ge_ui_create_popup(ugd, GE_Popup_OneButton, GE_POPUP_ONLY_SUPPORT_IMAGE);
+               }
+
+       }
+       else if(gitem->item->type == MINFO_ITEM_IMAGE || gitem->item->type == MINFO_ITEM_VIDEO)
+       {
+               _ge_set_current_item(gitem);
+               ge_dbg("Loading UG-IMAGE(VIDEO)-VIEWER");
+               ge_ext_load_iv_ug(ugd);
+       }
+}
+
+static void _ge_grid_icon_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(data);
+       _ge_grid_sel(data, obj, event_info);
+}
+
+static void _ge_grid_item_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down*)event_info;
+       if(ev)
+       {
+               GE_CHECK(data);
+               GE_CHECK(obj);
+               ge_item *gitem = (ge_item *)data;
+               GE_CHECK(gitem->ugd);
+               ge_ugdata *ugd = gitem->ugd;
+
+               ge_touch_info.x = ev->output.x;
+               ge_touch_info.y = ev->output.y;
+
+               if(ugd->ug_called_by_me == NULL)
+               {
+                       edje_object_signal_emit(_EDJ(obj), "mouse,down,shrink", "bg");
+                       ge_touch_info.b_pressed = true;
+               }
+       }
+}
+
+static void    _ge_grid_shrink_resp_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       ge_dbg("");
+       GE_CHECK(obj);
+       GE_CHECK(data);
+       ge_item *gitem = (ge_item *)data;
+       GE_CHECK(gitem->ugd);
+       _ge_grid_icon_clicked(data, obj, NULL);
+
+       edje_object_signal_callback_del(obj, "shrink,expand,done", "bg", _ge_grid_shrink_resp_cb);
+}
+
+static void _ge_grid_item_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       GE_CHECK(obj);
+       Evas_Event_Mouse_Up *ev = event_info;
+
+       if(!ev)
+       {
+               goto RET_WO_EXEC;
+       }
+
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD || ev->event_flags & EVAS_EVENT_FLAG_ON_SCROLL)
+       {
+               goto RET_WO_EXEC;
+       }
+       if((abs(ge_touch_info.x - ev->output.x) > GE_ITEM_MOUSE_UP_DISTANCE_X) || (abs(ge_touch_info.y - ev->output.y) > GE_ITEM_MOUSE_UP_DISTANCE_Y))
+       {
+               goto RET_WO_EXEC;
+       }
+
+       ge_dbg("");
+
+       if(ge_touch_info.b_pressed)
+       {
+               edje_object_signal_emit(_EDJ(obj), "mouse,up,expand", "bg");
+               edje_object_signal_callback_add(_EDJ(obj), "shrink,expand,done", "bg", _ge_grid_shrink_resp_cb, data);
+               ge_touch_info.b_pressed = false;
+       }
+       return;
+
+RET_WO_EXEC:
+       if(ge_touch_info.b_pressed)
+       {
+               edje_object_signal_emit(_EDJ(obj), "mouse,up,expand", "bg");
+               ge_touch_info.b_pressed = false;
+       }
+}
+
+static void _ge_grid_check_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(obj);
+       GE_CHECK(data);
+       ge_item *gitem = (ge_item *)data;
+       GE_CHECK(gitem->item);
+       GE_CHECK(gitem->item->file_url);
+       GE_CHECK(gitem->ugd);
+       ge_ugdata *ugd = gitem->ugd;
+
+       if(_ge_get_view_mode() != GE_ThumbnailEdit_Mode)
+               return;
+
+       Eina_Bool checked = elm_check_state_get(obj);
+       if(checked)
+       {
+               if(ugd->file_select_mode == GE_File_Select_One) // add for one file selection
+               {
+                       ge_dbg("Bundle add:%s", gitem->item->file_url);
+                       /* Hide checked state in one file selection */
+                       elm_check_state_set(obj, false);
+
+                       bundle_del(ugd->bundle, GE_FILE_SELECT_RETURN_PATH);
+                       bundle_add(ugd->bundle, GE_FILE_SELECT_RETURN_PATH, gitem->item->file_url);
+                       ug_send_result(ugd->ug, ugd->bundle);
+                       ug_destroy_me(ugd->ug);
+               }
+               else
+               {
+                       ge_dbg("Append:%s", gitem->item->file_url);
+                       ge_db_selected_list_append( gitem );
+               }
+       }
+       else if(ugd->file_select_mode != GE_File_Select_One)
+       {
+               ge_dbg("Remove:%s", gitem->item->file_url);
+               ge_db_selected_list_remove( gitem );
+       }
+
+       if(ugd->file_select_mode != GE_File_Select_One)
+       {
+               gitem->checked = checked;
+               ge_ui_create_selinfo(ugd, ugd->thumbs_view_ly);
+       }
+}
+
+Evas_Object *_ge_grid_get_content(void *data, Evas_Object *obj, const char *part)
+{
+       GE_CHECK_NULL(data);
+       GE_CHECK_NULL(part);
+       GE_CHECK_NULL(obj);
+       ge_item *gitem = NULL;
+
+       if(strlen(part) <= 0)
+       {
+               ge_dbgE("part length <= 0");
+               return NULL;
+       }
+
+       gitem = (ge_item*)data;
+       GE_CHECK_NULL(gitem->item);
+       GE_CHECK_NULL(gitem->ugd);
+       ge_ugdata *ugd = gitem->ugd;
+
+       if (!strcmp(part, "elm.swallow.icon"))
+       {
+               Evas_Object *layout = elm_layout_add(obj);
+               GE_CHECK_NULL(layout);
+               Evas_Object *bg = elm_bg_add(obj);
+               GE_CHECK_NULL(bg);
+               elm_bg_load_size_set(bg, ugd->icon_size, ugd->icon_size);
+
+               elm_bg_file_set(bg, _GETICON(gitem->item->thumb_url), NULL);
+               evas_object_size_hint_max_set(bg, ugd->icon_size,
+                                             ugd->icon_size);
+               evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               if(gitem->item->type == MINFO_ITEM_VIDEO)
+               {
+                       int bk_len = 0;
+
+                       if(ugd->th)
+                       {
+                               elm_object_theme_set(layout, ugd->th);
+                       }
+                       elm_layout_theme_set(layout, "gengrid", "photoframe", "default_layout_video");
+                       elm_object_part_content_set(layout, "elm.swallow.icon", bg);
+
+                       // Set bookmark icon.
+                       if(gitem->item->meta_info == NULL || gitem->item->meta_info->video_info == NULL)
+                       {
+                               bk_len = 0;
+                       }
+                       else
+                       {
+                               bk_len = g_list_length(gitem->item->meta_info->video_info->bookmarks);
+                       }
+
+                       if(bk_len)
+                       {
+                               elm_layout_theme_set(layout, "gengrid", "photoframe", "default_layout_video_bookmark");
+                       }
+                       else
+                       {
+                               elm_layout_theme_set(layout, "gengrid", "photoframe", "default_layout_video");
+                       }
+                       elm_object_part_content_set(layout, "elm.swallow.icon", bg);
+
+                       /* Set bookmark icon */
+                       if(bk_len)
+                       {
+                               Evas_Object *icon = elm_icon_add(obj);
+                               GE_CHECK_NULL(icon);
+                               elm_icon_file_set(icon, GE_THUMB_BOOKMARK, NULL);
+                               evas_object_show(icon);
+                               elm_object_part_content_set(layout, "elm.swallow.bookmarkicon", icon);
+                       }
+
+                       /* Running time of the video */
+                       if(gitem->item->meta_info && gitem->item->meta_info->video_info)
+                       {
+                               char ret_str[GE_VIDEO_DURATION_MAX]={0,};
+                               /* Convert time unit form millisecond to second */
+                               int duration = floor((gitem->item->meta_info->video_info->duration) / GE_TIME_SECOND_MILLISECOND);
+                               int dur_hr = 0;
+                               int dur_min = 0;
+                               int dur_sec = 0;
+                               int tmp = 0;
+
+                               if(duration >= GE_TIME_HOUR_SECOND)
+                               {
+                                       /* It's equal or greater than 1 hour */
+                                       dur_sec = duration % GE_TIME_MINUTE_SECOND;
+                                       tmp = floor(duration / GE_TIME_MINUTE_SECOND);
+                                       dur_min = tmp % GE_TIME_HOUR_MINUTE;
+                                       dur_hr = floor(tmp / GE_TIME_HOUR_MINUTE);
+                               }
+                               else if(duration >= GE_TIME_MINUTE_SECOND)
+                               {
+                                       /* It's equal or greater than 1 minute */
+                                       dur_hr = 0;
+                                       dur_min = floor(duration / GE_TIME_MINUTE_SECOND);
+                                       dur_sec = duration % GE_TIME_MINUTE_SECOND;
+                               }
+                               else
+                               {
+                                       dur_hr = 0;
+                                       dur_min = 0;
+                                       dur_sec = duration % GE_TIME_MINUTE_SECOND;
+                               }
+
+                               snprintf(ret_str, sizeof(ret_str), "%02d:%02d:%02d", dur_hr, dur_min, dur_sec);
+                               ret_str[strlen(ret_str)] = '\0';
+                               elm_object_part_text_set(layout, "elm.text", ret_str);
+                       }
+               }
+               else
+               {
+                       if(ugd->th)
+                       {
+                               elm_object_theme_set(layout, ugd->th);
+                       }
+
+                       elm_layout_theme_set(layout, "gengrid", "photoframe", "default_layout");
+                       elm_object_part_content_set(layout, "elm.swallow.icon", bg);
+               }
+
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _ge_grid_item_mouse_down, gitem);
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, _ge_grid_item_mouse_up, gitem);
+               evas_object_show(layout);
+
+               return layout;
+       }
+       else if (!strcmp(part, "elm.swallow.end") && (_ge_get_view_mode() == GE_ThumbnailEdit_Mode))
+       {
+               Evas_Object* ck = NULL;
+
+               ck = elm_check_add(obj);
+               GE_CHECK_NULL(ck);
+               elm_object_style_set(ck, GE_CHECKBOX_STYLE_GRID);
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+
+               gitem->check_obj = ck;
+               elm_check_state_set(ck, gitem->checked);
+
+               evas_object_smart_callback_add(ck, "changed", _ge_grid_check_changed, data);
+               evas_object_show(ck);
+
+               return ck;
+       }
+
+       return NULL;
+}
+
+static bool _ge_grid_create_thumb(ge_ugdata* ugd, Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_FALSE(parent);
+       GE_CHECK_FALSE(ugd);
+       int i = 0;
+       ge_item* gitem = NULL;
+       int cnt = ge_db_get_count_all();
+       int item_cnt = 0;
+       ge_dbg("List count : %d", cnt);
+
+       gic.item_style = "thumbnail_view";
+       gic.func.text_get = NULL;
+       gic.func.content_get = _ge_grid_get_content;
+
+       elm_gengrid_clear(parent);
+       if(ugd->th)
+       {
+               elm_object_theme_set(parent, ugd->th);
+       }
+       elm_object_style_set(parent, "gallery_efl/default");
+
+       for(i = 1; i <= cnt; i++)
+       {
+               ge_db_get_item_by_index(&gitem, i);
+               if(gitem == NULL || gitem->item == NULL ||
+                  gitem->item->uuid == NULL) {
+                       ge_dbgE("Invalid gitem, continue...");
+                       continue;
+               }
+
+               if(!gitem->item->file_url)
+               {
+                       ge_db_del_media_id(ugd, gitem->item->uuid);
+                       ge_db_item_list_remove(gitem);
+                       --i;
+                       --cnt;
+                       continue;
+               }
+
+               if(_ge_get_view_mode() == GE_ThumbnailEdit_Mode)
+               {
+                       Mitem* new_item = ge_db_new_mitem(ugd, gitem->item->uuid);
+                       if(!new_item || !ecore_file_exists(gitem->item->file_url))
+                       {
+                               ge_dbg("item or file doesn't exist, remove it...");
+                               ge_db_selected_list_remove(gitem);
+                               ge_db_item_list_remove(gitem);
+
+                               if(new_item)
+                               {
+                                       ge_db_destroy_mtype_item(new_item);
+                                       new_item = NULL;
+                               }
+                               --i;
+                               --cnt;
+                               continue;
+                       }
+
+                       if(new_item)
+                       {
+                               ge_db_destroy_mtype_item(new_item);
+                               new_item = NULL;
+                       }
+               }
+
+               gitem->elm_item = elm_gengrid_item_append(parent, &gic, gitem, _ge_grid_sel, gitem);
+               gitem->check_obj = NULL;
+               item_cnt++;
+
+       }
+
+       elm_gengrid_select_mode_set(parent, ELM_OBJECT_SELECT_MODE_NONE);
+       ge_grid_item_cnt = item_cnt;
+       if(item_cnt == 0)
+       {
+               return EINA_FALSE;
+       }
+       else
+       {
+               return EINA_TRUE;
+       }
+}
+
+Evas_Object* ge_grid_create_ly(Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(parent);
+       Evas_Object* layout = NULL;
+
+       layout = ge_ui_load_edj(parent, GE_EDJ_FILE, GE_GRP_GRIDVIEW);
+       GE_CHECK_NULL(layout);
+       evas_object_show (layout);
+
+       return layout;
+}
+
+int ge_grid_del_callbacks(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       if(ugd->thumbs_view)
+       {
+               ge_dbg("Delete thumbnails callbacks!");
+               evas_object_smart_callback_del(ugd->thumbs_view, "selected", _ge_grid_selected);
+               evas_object_smart_callback_del(ugd->thumbs_view, "unselected", _ge_grid_unselected);
+               evas_object_smart_callback_del(ugd->thumbs_view, "clicked", _ge_grid_clicked);
+               evas_object_smart_callback_del(ugd->thumbs_view, "longpressed", _ge_grid_longpress);
+               evas_object_smart_callback_del(ugd->thumbs_view, "drag,start,up", _ge_grid_drag_up);
+               evas_object_smart_callback_del(ugd->thumbs_view, "drag,start,right", _ge_grid_drag_right);
+               evas_object_smart_callback_del(ugd->thumbs_view, "drag,start,down", _ge_grid_drag_down);
+               evas_object_smart_callback_del(ugd->thumbs_view, "drag,start,left", _ge_grid_drag_left);
+               evas_object_smart_callback_del(ugd->thumbs_view, "drag,stop", _ge_grid_drag_stop);
+       }
+       return 0;
+}
+
+/*
+* When select album, show first (GE_FIRST_VIEW_END_POS+1) medias.
+* Then use idler to get other medias from DB and appened
+* them to gridview.
+* In order to reduce transit time of first show of thumbnails view.
+* Cause most of time is spent for getting records from DB,
+* so we get first (GE_FIRST_VIEW_END_POS+1) items and show thumbnails view,
+* it will accelerate view show.
+*/
+int ge_grid_idler_append_thumbs(void* data)
+{
+       GE_CHECK_VAL(data, -1);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+       GE_CHECK_VAL(ugd->thumbs_view, -1);
+       int i = 0;
+       int item_cnt = 0;
+       ge_item* gitem = NULL;
+       /* Get all medias count of current album */
+       int cnt = ge_db_get_count_all();
+       int ret = -1;
+       ge_cluster* cur_album = _ge_get_current_album();
+       GE_CHECK_VAL(cur_album, -1);
+       GE_CHECK_VAL(cur_album->cluster, -1);
+       ge_dbg("First view medias count: %d;", cnt);
+
+       if(cnt != (GE_FIRST_VIEW_END_POS+1))
+       {
+               ge_dbg("No any more items, return!");
+               return -1;
+       }
+       /* Get other items from DB */
+       ret = ge_db_get_items_list(ugd, cur_album, (GE_FIRST_VIEW_END_POS+1), GE_GET_UNTIL_LAST_RECORD);
+       ge_dbg("\n\n############ge_db_get_items_list Error code: %d#################\n", ret);
+       if(ret < 0)
+       {
+               ge_dbg("ge_db_get_items_list ERROR, return!");
+               return ret;
+       }
+
+       cnt = ge_db_get_count_all();
+       ge_dbg("Grid view all medias count: %d", cnt);
+
+
+       /* From (GL_FIRST_VIEW_END_POS + 2)th item to last one */
+       i = GE_FIRST_VIEW_END_POS + 2;
+
+       for(; i <= cnt; i++)
+       {
+               ge_db_get_item_by_index(&gitem, i);
+               if(gitem == NULL || gitem->item == NULL ||
+                  gitem->item->uuid == NULL) {
+                       ge_dbgE("Invalid gitem, continue...");
+                       continue;
+               }
+
+               if(!gitem->item->file_url)
+               {
+                       ge_dbg("file_url is invalid.");
+                       ge_db_del_media_id(ugd, gitem->item->uuid);
+                       ge_db_selected_list_remove(gitem);
+                       ge_db_item_list_remove(gitem);
+                       cnt--;
+                       i--;
+                       gitem = NULL;
+                       continue;
+               }
+
+               gitem->elm_item = elm_gengrid_item_append(ugd->thumbs_view, &gic, gitem, _ge_grid_sel, gitem);
+               item_cnt++;
+       }
+
+       ge_dbg("\n\n<<<<<<<<Use idler to append other medias--Done<<<<<<<<<\n");
+       if(item_cnt == 0)
+       {
+               return -1;
+       }
+       else
+       {
+               ge_grid_item_cnt = item_cnt + GE_FIRST_VIEW_END_POS + 1;
+               ge_dbg("All count appended: %d", ge_grid_item_cnt);
+               return 0;
+       }
+}
+
+Evas_Object* ge_grid_create_view(ge_ugdata* ugd, Evas_Object *parent)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(parent);
+       GE_CHECK_NULL(ugd);
+       int item_w = 0;
+       int item_h = 0;
+       int icon_size = 0;
+       Evas_Object *grid = elm_gengrid_add(parent);
+       GE_CHECK_NULL(grid);
+       double scale_factor = ugd->win_scale;
+       item_w = (int)(GE_GRID_ITEM_SIZE_W * scale_factor);
+       item_h = (int)(GE_GRID_ITEM_SIZE_H * scale_factor);
+       icon_size = (int)(GE_GRID_ICON_SIZE * scale_factor);
+       ge_dbg("Own scale: %f, elm_config_scale_get =%f", scale_factor, elm_config_scale_get());
+
+       if(!_ge_grid_create_thumb(ugd, grid)) {
+               evas_object_del(grid);
+               grid = NULL;
+
+               ugd->nocontents = ge_ui_create_nocontents(ugd);
+               evas_object_show (ugd->nocontents);
+
+               return ugd->nocontents;
+       } else {
+               ge_dbg("ge_grid_item_cnt : %d", ge_grid_item_cnt);
+               if(ge_grid_item_cnt == GE_GRID_ITEM_ZOOM_LEVEL_01_CNT) {
+                       item_w *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+                       item_h *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+                       icon_size *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+               } else if(ge_grid_item_cnt <= GE_GRID_ITEM_ZOOM_LEVEL_02_CNT) {
+                       item_w *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+                       item_h *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+                       icon_size *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+               }
+
+               ugd->icon_size = icon_size;
+               evas_object_show (grid);
+       }
+
+
+       elm_gengrid_item_size_set(grid, item_w, item_h);
+       ge_dbg("Gengrid item w: %d, h: %d.", item_w, item_h);
+       elm_gengrid_align_set(grid, 0.5, 0.0);
+       elm_gengrid_horizontal_set(grid, EINA_FALSE);
+       elm_gengrid_bounce_set(grid, EINA_FALSE, EINA_TRUE);
+       elm_gengrid_multi_select_set(grid, EINA_TRUE);
+
+       evas_object_smart_callback_add(grid, "selected", _ge_grid_selected, NULL);
+       evas_object_smart_callback_add(grid, "unselected", _ge_grid_unselected, NULL);
+       evas_object_smart_callback_add(grid, "clicked", _ge_grid_clicked, NULL);
+       evas_object_smart_callback_add(grid, "longpressed", _ge_grid_longpress, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,up", _ge_grid_drag_up, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,right", _ge_grid_drag_right, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,down", _ge_grid_drag_down, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,left", _ge_grid_drag_left, NULL);
+       evas_object_smart_callback_add(grid, "drag,stop", _ge_grid_drag_stop, NULL);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return grid;
+}
+
+int ge_grid_clear_view(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       if(ugd->file_select_mode == GE_File_Select_One)
+       {
+               bundle_del(ugd->bundle, GE_FILE_SELECT_RETURN_PATH);
+       }
+
+       if(ugd->thumbs_view)
+       {
+               if(ugd->thumbs_nocontents != ugd->thumbs_view)
+                       ge_grid_del_callbacks(ugd);
+
+               evas_object_del(ugd->thumbs_view);
+               ugd->thumbs_view = NULL;
+               ugd->thumbs_nocontents = NULL;
+               ugd->thumbs_nf_it = NULL;
+       }
+
+       return 0;
+}
+int ge_grid_update_view(ge_ugdata *ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       if(_ge_grid_create_thumb(ugd, ugd->thumbs_view) == EINA_FALSE) {
+               ge_grid_del_callbacks(ugd);
+       } else {
+               double scale_factor = ugd->win_scale;
+               int item_w = (int)(GE_GRID_ITEM_SIZE_W * scale_factor);
+               int item_h = (int)(GE_GRID_ITEM_SIZE_H * scale_factor);
+               int icon_size = (int)(GE_GRID_ICON_SIZE * scale_factor);
+
+               ge_dbg("ge_grid_item_cnt : %d", ge_grid_item_cnt);
+               if(ge_grid_item_cnt == GE_GRID_ITEM_ZOOM_LEVEL_01_CNT) {
+                       item_w *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+                       item_h *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+                       icon_size *= GE_GRID_ITEM_ZOOM_LEVEL_01;
+               } else if(ge_grid_item_cnt <= GE_GRID_ITEM_ZOOM_LEVEL_02_CNT) {
+                       item_w *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+                       item_h *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+                       icon_size *= GE_GRID_ITEM_ZOOM_LEVEL_02;
+               }
+
+               ugd->icon_size = icon_size;
+               elm_gengrid_item_size_set(ugd->thumbs_view, item_w, item_h);
+       }
+
+       return 0;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-ui-util.c b/libug/libug-gallery-efl/src/ge-ui-util.c
new file mode 100755 (executable)
index 0000000..79b89a5
--- /dev/null
@@ -0,0 +1,554 @@
+/*
+  * 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://www.tizenopensource.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 "ge-ui-util.h"
+#include "ge-util.h"
+#include "ge-ext-ug-load.h"
+#include "ge-button.h"
+#include "ge-gridview.h"
+#include "ge-albums.h"
+#include "ge-debug.h"
+#include "ge-db-handler.h"
+#include "ge-strings.h"
+
+
+#define HOME_ALBUM_COVER_NUM 1
+#define GE_NOBUT_EXIT_POPUP_HIDE_TIME_DELAY 3.0
+#define GE_SELINFO_HIDE_TIME_DELAY 3.0
+#define GE_CTRLBAR_STYLE_NAVIFRAME "naviframe"
+#define GE_BUTTON_STYLE_NAVIBAR_PRE "naviframe/back_btn/gallery_efl"
+#define GE_NAVIFRAME_PREB_BTN "prev_btn" //ELM_NAVIFRAME_ITEM_PREV_BTN
+#define GE_NAVIFRAME_CONTROLBAR "controlbar" //ELM_NAVIFRAME_ITEM_CONTROLBAR
+
+static void _ge_ui_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("event_info: %d", (int)event_info);
+       GE_CHECK(data);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+       ge_dbg("popup mode: %d", ugd->popup_mode);
+
+       if(ugd->popup_mode == GE_Popup_UgExit)
+       {
+               ug_destroy_me(ugd->ug);
+       }
+
+       evas_object_del(ugd->popup);
+       ugd->popup = NULL;
+}
+
+static Eina_Bool __ge_popup_timeout_cb(void *data)
+{
+       GE_CHECK_FALSE(data);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+       if (ugd->del_timer) {
+               ecore_timer_del(ugd->del_timer);
+               ugd->del_timer = NULL;
+       }
+
+       if (ugd->popup) {
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int __ge_popup_add_timer(void *data, double to_inc)
+{
+       GE_CHECK_VAL(data, -1);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+       if (ugd->del_timer) {
+               ecore_timer_del(ugd->del_timer);
+               ugd->del_timer = NULL;
+       }
+
+       ugd->del_timer = ecore_timer_add(to_inc, __ge_popup_timeout_cb, data);
+       return 0;
+}
+
+static void __ge_ui_done_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(data);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+       int i;
+
+       if(ugd->file_select_mode) //file selection mode
+       {
+               ge_item* sel_item = NULL;
+               char* filepath_arg = NULL;
+               int sel_cnt = ge_db_selected_list_count();
+
+               if(sel_cnt == 0)
+               {
+                       ge_dbg("No thumbs selected, return!");
+                       ge_ui_create_popup(ugd, GE_Popup_NoButton, GE_POPUP_NO_FILES_SELECTED);
+                       return;
+               }
+
+               if(ugd->file_select_mode == GE_File_Select_Multiple)
+               {
+                       GString* selected_path = g_string_new(NULL);
+
+                       for( i = 1; i <= sel_cnt; i++ )
+                       {
+                               ge_db_get_selected_item_by_index(&sel_item, i);
+                               if(sel_item && sel_item->item)
+                               {
+                                       ge_dbg("Selected [%s]", sel_item->item->file_url);
+                                       g_string_append(selected_path, sel_item->item->file_url);
+                                       g_string_append_c(selected_path, ';');
+                               }
+                       }
+                       int str_len = strlen(selected_path->str);
+                       ge_dbg("path string length = %d", str_len);
+                       g_string_truncate(selected_path, str_len - 1);
+
+                       filepath_arg = g_string_free(selected_path, false);
+
+                       char t_str[32] = {0,};
+                       eina_convert_itoa(sel_cnt, t_str);
+
+                       bundle_add(ugd->bundle, GE_FILE_SELECT_RETURN_COUNT, t_str);
+                       bundle_add(ugd->bundle, GE_FILE_SELECT_RETURN_PATH, filepath_arg);
+                       ug_send_result(ugd->ug, ugd->bundle);
+
+                       if(filepath_arg)
+                       {
+                               g_free(filepath_arg);
+                               filepath_arg = NULL;
+                       }
+               }
+
+               ge_db_selected_list_finalize();
+
+               ug_destroy_me(ugd->ug);
+       }
+}
+
+static void _ge_ui_selinfo_destroy_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GE_CHECK(data);
+       ge_ugdata *ad = (ge_ugdata *)data;
+
+       ge_ui_destroy_selinfo(ad);
+}
+
+static int __ge_ui_disable_done_item(ge_ugdata *ugd, bool disabled)
+{
+       ge_dbg("Disable Done item(%d)?", disabled);
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(ugd->thumbs_nf_it, -1);
+
+       Evas_Object *cbar = NULL;
+       cbar = elm_object_item_part_content_get(ugd->thumbs_nf_it,
+                                               GE_NAVIFRAME_CONTROLBAR);
+       GE_CHECK_VAL(cbar, -1);
+       Elm_Object_Item *cbar_it = NULL;
+       cbar_it = elm_toolbar_first_item_get(cbar);
+       GE_CHECK_VAL(cbar_it, -1);
+       elm_object_item_disabled_set(cbar_it, disabled);
+       return 0;
+}
+
+static int __ge_ui_append_object_item(Evas_Object *cbar, Evas_Object *object)
+{
+       Elm_Object_Item *item = elm_toolbar_item_append(cbar, NULL, NULL, NULL, NULL);
+       if (object)
+               elm_object_item_part_content_set(item, "object", object);
+       else
+               elm_object_item_disabled_set(item, EINA_TRUE);
+       return 0;
+}
+
+static void _ge_ui_destroy_me_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(data);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+
+       if (_ge_get_view_mode() != GE_AlbumsView_Mode) {
+               if(ugd->file_select_mode == GE_File_Select_Multiple) {
+                       ge_ui_destroy_selinfo(ugd);
+                       ge_db_selected_list_finalize();
+               }
+               ge_grid_clear_view(ugd);
+       }
+
+       bundle_add(ugd->bundle, GE_FILE_SELECT_RETURN_QUIT, GE_FILE_SELECT_QUIT_STATE);
+       ug_send_result(ugd->ug, ugd->bundle);
+
+       ug_destroy_me(ugd->ug);
+}
+
+static void _ge_ui_back_to_albums_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ge_dbg("");
+       GE_CHECK(data);
+       ge_ugdata *ugd = (ge_ugdata *)data;
+
+       ge_albums_back_to_view(ugd);
+}
+
+int ge_ui_create_title_and_push(ge_ugdata *ugd, Evas_Object* parent,
+                               Evas_Object* obj, NaviTitleMode mode,
+                               char* title)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(parent, -1);
+       GE_CHECK_VAL(obj, -1);
+       GE_CHECK_VAL(title, -1);
+       Elm_Object_Item *nf_it = NULL;
+
+       if (mode == AlbumsView_Title) {
+               ge_dbg("AlbumsView_Title");
+               /* Add cancel button */
+               Evas_Object *cancel_btn = NULL;
+               cancel_btn = elm_button_add(obj);
+               GE_CHECK_VAL(cancel_btn, -1);
+               if(ugd->th)
+                       elm_object_theme_set(cancel_btn, ugd->th);
+               elm_object_style_set(cancel_btn, GE_BUTTON_STYLE_NAVIBAR_PRE);
+               evas_object_smart_callback_add(cancel_btn, "clicked",
+                                              _ge_ui_destroy_me_cb, ugd);
+               nf_it = elm_naviframe_item_push(parent, title, cancel_btn, NULL,
+                                               obj, NULL);
+       } else if(mode == ThumbnailView_Title) {
+               if(ugd->file_select_mode == GE_File_Select_None) {
+                       ge_dbgE("file_select_mode == GE_File_Select_None!");
+                       return -1;
+               }
+
+               ge_dbg("ThumbnailView_Title");
+#if 1
+               nf_it = elm_naviframe_top_item_get(parent);
+               /* For the instant transition, use the xxx_insert_after API */
+               nf_it = elm_naviframe_item_insert_after(parent, nf_it, title,
+                                                       NULL, NULL, obj, NULL);
+#else
+               nf_it = elm_naviframe_item_push(parent, title, NULL, NULL, obj,
+                                               NULL);
+#endif
+               /* Set pre_btn style to back button */
+               Evas_Object *back_btn = NULL;
+               back_btn = elm_object_item_part_content_get(nf_it,
+                                                           GE_NAVIFRAME_PREB_BTN);
+               if(ugd->th)
+                       elm_object_theme_set(back_btn, ugd->th);
+               elm_object_style_set(back_btn, GE_BUTTON_STYLE_NAVIBAR_PRE);
+               evas_object_smart_callback_add(back_btn, "clicked",
+                                              _ge_ui_back_to_albums_cb, ugd);
+
+               /**
+                * Add  'Done' item.
+                */
+               if ((ugd->file_select_mode != GE_File_Select_One) &&
+                   (_ge_get_view_mode() == GE_ThumbnailEdit_Mode)) {
+                       ge_dbg("Multiple selection, show Done");
+                       /* create tool controlbar downside */
+                       Evas_Object *bot_bar = NULL;
+                       bot_bar = elm_toolbar_add(parent);
+                       GE_CHECK_VAL(bot_bar, -1);
+                       elm_toolbar_shrink_mode_set(bot_bar, ELM_TOOLBAR_SHRINK_EXPAND);
+                       elm_toolbar_homogeneous_set(bot_bar, EINA_FALSE);
+                       elm_object_style_set(bot_bar, GE_CBAR_STYLE_DEFAULT);
+                       /* add 'Done' item */
+                       Elm_Object_Item *done_it = NULL;
+                       done_it = elm_toolbar_item_append(bot_bar,
+                                                         GE_CBAR_ICON_DONE,
+                                                         NULL, __ge_ui_done_cb,
+                                                         ugd);
+                       elm_object_item_disabled_set(done_it, EINA_TRUE);
+                       /* add empty item */
+                       __ge_ui_append_object_item(bot_bar, NULL);
+                       __ge_ui_append_object_item(bot_bar, NULL);
+                       __ge_ui_append_object_item(bot_bar, NULL);
+                       /* Set tool bar to bottom */
+                       elm_object_item_part_content_set(nf_it,
+                                                        GE_NAVIFRAME_CONTROLBAR,
+                                                        bot_bar);
+               }
+               ugd->thumbs_nf_it = nf_it;
+       }
+
+       return 0;
+}
+
+Evas_Object* ge_ui_load_edj(Evas_Object *parent, const char *file, const char *group)
+{
+       GE_CHECK_NULL(parent);
+       GE_CHECK_NULL(file);
+       GE_CHECK_NULL(group);
+       Evas_Object *eo;
+       int r;
+
+       eo = elm_layout_add(parent);
+       if (eo)
+       {
+               r = elm_layout_file_set(eo, file, group);
+               if (!r)
+               {
+                       evas_object_del(eo);
+                       return NULL;
+               }
+
+               evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       }
+
+       return eo;
+}
+
+Evas_Object* ge_ui_create_nocontents(ge_ugdata* ugd)
+{
+       GE_CHECK_NULL(ugd);
+       Evas_Object *layout = NULL;
+       char label_str[GE_NOCONTENTS_LABEL_LEN_MAX] ={0,};
+
+       /* Full nocontents view layout */
+       layout = elm_layout_add (ugd->navi_bar);
+       GE_CHECK_NULL(layout);
+       elm_layout_file_set (layout, GE_EDJ_FILE, GE_GRP_NOCONTENTS);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+
+       if(ugd->ug_exit_mode == GE_UG_EXIT_NONE) {
+               if(_ge_get_view_mode() == GE_ThumbnailView_Mode ||
+                  _ge_get_view_mode() == GE_ThumbnailEdit_Mode) {
+                       if(ugd->file_type_mode) {
+                               if (ugd->file_type_mode == GE_File_Select_Type_Image)
+                                       snprintf(label_str, sizeof(label_str), "%s",
+                                                (char*)(_GE_GETSYSTEMSTR("IDS_COM_BODY_NO_IMAGES")));
+                               else if (ugd->file_type_mode == GE_File_Select_Type_Video)
+                                       snprintf(label_str, sizeof(label_str),
+                                                "%s", (char*)GE_LABEL_NO_VIDEOS);
+                               else
+                                       snprintf(label_str, sizeof(label_str), "%s",
+                                                (char*)(_GE_GETSYSTEMSTR("IDS_COM_BODY_NO_ITEMS")));
+                       } else {
+                               snprintf(label_str, sizeof(label_str), "%s",
+                                        (char*)(_GE_GETSYSTEMSTR("IDS_COM_BODY_NO_ITEMS")));
+                       }
+               } else if(_ge_get_view_mode() == GE_AlbumsView_Mode) {
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char*)GE_LABEL_NO_ALBUMS);
+               } else {
+                       ge_dbgE("view mode is error.");
+               }
+       } else {
+               snprintf(label_str, sizeof(label_str), "%s<br>%s",
+                        (char*)(_GE_GETSYSTEMSTR("IDS_COM_BODY_NO_CONTENTS")),
+                        (char*)GE_UNABLE_USE_IN_UMS_MODE);
+       }
+
+       ge_dbg("\nNocontents label: %s", label_str);
+       /* Full nocontents view layout */
+       layout = elm_layout_add(ugd->navi_bar);
+       GE_CHECK_NULL(layout);
+       elm_object_part_text_set(layout, "elm.text", label_str);
+       elm_layout_theme_set(layout, "layout", "nocontents", "gallery_efl");
+
+       return layout;
+}
+
+Evas_Object* ge_ui_create_main_ly(ge_ugdata* ugd, Evas_Object* parent)
+{
+       GE_CHECK_NULL(ugd);
+       GE_CHECK_NULL(parent);
+       Evas_Object *layout = NULL;
+
+       layout = elm_layout_add(parent);
+       GE_CHECK_NULL(layout);
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, layout);
+       evas_object_show(layout);
+
+       return layout;
+}
+
+Evas_Object* ge_ui_create_navibar(ge_ugdata* ugd, Evas_Object* parent)
+{
+       GE_CHECK_NULL(ugd);
+       GE_CHECK_NULL(parent);
+       Evas_Object *navi_bar = NULL;
+
+       navi_bar = elm_naviframe_add(parent);
+       GE_CHECK_NULL(navi_bar);
+
+       if(ugd->th)
+       {
+               elm_object_theme_set(navi_bar, ugd->th);
+       }
+       elm_object_style_set(navi_bar, GE_NAVIFRAME_STYLE_DEFAULT);
+       elm_object_part_content_set(parent, "elm.swallow.content", navi_bar);
+
+       evas_object_show(navi_bar);
+
+       return navi_bar;
+}
+
+Evas_Object *ge_ui_create_popup(ge_ugdata* ugd, GE_PopupMode mode, char* desc)
+{
+       ge_dbg("");
+       GE_CHECK_NULL(ugd);
+       GE_CHECK_NULL(desc);
+
+       if(ugd->popup)
+       {
+               ge_dbg("The existed popup is deleted");
+               evas_object_del(ugd->popup);
+               ugd->popup = NULL;
+       }
+
+       Evas_Object *popup = NULL;
+
+       popup = elm_popup_add(ugd->ly_main);
+       GE_CHECK_NULL(popup);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, desc);
+
+       switch (mode) {
+       case GE_Popup_NoButton:
+       case GE_Popup_UgExit:
+               __ge_popup_add_timer(ugd, GE_NOBUT_EXIT_POPUP_HIDE_TIME_DELAY);
+               break;
+       case GE_Popup_OneButton:
+       {
+               Evas_Object *btn = NULL;
+               btn = _ge_but_create_but(popup, GE_BUT_OK, _ge_ui_response_cb,
+                                        ugd);
+               elm_object_part_content_set(popup, "button1", btn);
+               break;
+       }
+       case GE_Popup_TwoButton:
+       {
+               Evas_Object *btn1 = NULL;
+               btn1 = _ge_but_create_but(popup, GE_BUT_OK, _ge_ui_response_cb,
+                                         ugd);
+               elm_object_part_content_set(popup, "button1", btn1);
+               Evas_Object *btn2 = NULL;
+               btn2 = _ge_but_create_but(popup, GE_BUT_CANCEL,
+                                          _ge_ui_response_cb, ugd);
+               elm_object_part_content_set(popup, "button2", btn2);
+               break;
+       }
+       default:
+               ge_dbgE("mode is not supported...");
+               break;
+       }
+
+       evas_object_show(popup);
+
+       ugd->popup = popup;
+       ugd->popup_mode = mode;
+
+       return popup;
+}
+
+int ge_ui_create_selinfo(ge_ugdata* ugd, Evas_Object* parent)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(parent, -1);
+       int count = 1;
+       int all_count = 0;
+       char text[GE_SELINFO_TEXT_LEN_MAX] = {0,};
+
+       count = ge_db_selected_list_count();
+       if(count <= 0)
+       {
+               __ge_ui_disable_done_item(ugd, true);
+               if(ugd->file_select_mode == GE_File_Select_Multiple)
+               {
+                       ge_ui_destroy_selinfo(ugd);
+               }
+               ge_dbg("@@@[Warning] no item selected@@@");
+               return -1;
+       }
+
+       __ge_ui_disable_done_item(ugd, false);
+
+       if(ugd->file_select_mode == GE_File_Select_One)
+       {
+               return -1;
+       }
+
+       all_count = ge_db_get_count_all();
+       ge_dbg("New count , all count : %d,%d", count, all_count);
+
+       ge_ui_destroy_selinfo(ugd);
+       ugd->selectioninfo = elm_notify_add(parent);
+       GE_CHECK_VAL(ugd->selectioninfo, -1);
+       elm_notify_orient_set(ugd->selectioninfo, ELM_NOTIFY_ORIENT_BOTTOM);
+       evas_object_size_hint_weight_set(ugd->selectioninfo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ugd->selectioninfo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_smart_callback_add(ugd->selectioninfo, "timeout", _ge_ui_selinfo_destroy_cb, ugd);
+       elm_notify_timeout_set(ugd->selectioninfo, GE_SELINFO_HIDE_TIME_DELAY);
+
+       ugd->selectioninfo_ly = elm_layout_add(parent);
+       GE_CHECK_VAL(ugd->selectioninfo_ly, -1);
+       if(ugd->th)
+       {
+               elm_object_theme_set(ugd->selectioninfo_ly, ugd->th);
+       }
+       elm_layout_theme_set(ugd->selectioninfo_ly, "standard", "selectioninfo", "ug_selectioninfo_viewer");
+
+       evas_object_size_hint_weight_set(ugd->selectioninfo_ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ugd->selectioninfo_ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_content_set(ugd->selectioninfo,ugd->selectioninfo_ly);
+
+       /* Add Space */
+       snprintf(text, sizeof(text), "%s (%d)", GE_SELINFO_SELECTED, count);
+       text[strlen(text)] = '\0';
+
+       edje_object_signal_emit(_EDJ(ugd->thumbs_view_ly), "elm,thumb_view,state,moveup", "elm");/* move view up while selection view shown.*/
+       edje_object_part_text_set(_EDJ(ugd->selectioninfo_ly), "elm.text", text);
+       evas_object_show(ugd->selectioninfo);
+
+       return 0;
+}
+
+int ge_ui_destroy_selinfo(ge_ugdata* ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       GE_CHECK_VAL(ugd->thumbs_view_ly, -1);
+
+       edje_object_signal_emit(_EDJ(ugd->thumbs_view_ly), "elm,thumb_view,state,default", "elm");/* reset view to default status.*/
+       if(ugd->file_select_mode != GE_File_Select_One && ugd->selectioninfo)
+       {
+               evas_object_smart_callback_del(ugd->selectioninfo, "timeout", _ge_ui_selinfo_destroy_cb);
+       }
+
+       if(ugd->selectioninfo_ly)
+       {
+               evas_object_del(ugd->selectioninfo_ly);
+               ugd->selectioninfo_ly = NULL;
+       }
+
+       if(ugd->selectioninfo)
+       {
+               evas_object_del(ugd->selectioninfo);
+               ugd->selectioninfo = NULL;
+       }
+
+       return 0;
+}
+
diff --git a/libug/libug-gallery-efl/src/ge-util.c b/libug/libug-gallery-efl/src/ge-util.c
new file mode 100755 (executable)
index 0000000..92b7ab9
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+  * 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://www.tizenopensource.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 <errno.h>
+#include "ge-debug.h"
+#include "ge-albums.h"
+#include "ge-gridview.h"
+#include "ge-db-handler.h"
+#include "ge-util.h"
+#include "ge-ui-util.h"
+
+#define GE_TIMER_INTERVAL_UMS_UPDATE 2.0
+
+/* Global evas objects, which is used in the entire application */
+
+static ge_item* ge_current_mb_item;
+static ge_cluster* ge_current_album_item;
+static int ge_ug_iv_enter = 0;
+
+ge_item* _ge_get_current_item(void)
+{
+       return ge_current_mb_item;
+}
+
+void _ge_set_current_item(ge_item* gitem)
+{
+       ge_current_mb_item = gitem;
+}
+
+ge_cluster* _ge_get_current_album(void)
+{
+       return ge_current_album_item;
+}
+
+void _ge_set_current_album(ge_cluster* album_item)
+{
+       ge_current_album_item = album_item;
+}
+
+int _ge_ug_iv_get(void)
+{
+       return ge_ug_iv_enter;
+}
+
+void _ge_ug_iv_set(int ug_iv_state)
+{
+       ge_ug_iv_enter = ug_iv_state;
+}
+
+static int _ge_refresh_albums_list(ge_ugdata *ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       ge_cluster* old_cur_cluster = _ge_get_current_album();
+       char cluster_id[GE_MTYPE_ITEN_ID_LEN_MAX] = { 0, };
+       int i = 0;
+       ge_cluster *current = NULL;
+       bool b_get_cur_album = false;
+
+       if(old_cur_cluster && old_cur_cluster->cluster &&
+          old_cur_cluster->cluster->uuid)
+       {
+               g_strlcpy(cluster_id, old_cur_cluster->cluster->uuid,
+                         GE_MTYPE_ITEN_ID_LEN_MAX);
+               b_get_cur_album = true;
+       }
+       else
+       {
+               ge_dbg("None album selected, current album is unavailable\n");
+       }
+       ge_db_get_clusters_list(ugd);
+
+       GE_CHECK_VAL(ugd->cluster_list, -1);
+       int length = eina_list_count(ugd->cluster_list->clist);
+       ge_dbg("album length: %d, current album id: %s", length, cluster_id);
+
+       //need to reset current cluster
+       _ge_set_current_album(NULL);
+       if(b_get_cur_album)
+       {
+               for (i = 0; i < length; i++)
+               {
+                       current = eina_list_nth(ugd->cluster_list->clist, i);
+                       if(current && current->cluster &&
+                          current->cluster->uuid) {
+                               ge_dbg("current album : %s", current->cluster->display_name);
+                       } else {
+                               ge_dbgE("Current is NULL");
+                               break;
+                       }
+                       if(!g_strcmp0(current->cluster->uuid, cluster_id))
+                       {
+                               ge_db_update_items_list(ugd, current);
+                               ugd->cluster_list->cur_pos = i;
+                               _ge_set_current_album(current);
+                               return 0;
+                       }
+               }
+               /* Current album was removed, clear items list */
+               if (ge_db_selected_list_get())
+                       ge_db_selected_list_finalize();
+               ge_db_clear_items_list();
+       }
+
+       return -1;
+}
+
+static void _ge_db_update_noti_cb(keynode_t *key, void* data)
+{
+       ge_dbgW("VCONFKEY_FILEMANAGER_DB_STATUS changed!");
+       GE_CHECK(data);
+       ge_ugdata* ugd = (ge_ugdata*)data;
+       int mmc_state = -1;
+       int mode = GE_UPDATE_NONE;
+
+       vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state);
+       if(mmc_state == -1) {
+               ge_dbgE("vconf_get_int failed!");
+               return;
+       }
+
+       if (mmc_state == VCONFKEY_SYSMAN_MMC_MOUNTED) {
+               ge_dbg("mmc_state[%d]: VCONFKEY_SYSMAN_MMC_MOUNTED", mmc_state);
+               mode = GE_UPDATE_MMC_ADDED;
+       } else if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED ||
+                  mmc_state == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED) {
+               ge_dbg("mmc_state[%d]: VCONFKEY_SYSMAN_MMC_REMOVED", mmc_state);
+               mode = GE_UPDATE_MMC_REMOVED;
+       }
+
+       if (ugd->ums_update_timer) {
+               /**
+               * MMC noti callback also would be invoked
+               * if USB disconnected in UMS mode,
+               * Return to prevent from refreshing view twice.
+               */
+               ge_dbgW("View would be update in _ge_ums_update_timer_cb.");
+               return;
+       }
+       /* Update view */
+       ge_update_view(ugd, mode);
+}
+
+static Eina_Bool _ge_ums_update_timer_cb(void *data)
+{
+       ge_dbg("Timer callback invoked, try to update view.");
+       GE_CHECK_CANCEL(data);
+       ge_ugdata* ugd = (ge_ugdata*)data;
+
+       ge_update_view(ugd, GE_UPDATE_NORMAL);
+
+       GE_DEL_TIMER(ugd->ums_update_timer)
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _ge_ums_noti_cb(keynode_t *key, void* data)
+{
+       ge_dbg("");
+       int ums_mode = -1;
+       ge_ugdata* ugd = (ge_ugdata*)data;
+       GE_CHECK(ugd);
+       GE_CHECK(ugd->ug);
+
+       vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &ums_mode);
+       if (ums_mode == -1) {
+               ge_dbgE("Error when check MASS STORAGE Status");
+               return;
+       }
+
+       if (ums_mode == VCONFKEY_USB_STORAGE_STATUS_UMS_ON ||
+           ums_mode == VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON) {
+               ge_dbg("VCONFKEY_USB_STORAGE_STATUS_UMS_ON");
+               /* Destroy UG if UMS on */
+               ugd->ug_exit_mode = GE_UG_EXIT_MASS_STORAGE;
+               ug_destroy_me(ugd->ug);
+       } else if (ums_mode == VCONFKEY_USB_STORAGE_STATUS_OFF) {
+               ge_dbg("VCONFKEY_USB_STORAGE_STATUS_OFF,update view in 2secs.");
+               /**
+               * Update view in 2 seconds,
+               * media-server scan file system and insert records to DB,
+               * it takes some time.
+               */
+               ugd->ug_exit_mode = GE_UG_EXIT_NONE;
+               Ecore_Timer *ums_timer = NULL;
+               GE_DEL_TIMER(ugd->ums_update_timer)
+               ums_timer = ecore_timer_add(GE_TIMER_INTERVAL_UMS_UPDATE,
+                                           _ge_ums_update_timer_cb, data);
+               ugd->ums_update_timer = ums_timer;
+       }
+}
+
+Eina_Bool ge_update_view(ge_ugdata* ugd, int mode)
+{
+       ge_dbg("mode: %d", mode);
+       GE_CHECK_FALSE(ugd);
+       int view_mode = _ge_get_view_mode();
+       ge_dbg("view_mode: %d", view_mode);
+
+       if (view_mode == GE_AlbumsView_Mode)
+       {
+               _ge_refresh_albums_list(ugd);
+               ge_albums_update_view(ugd);
+       }
+       else if (view_mode == GE_ThumbnailView_Mode)
+       {
+               _ge_refresh_albums_list(ugd);
+               if(_ge_get_current_album() == NULL)
+               {
+                       ge_dbg("current album is empty, back to albums view!");
+                       ge_albums_back_to_view(ugd);
+                       elm_naviframe_item_pop(ugd->navi_bar);
+
+                       return EINA_FALSE;
+               }
+
+               ge_grid_update_view(ugd);
+       }
+       else if (view_mode == GE_ThumbnailEdit_Mode)
+       {
+               ge_cluster* cur_album = _ge_get_current_album();
+
+               /* MMC removed */
+               if(mode == GE_UPDATE_MMC_REMOVED && cur_album &&
+                  cur_album->cluster &&
+                  cur_album->cluster->type == MINFO_MMC) {
+                       ge_dbgW("MMC album, change to albums view!");
+                       _ge_refresh_albums_list(ugd);
+                       ge_albums_back_to_view(ugd);
+                       elm_naviframe_item_pop(ugd->navi_bar);
+                       return EINA_FALSE;
+               }
+
+               /* Update albums list and items list */
+               _ge_refresh_albums_list(ugd);
+               if(ge_db_get_count_all() <= 0) {
+                       ge_dbgW("current album is empty, back to albums view!");
+                       ge_albums_back_to_view(ugd);
+                       elm_naviframe_item_pop(ugd->navi_bar);
+                       return EINA_FALSE;
+               }
+
+               ge_grid_update_view(ugd);
+
+               if(ge_db_get_count_all() <= 0) {
+                       ge_dbgW("current album is empty, back to albums view!");
+                       ge_albums_back_to_view(ugd);
+                       elm_naviframe_item_pop(ugd->navi_bar);
+                       return EINA_FALSE;
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+int ge_reg_db_update_noti(ge_ugdata* ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       int error_code = 0;
+
+       error_code = vconf_notify_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS,
+                                             _ge_db_update_noti_cb, ugd);
+       if(error_code == -1)
+               ge_dbgE("vconf_notify_key_changed FAIL!");
+
+       return 0;
+}
+
+int ge_dereg_db_update_noti(void)
+{
+       ge_dbg("");
+       int error_code = -1;
+
+       error_code = vconf_ignore_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS,
+                                             _ge_db_update_noti_cb);
+       if(error_code == -1)
+               ge_dbgE("vconf_ignore_key_changed FAIL!");
+
+       return 0;
+}
+
+int ge_reg_ums_noti(ge_ugdata* ugd)
+{
+       GE_CHECK_VAL(ugd, -1);
+       int error_code = 0;
+
+       error_code = vconf_notify_key_changed(VCONFKEY_USB_STORAGE_STATUS,
+                                             _ge_ums_noti_cb, ugd);
+       if(error_code == -1) {
+               ge_dbgE("vconf_notify_key_changed FAIL!");
+       }
+
+       return 0;
+}
+
+int ge_dereg_ums_noti(void)
+{
+       int error_code = -1;
+
+       error_code = vconf_ignore_key_changed(VCONFKEY_USB_STORAGE_STATUS,
+                                             _ge_ums_noti_cb);
+       if (error_code == -1)
+               ge_dbgE("_gl_vconf_loaded_mass_storage_noti_cb FAIL!");
+
+       return 0;
+}
+
+int ge_get_ums_state(ge_ugdata* ugd)
+{
+       ge_dbg("");
+       GE_CHECK_VAL(ugd, -1);
+       int ums_mode = -1;
+       int exit_mode = GE_UG_EXIT_NONE;
+
+       if(!vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &ums_mode)) {
+               ge_dbg("UMS mode: %d.", ums_mode);
+               if(ums_mode == VCONFKEY_USB_STORAGE_STATUS_UMS_ON ||
+                  ums_mode == VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON) {
+                       ge_dbgW("ums_mode[%d]:  UMS_ON", ums_mode);
+                       /* Usb mass storage mode activated */
+                       exit_mode = GE_UG_EXIT_MASS_STORAGE;
+               }
+       }
+
+       ugd->ug_exit_mode = exit_mode;
+       return 0;
+}
+
+
diff --git a/org.tizen.gallery.desktop.in b/org.tizen.gallery.desktop.in
new file mode 100755 (executable)
index 0000000..d45088a
--- /dev/null
@@ -0,0 +1,26 @@
+Name=Gallery
+Name[en_US] = Gallery
+Name[nl_NL] = Galerij
+Name[de_DE] = Galerie
+Name[zh_HK] = 媒體
+Name[zh_CN] = 相册
+Name[ru_RU] = Галерея
+Name[zh_TW] = 相簿
+Name[ja_JP] = ギャラリー
+Name[es_ES] = Galeria
+Name[el_GR] = Συλλογή
+Name[it_IT] = Galleria
+Name[tr_TR] = Galeri
+Name[pt_PT] = Galeria
+Name[fr_FR] = Galerie
+Name[ko_KR] = 갤러리
+Exec=/opt/apps/org.tizen.gallery/bin/gallery
+Icon=org.tizen.gallery.png
+Type=Application
+Version=0.3.0-1
+MimeType=gallery.uri
+nodisplay=False
+x-tizen-taskmanage=True
+x-tizen-multiple=False
+x-tizen-svc= http://tizen.org/appsvc/operation/pick|NULL|image/*;http://tizen.org/appsvc/operation/pick|NULL|video/*;http://tizen.org/appsvc/operation/pick|NULL|NULL;http://tizen.org/appsvc/operation/view|NULL|NULL
+x-tizen-removable=false
diff --git a/packaging/org.tizen.gallery.spec b/packaging/org.tizen.gallery.spec
new file mode 100755 (executable)
index 0000000..92f12e8
--- /dev/null
@@ -0,0 +1,76 @@
+%define _optdir        /opt
+%define _appdir        %{_optdir}/apps
+%define _ugdir %{_optdir}/ug
+
+Name:       org.tizen.gallery
+Summary:    org.tizen.gallery UX
+Version:    1.0.31
+Release:    1
+Group:      Applications
+License:    Flora Software License
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  cmake
+BuildRequires:  gettext-tools
+BuildRequires:  edje-tools
+BuildRequires:  pkgconfig(appcore-efl)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(eina)
+BuildRequires:  pkgconfig(evas)
+BuildRequires:  pkgconfig(edje)
+BuildRequires:  pkgconfig(evas)
+BuildRequires:  pkgconfig(libmedia-service)
+BuildRequires:  pkgconfig(media-thumbnail)
+BuildRequires:  pkgconfig(ui-gadget)
+BuildRequires:  pkgconfig(gthread-2.0)
+BuildRequires:  pkgconfig(appsvc)
+BuildRequires:  pkgconfig(devman_haptic)
+BuildRequires:  pkgconfig(capi-appfw-application)
+
+%description
+Description: org.tizen.gallery UX
+
+
+%package -n libug-gallery-efl
+Summary:    gallery UG
+Group:      TO_BE/FILLED_IN
+Requires:   %{name} = %{version}-%{release}
+
+%description -n libug-gallery-efl
+Description: gallery UG
+
+
+%prep
+%setup -q
+
+%build
+
+cmake . -DCMAKE_INSTALL_PREFIX=%{_appdir}/org.tizen.gallery
+
+make %{?jobs:-j%jobs}
+
+%install
+%make_install
+
+%find_lang gallery
+%find_lang ug-gallery-efl
+
+%post
+chown -R 5000:5000 %{_appdir}/org.tizen.gallery/data
+
+%files -f gallery.lang
+%{_appdir}/org.tizen.gallery/res/images/*
+%{_appdir}/org.tizen.gallery/res/.decarta/conf.enc
+%{_appdir}/org.tizen.gallery/res/edje/gallery.edj
+%{_appdir}/org.tizen.gallery/res/edje/gl-black-theme.edj
+%{_appdir}/org.tizen.gallery/res/icons/default/small/org.tizen.gallery.png
+%{_appdir}/org.tizen.gallery/data
+%{_appdir}/org.tizen.gallery/bin/gallery
+/opt/share/miregex/gallery.uri
+/opt/share/applications/org.tizen.gallery.desktop
+
+
+%files -n libug-gallery-efl -f ug-gallery-efl.lang
+%{_ugdir}/res/images/gallery-efl/images/*
+%{_ugdir}/res/edje/gallery-efl/gallery-efl.edj
+%{_ugdir}/lib/libug-gallery-efl.so.0.0.1
+%{_ugdir}/lib/libug-gallery-efl.so
diff --git a/res/edc/gallery-edc-res.h b/res/edc/gallery-edc-res.h
new file mode 100755 (executable)
index 0000000..a56bd71
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/* Definition of image path used in edc file */
+
+/* gl-nocontents.edc */
+#define GALLERY_EDC_IMAGE_NOCONTENTS_PIC "T01_Nocontents_picture.png"
+
+/* gl-gengrid-item-albums.edc */
+#define        GALLERY_EDC_IMAGE_GRID_EDIT_TEXT_BG                             "00_grid_edit_text_bg.png"
+#define        GALLERY_EDC_IMAGE_MAIN_FOLDER_BG                                        "T01_main_folder_bg.png"
+
+/* gl-gengrid-item-thumbview.edc */
+#define        GALLERY_EDC_IMAGE_BUTTON_PLAY                                           "T01_btn_play.png"
+/* Fixme: Use custom image, replace it if better image provided by UX */
+#define GALLERY_EDC_IMAGE_THUMBS_BG                                            "T01_thumbs_bg.png"
+
+/* gl-genlist-item-video.edc */
+#define        GALLERY_EDC_IMAGE_VIDEO_LIST_PROGRESS_BG "T01_video_list_progress_bg.png"
+#define        GALLERY_EDC_IMAGE_VIDEO_LIST_PROGRESS_BAR_RECT "T01_video_list_progress_bar.png"
+
+/* gl-navigationbar.edc */
+#define        GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER "naviframe_optionheader.png"
+#define        GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW "naviframe_optionheader_arrow.png"
+
+/* gl-controlbar.edc */
+#define        GALLERY_EDC_IMAGE_CONTROL_TOOLBAR_BG "T01_toolbar_bg.png"
+#define        GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG "T01_control_tabbar_bg.png"
+#define        GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_LEFT "00_winset_control_tabbar_bg_left.png"
+#define        GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_RIGHT "00_winset_control_tabbar_bg_right.png"
+#define        GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_TOP "T01_control_tabbar_bg.png"
+#define        GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_H_TOP "T01_control_tabbar_bg_h.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_PRESS "00_winset_tabbar_press.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_PRESS_LEFT "00_winset_tabbar_press_left.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_PRESS_RIGHT "00_winset_tabbar_press_right.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_PRESS_TOP "00_winset_tabbar_press_top.png"
+#define        GALLERY_EDC_IMAGE_TOOLBAR_PRESS "T01_toolbar_press.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_FOCUS "T01_tabbar_focus.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_FOCUS_LEFT "00_winset_tabbar_focus_left.png"
+#define        GALLERY_EDC_IMAGE_TABBAR_FOCUS_RIGHT "00_winset_tabbar_focus_right.png"
+
+/* gl-button.edc */
+#define        GALLERY_EDC_IMAGE_OPTION_HEADER_BT                                      "T01_Option_header_bt.png"
+#define        GALLERY_EDC_IMAGE_OPTION_HEADER_BT_DIM                          "T01_Option_header_bt_press.png"//"T01_Option_header_bt_dim.png"//Fixme: use right image
+#define        GALLERY_EDC_IMAGE_OPTION_HEADER_BT_PRESS                        "T01_Option_header_bt_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_PREV "00_winset_Back_btn_normal.png"
+#define        GALLERY_EDC_IMAGE_BTN_PREV_PRESS "00_winset_Back_btn_press.png"
+#define        GALLERY_EDC_IMAGE_PREV "00_winset_Back.png"
+#define        GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_NORMAL                          "T01_button_circle_bg_normal.png"
+#define        GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_PRESS                           "T01_button_circle_bg_normal_press.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_RENAME                                         "T01_button_rename.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_RENAME_PRESS                           "00_button_rename_press.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_POPUP_NORMAL                           "00_button_popup_normal.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_POPUP_PRESS                            "00_button_popup_press.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_POPUP_FOCUS                            "00_button_popup_focus.png"
+#define        GALLERY_EDC_IMAGE_BUTTON_POPUP_DIM                                      "00_button_popup_dim.png"
+#define        GALLERY_EDC_IMAGE_BTN_04_NORMAL "00_button_04_normal.png"
+#define        GALLERY_EDC_IMAGE_BTN_04_PRESS "00_button_04_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_04_DIM "00_button_04_dim.png"
+#define        GALLERY_EDC_IMAGE_BTN_TITLE "T01_title_btn.png"
+#define        GALLERY_EDC_IMAGE_BTN_TITLE_PRESS "T01_title_btn_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_01_NORMAL "T01_title_btn.png"
+#define        GALLERY_EDC_IMAGE_BTN_01_PRESS "T01_title_btn_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_01_DIM "T01_title_btn_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_SWEEP "00_button_sweep.png"
+#define        GALLERY_EDC_IMAGE_BTN_SWEEP_PRESS "00_button_sweep_press.png"
+#define        GALLERY_EDC_IMAGE_BTN_SWEEP_DIM "00_button_sweep_dim.png"
+#define        GALLERY_EDC_IMAGE_BTN_GRIDVIEW "T01_btn_gridview.png"
+#define        GALLERY_EDC_IMAGE_BTN_GRIDVIEW_PRESS "T01_btn_gridview_press.png"
+
+/* gl-segment.edc */
+#define        GALLERY_EDC_IMAGE_BTN_SGE_NORMAL "00_winset_btn_sge_normal.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_LEFT "00_winset_btn_sge_normal_left.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_CENTRE "00_winset_btn_sge_normal_centre.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_RIGHT "00_winset_btn_sge_normal_right.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_PRESS_NORMAL "00_winset_btn_sge_press_normal.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_PRESS_01 "00_winset_btn_sge_press_01.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_PRESS_02 "00_winset_btn_sge_press_02.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_PRESS_03 "00_winset_btn_sge_press_03.png"
+#define        GALLERY_EDC_IMAGE_BTN_SGE_BODY "00_winset_btn_sge_body.png"
+
+/* gl-entry.edc */
+#define        GALLERY_EDC_IMAGE_READER_HANDLER_UP                                     "reader_handler_up.png"
+#define        GALLERY_EDC_IMAGE_READER_HANDLER_DOWN                           "reader_handler_down.png"
+#define        GALLERY_EDC_IMAGE_LONGTAP_BLUE                                          "reader_longtap_blue.png"
+#define        GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW                             "magnifier_noarrow.png"
+#define        GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW_LINE                        "magnifier_noarrow_line.png"
+#define        GALLERY_EDC_IMAGE_MAGNIFIER                                     "magnifier.png"
+#define        GALLERY_EDC_IMAGE_MAGNIFIER_LINE                                "magnifier_line.png"
+#define        GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE "00_MessageBubble_BG_receive.png"
+#define        GALLERY_EDC_IMAGE_MSGBUBBLE_SEND "00_MessageBubble_BG_send.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT "copy&paste_Icon_right.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_PRESS "copy&paste_Icon_right_press.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_LEFT "copy&paste_Icon_left.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_PRESS "copy&paste_Icon_left_press.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP "copy&paste_Icon_left_top.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP_PRESS "copy&paste_Icon_left_top_press.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP "copy&paste_Icon_right_top.png"
+#define        GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP_PRESS "copy&paste_Icon_right_top_press.png"
+#define        GALLERY_EDC_IMAGE_BT_SM_BASE2 "bt_sm_base2.png"
+
+/* gl-editfield.edc */
+#define        GALLERY_EDC_IMAGE_FIELD_BTN_DELETE                                      "T01_EditField_clear.png"
+
+/* gl-check.edc */
+#define        GALLERY_EDC_IMAGE_CHECK_BG "T01_checkbox.png"
+#define        GALLERY_EDC_IMAGE_CHECK_ALBUM_BG "T01_checkbox.png"
+#define        GALLERY_EDC_IMAGE_CHECK_BG_DIM "00_check_bg_dim.png"
+#define        GALLERY_EDC_IMAGE_CHECK_BG_CHECKING "T01_check.png"
+#define        GALLERY_EDC_IMAGE_CHECK_ALBUM_BG_CHECKING "T01_check.png"
+#define        GALLERY_EDC_IMAGE_CHECK_GRID "T01_grid_select_check.png"
+
+/* gl-toolbar.edc */
+#define        GALLERY_EDC_IMAGE_SEPARATOR_V "separator_v.png"
diff --git a/res/edc/gallery.edc b/res/edc/gallery.edc
new file mode 100755 (executable)
index 0000000..c8f6ede
--- /dev/null
@@ -0,0 +1,453 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define FONT_ROM       "HelveticaNeue:style=Roman"
+#define FONT_MED       "HelveticaNeue:style=Medium"
+#define INDICATOR_H    27
+#define NAVI_H         67
+#define GALLERY_EDC_COLOR_THEME_GRAY  91 91 91 255
+#define GALLERY_EDC_COLOR_BG  45 45 45 255
+#define ENTRY_H                112
+#define ENTRY_MAX_W            1280
+#define CONTROLBAR_LARGE_HEIGHT_INC 117
+#define CONTROLBAR_SMALL_HEIGHT_INC 98
+
+#include "gallery-edc-res.h"
+
+collections {
+#include "gl-selection-notification.edc"
+#include "gl-genlist-item-video.edc"
+#include "gl-gengrid-item-thumbview.edc"
+#include "gl-gengrid-item-albums.edc"
+#include "gl-button.edc"
+#include "gl-segment.edc"
+#include "gl-entry.edc"
+#include "gl-editfield.edc"
+#include "gl-check.edc"
+#include "gl-nocontents.edc"
+
+       group {
+               name: "gallery/view_layout";
+               parts {
+                       part {
+                               name: "background";
+                               type, RECT;
+                               mouse_events: 0;
+                               description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0; offset: 0 0; }
+                               rel2 { relative: 1.0 1.0; offset: -1 -1; }
+                               color, 0 0 0 0 ;
+                               }
+
+                       }
+
+                       part {
+                               name: "selectall_bg";
+                               type: RECT;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 112;
+                                       fixed: 0 1;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "background"; }
+                                       rel2 { relative: 1.0 0.0; to: "background"; }
+                                       color: 0 0 0 0;
+                               }
+                               description {
+                                       state: "visible" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 37 37 37 153;
+                               }
+                               description {
+                                       state: "visible_video" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 VIDEO_SELECT_ALL_ITEM_H;
+                                       color: 37 37 37 153;
+                               }
+                       }
+                       part {
+                               name: "selectall_bottom_line";
+                               type: RECT;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 2;
+                                       fixed: 0 1;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 1.0; to: "selectall_bg"; }
+                                       rel2 { relative: 1.0 0.0; to: "background"; }
+                                       color: 0 0 0 0;
+                               }
+                               description {
+                                       state: "visible" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: GENLIST_PART_BOTTOM_LINE_COLOR_VIDEO;
+                               }
+                               description {
+                                       state: "visible_video" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: GENLIST_PART_BOTTOM_LINE_COLOR_VIDEO;
+
+                               }
+                       }
+                       part {
+                       name: "selectall_check_leftpadding";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 16 0;
+                               fixed: 1 0;
+                               align: 0.0 0.0;
+
+                               color: 0 0 0 255;
+                               visible: 0;
+                               rel1 { relative: 0.0 0.0; to: "selectall_bg"; }
+                               rel2 { relative: 0.0 1.0; to: "selectall_bg"; }
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+
+                       }
+
+               }
+
+               part {
+                       name: "selectall_check";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.0 0.5;
+                               fixed: 1 1;
+                               min: 42 42;
+                               rel1 { relative: 1.0 0.0; to: "selectall_check_leftpadding"; }
+                               rel2 { relative: 1.0 1.0; to: "selectall_check_leftpadding"; }
+                               visible : 0;
+
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+
+               }
+
+               part {
+                       name: "selectall_check_rightpadding";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 16 0;
+                               fixed: 1 0;
+                               align: 0.0 0.0;
+                               color: 0 0 0 0;
+                               rel1 { relative: 1.0 0.0; to: "selectall_check"; }
+                               rel2 { relative: 1.0 1.0; to: "selectall_check"; }
+                                visible: 0;
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+
+               }
+
+               part {
+                       name: "selectall_text";
+                       type: TEXT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.0 0.5;
+                               rel1 { relative: 1.0 0.0; to: "selectall_check_rightpadding"; }
+                               rel2 { relative: 1.0 1.0; to: "selectall_bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 44;
+                                       text: "";
+                                       align: 0.0 0.5;
+                               }
+                               visible: 0;
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+
+               part {
+                       name: "selectall_inner";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+
+                       description {
+                               state: "defalut" 0.0;
+                               min: 0 1;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1 { relative: 0.0 1.0; to: "selectall_bg"; }
+                               rel2 { relative: 1.0 1.0; to: "selectall_bottom_line"; }
+                               color: 90 90 90 0;
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "elm.padding.selinfo";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                                       state: "default" 0.0;
+                                       min: 0 SELINFO_H; // bottom padding size for selectioninfo
+                                       fixed: 0 1;
+                                       align: 0.5 1.0;
+                                       rel1 { relative: 0.0 1.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                       }
+               }
+               part {
+                       name: "elm.swallow.view";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0; }
+                       }
+                       description { //edit thumbnails view
+                               state: "thumb_edit_default" 0.0;
+                               rel1 { relative: 0.0 1.0; to: "selectall_inner"; }
+                               rel2 { relative: 1.0 1.0;}
+
+                       }
+                       description { //move edit thumbnails view up while selectioninfo shown
+                               state: "moveup_view" 0.0;
+                               rel1 { relative: 0.0 1.0; to: "selectall_inner"; }
+                               rel2 { relative: 1.0 0.0; to: "elm.padding.selinfo"; }
+
+                       }
+                       description { //move edit albums view up while selectioninfo shown
+                               state: "moveup_albums_default" 0.0;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 0.0; to: "elm.padding.selinfo"; }
+                       }
+               }
+       }
+
+       programs
+       {
+               program {
+                       name: "selectall_show_after";
+                       action: STATE_SET "visible" 0.0;
+                       target: "selectall_check_leftpadding";
+                       target: "selectall_check";
+                       target: "selectall_check_rightpadding";
+                       target: "selectall_text";
+                       target: "selectall_inner";
+               }
+               program {
+                       name: "selectall_show";
+                       signal: "selectall_show";
+                       source: "elm";
+                       action: STATE_SET "visible" 0.0;
+                       target: "selectall_bg";
+                       target: "selectall_bottom_line";
+                   after: "selectall_show_after";
+               }
+               program {
+                       name: "selectall_show_video";
+                       signal: "selectall_show_video";
+                       source: "elm";
+                       action: STATE_SET "visible_video" 0.0;
+                       target: "selectall_bg";
+                       target: "selectall_bottom_line";
+                   after: "selectall_show_after";
+               }
+               program {
+                       name: "selectall_hide";
+                       signal: "selectall_hide";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "selectall_bg";
+                       target: "selectall_bottom_line";
+                       target: "selectall_check_leftpadding";
+                       target: "selectall_check";
+                       target: "selectall_check_rightpadding";
+                       target: "selectall_text";
+                       target: "selectall_inner";
+               }
+               //emit signal to set checkbox state in .c codes
+               program { name: "selectall_bg_click2";
+                       signal: "mouse,clicked,1";
+                       source: "selectall_bg";
+                       action: SIGNAL_EMIT "elm,action,click" "selectall_bg";
+               }
+
+               program {
+                       name: "swallow_view_default";
+                       signal: "elm,swallow_view,state,default";
+                       source: "elm";
+                       script {
+                               set_state(PART:"elm.swallow.view", "default", 0.0);
+                       }
+               }
+               program {
+                       name: "swallow_view_thumb_edit_default";
+                       signal: "elm,swallow_view,state,thumb_edit_default";
+                       source: "elm";
+                       script {
+                               set_state(PART:"elm.swallow.view", "thumb_edit_default", 0.0);
+                       }
+               }
+               program {
+                       name: "swallow_view_moveup_view";
+                       signal: "elm,swallow_view,state,moveup_view";
+                       source: "elm";
+                       script {
+                               set_state(PART:"elm.swallow.view", "moveup_view", 0.0);
+                       }
+               }
+               program {
+                       name: "swallow_view_moveup_albums_default";
+                       signal: "elm,swallow_view,state,moveup_albums_default";
+                       source: "elm";
+                       script {
+                               set_state(PART:"elm.swallow.view", "moveup_albums_default", 0.0);
+                       }
+               }
+       }
+
+ }
+
+//edit field layout
+      group {
+               name: "gallery/entry";
+               parts{
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               mouse_events: 1;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       color: GALLERY_EDC_COLOR_BG;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                               }
+                       }
+                        part {
+                               name: "bg_entry";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 ENTRY_H;//0 112 //0 76
+                                       max: ENTRY_MAX_W ENTRY_H;//1280 112  //800 76
+                                       fixed:1 1;
+                                       rel1 { relative: 0.0  0.0; to: "bg";}
+                                       rel2 { relative: 1.0  0.0; to: "bg"; offset: 0 ENTRY_H;}        //112   64
+                                       color: 0 0 0 0; //Fixme, set bg transparent.
+                                       //color: 255 255 255 255;
+                                       align: 0 0;
+                               }
+                       }
+                       part {
+                               name: "botton_line";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale:1;
+
+                               description {
+                                       min : 0 1; //minimum size for gap filler
+                                       fixed: 1 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 1.0; to: "bg_entry";}
+                                       rel2 { relative: 1.0 1.0; to: "bg_entry"; offset: 0 1;}
+                                       color: 82 82 82 255;
+                                       align: 0 0;
+                               }
+                       }
+                       part {
+                               name: "entry_part";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale:1;
+
+                               description {
+                                       min : 0 56; //minimum size for gap filler
+                                       max: 5000 56;
+                                       fixed: 1 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "bg_entry"; offset: 10 0;}
+                                       rel2 { relative: 1.0 (56/76); to: "bg_entry"; offset: -12 0;}
+                                       align: 0 0;
+                               }
+                       }
+               }
+       }
+
+       group { name: "gallery/segment_layout";
+          parts {
+             part { name: "bg";
+                type: RECT;
+                mouse_events: 1;
+                scale: 1;
+                description {
+                   state: "default" 0.0;
+                   visible: 0;
+                }
+             }
+             part { name: "segment";
+                type: SWALLOW;
+                mouse_events: 1;
+                scale: 1;
+                description {
+                   state: "default" 0.0;
+                   //min: 493 74;
+                   min: 460 74;
+                   max: 876 74;
+                   align: 0.0 0.5;
+                   rel1 { relative: 0.0 0.0; to: "bg"; }
+                   rel2 { relative: 1.0 1.0; to: "bg"; }
+                }
+             }
+          }
+       }
+}
+
diff --git a/res/edc/gl-black-theme.edc b/res/edc/gl-black-theme.edc
new file mode 100755 (executable)
index 0000000..0b30b67
--- /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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define FONT_ROM       "HelveticaNeue:style=Roman"
+#define FONT_MED       "HelveticaNeue:style=Medium"
+#define INDICATOR_H    27
+#define NAVI_H         67
+
+#include "gallery-edc-res.h"
+
+collections {
+#include "gl-naviframe.edc"
+#include "gl-toolbar.edc"
+}
+
diff --git a/res/edc/gl-button.edc b/res/edc/gl-button.edc
new file mode 100755 (executable)
index 0000000..e37a614
--- /dev/null
@@ -0,0 +1,3333 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define BUTTON_STATE_ENABLED  0
+#define BUTTON_STATE_DISABLED 1
+
+#define BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC 106 106 106 255
+#define BUTTON_TEXT_STYLE1_TEXT_DISABLED_COLOR_INC 180 180 1 255
+
+#define BUTTON_TEXT_NAVIFRAME_NORMAL_COLOR_INC 211 211 211 255
+#define BUTTON_TEXT_NAVIFRAME_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_NAVIFRAME_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_TEXT_NAVIFRAME_DISABLED_COLOR_INC 193 193 193 255
+
+#define BUTTON_POPUP_BUTTON_TEXT_NORMAL_COLOR_INC 255 255 255 255
+#define BUTTON_POPUP_BUTTON_TEXT_PRESSED_COLOR_INC 255 255 255 255
+#define BUTTON_POPUP_BUTTON_TEXT_FOCUSED_COLOR_INC 255 255 255 255
+#define BUTTON_POPUP_BUTTON_TEXT_DISABLED_COLOR_INC 204 200 188 255
+
+#define BUTTON_SWEEP_BUTTON_TEXT_NORMAL_COLOR_INC 249 249 249 255
+#define BUTTON_SWEEP_BUTTON_TEXT_PRESSED_COLOR_INC 249 249 249 255
+#define BUTTON_SWEEP_BUTTON_TEXT_FOCUSED_COLOR_INC 249 249 249 255
+#define BUTTON_SWEEP_BUTTON_TEXT_DISABLED_COLOR_INC 108 115 118 255
+
+#define BUTTON_TEXT_STYLE1_BG_MIN_INC 100 74
+#define BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC 148 74
+#define BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_TEXT_STYLE1_BG_BORDER_INC 5 5 5 5
+#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 20 5
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 32
+
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 64 64
+#define BUTTON_CIRCLE_STYLE_CONTENT_MIN_MAX_INC 35 35
+
+#define BUTTON_POPUP_BG_NORMAL_MIN_INC 30 74
+#define BUTTON_POPUP_BG_BORDER_INC 5 5 5 5
+#define BUTTON_POPUP_PADDING_MIN_INC 8 5
+#define BUTTON_POPUP_PADDING_ICON_TEXT_VISIBLE_MIN_INC 8 0
+#define BUTTON_POPUP_ICON_ICONONLY_MIN_INC 38 38
+#define BUTTON_POPUP_TEXT_MIN_INC 64 20
+#define BUTTON_POPUP_TEXT_FONT_SIZE_INC 32
+
+#define BUTTON_EDIT_STYLE_BG_NORMAL_MIN_MAX_INC 74 74
+#define BUTTON_EDIT_STYLE_IMAGE_NORMAL_MIN_MAX_INC 74 74
+#define BUTTON_EDIT_STYLE_BORDER_INC 8 0 5 5
+
+#define BUTTON_SWEEP_BG_NORMAL_MIN_INC 12 60
+#define BUTTON_SWEEP_BG_BORDER_INC 5 5 5 5
+#define BUTTON_SWEEP_PADDING_MIN_INC 5 5
+#define BUTTON_SWEEP_ICON_RECT_MIN_INC 0 28
+#define BUTTON_SWEEP_PADDING_ICON_TEXT_VISIBLE_MIN_INC 5 0
+#define BUTTON_SWEEP_ICONONLY_ICON_MIN_INC 28 28
+#define BUTTON_SWEEP_TEXT_MIN_INC 90 28
+#define BUTTON_SWEEP_FONT_SIZE_INC 32
+
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC 106 74
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC 56 56
+
+#define BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC 249 249 249 255
+#define BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC 249 249 249 255
+
+#define BUTTON_NAVIFRAME_CENTER_BG_NORMAL_MIN_INC 22 46
+#define BUTTON_NAVIFRAME_CENTER_BG_NORMAL_BORDER_INC 4 4 4 4
+#define BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC 16 2
+#define BUTTON_NAVIFRAME_CENTER_ICON_RECT_VISIBLE_MIN_SIZE 36 36
+#define BUTTON_NAVIFRAME_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC 6 0
+#define BUTTON_NAVIFRAME_CENTER_PADDING_BEFORE_TEXT_DEFAULT_MIN_INC 6 0
+#define BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC 36 36
+#define BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_CENTER_TEXT_FONT_SIZE_INC 32
+#define BUTTON_NAVIFRAME_MULTILINE_TEXT_FONT_SIZE_INC 24
+
+#define BUTTON_NAVIFRAME_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_VISIBLE_BG_MIN_INC 124 74
+#define BUTTON_NAVIFRAME_ICONONLY_BG_MIN_INC 74 74
+#define BUTTON_NAVIFRAME_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_PADDING_MIN_INC 5 5
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC 10 0
+#define BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC 38 38
+#define BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC 38 38
+#define BUTTON_TEXT_NAVIFRAME_FONT_SIZE_INC 28
+#define BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC 124 74
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/style1";
+      alias: "elm/button/base/text_only/style1";
+      alias: "elm/button/base/center";
+      alias: "elm/button/base/icon_and_text/center";
+      alias: "elm/button/base/nocontents/search_button";
+      images {
+         image: GALLERY_EDC_IMAGE_BTN_01_NORMAL COMP;
+         image: GALLERY_EDC_IMAGE_BTN_01_PRESS COMP;
+         image: GALLERY_EDC_IMAGE_BTN_01_DIM COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BTN_01_NORMAL;
+                  border: BUTTON_TEXT_STYLE1_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_01_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_01_DIM;
+              //image.normal: GALLERY_EDC_IMAGE_BTN_01_NORMAL;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_01_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_BG_MIN_INC;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_after_icon";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+               max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_after_icon";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;
+               text {
+                  font: "HelveticaNeue:style=Medium";
+                  size: BUTTON_TEXT_STYLE1_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+               visible: 1;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_after_icon";
+            target: "icon_rect";
+            target: "bg";
+         }
+         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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/sweep/gallery";
+      alias: "elm/button/base/sweep";
+      alias: "elm/button/base/text_only/sweep";
+      alias: "elm/button/base/searchbar/default";
+      images {
+         image: GALLERY_EDC_IMAGE_BTN_SWEEP COMP;
+         image: GALLERY_EDC_IMAGE_BTN_SWEEP_PRESS COMP;//focus image is missing, so using press
+         image: GALLERY_EDC_IMAGE_BTN_SWEEP_DIM COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_SWEEP_BG_NORMAL_MIN_INC;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BTN_SWEEP;
+                  border: BUTTON_SWEEP_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_SWEEP_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_SWEEP_DIM;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_SWEEP_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_SWEEP_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_SWEEP_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_SWEEP_ICON_RECT_MIN_INC;
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "padding_icon_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               color: 0 0 0 0;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "visible" 0.0; //when icon is visible
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_SWEEP_PADDING_ICON_TEXT_VISIBLE_MIN_INC;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_SWEEP_ICONONLY_ICON_MIN_INC;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_icon_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_SWEEP_BUTTON_TEXT_NORMAL_COLOR_INC;
+               text {
+                  font: "HelveticaNeue:style=Medium";
+                  size: BUTTON_SWEEP_FONT_SIZE_INC;
+                  min: 0 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: BUTTON_SWEEP_TEXT_MIN_INC;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_SWEEP_BUTTON_TEXT_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_SWEEP_BUTTON_TEXT_DISABLED_COLOR_INC;
+               visible: 1;
+               min: BUTTON_SWEEP_TEXT_MIN_INC;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_SWEEP_BUTTON_TEXT_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_icon_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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/popup_button/default";
+      alias: "elm/button/base/popup_button/gallery/menustyle";
+      alias: "elm/button/base/popup_button/gallery/default";
+      images {
+         image: GALLERY_EDC_IMAGE_BUTTON_POPUP_NORMAL COMP;
+         image: GALLERY_EDC_IMAGE_BUTTON_POPUP_PRESS COMP;
+         image: GALLERY_EDC_IMAGE_BUTTON_POPUP_FOCUS COMP;
+         image: GALLERY_EDC_IMAGE_BUTTON_POPUP_DIM COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_POPUP_BG_NORMAL_MIN_INC;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BUTTON_POPUP_NORMAL;
+                  border: BUTTON_POPUP_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BUTTON_POPUP_PRESS;
+               }
+            }
+            description { state: "disabled" 0.0;
+               inherit:  "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BUTTON_POPUP_DIM;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BUTTON_POPUP_FOCUS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2 {
+                  relative: 0.0 0.0;
+               }
+               min: BUTTON_POPUP_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 1.0 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+               }
+               min: BUTTON_POPUP_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_icon_text";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "elm.swallow.content";
+               }
+               rel2 {
+                  to: "elm.swallow.content";
+               }
+               fixed: 1 0;
+               min: 0 0;
+               visible: 0;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "visible" 0.0; //when icon is visible
+               inherit: "default" 0.0;
+               min: BUTTON_POPUP_PADDING_ICON_TEXT_VISIBLE_MIN_INC;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               fixed: 1 0;
+               visible: 1;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+            description { state: "icononly" 0.0;
+               visible: 1;
+               min: BUTTON_POPUP_ICON_ICONONLY_MIN_INC;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_icon_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_POPUP_BUTTON_TEXT_NORMAL_COLOR_INC;
+               text {
+                  font: "Helvetica Neue:style=Medium";
+                  size: BUTTON_POPUP_TEXT_FONT_SIZE_INC;
+                  min: 0 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: BUTTON_POPUP_TEXT_MIN_INC;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_POPUP_BUTTON_TEXT_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_POPUP_BUTTON_TEXT_DISABLED_COLOR_INC;
+               visible: 1;
+               min: BUTTON_POPUP_TEXT_MIN_INC;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_POPUP_BUTTON_TEXT_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_icon_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, 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, BUTTON_STATE_ENABLED);
+            }
+         }
+         program { name: "focused";
+            action: STATE_SET "focused" 0.0;
+            target: "button_image";
+            target: "elm.text";
+         }
+         program { name: "unfocused";
+            action: STATE_SET "default" 0.0;
+            target: "button_image";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+#define BUTTON_CIRCLE_STYLES(style_name, image_normal, image_press, min_width, min_height) \
+   group { name: "elm/button/base/"style_name; \
+      images { \
+         image: GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_NORMAL COMP; \
+         image: GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_PRESS COMP; \
+         image: image_normal COMP; \
+         image: image_press COMP; \
+      } \
+      parts { \
+         part { name: "button_image"; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \
+               max: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \
+               image.normal: GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_NORMAL; \
+               color: 255 255 255 255; \
+            } \
+            description { \
+               state: "clicked" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: GALLERY_EDC_IMAGE_BTN_CIRCLE_BG_PRESS; \
+            } \
+            description { \
+               state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: 255 255 255 128; \
+            } \
+         } \
+         part { name: "button_center_part"; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \
+               max: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \
+               image.normal: image_normal; \
+               color: 255 255 255 255; \
+            } \
+            description { \
+               state: "clicked" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: image_press; \
+            } \
+            description { \
+               state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: 255 255 255 128; \
+            } \
+         } \
+         part { name: "over1"; \
+            type: RECT; \
+            ignore_flags: ON_HOLD; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+               min: min_width min_height; \
+            } \
+         } \
+         part { name: "over2"; \
+            repeat_events: 1; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         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: "button_click"; \
+            signal: "mouse,down,1"; \
+            source: "over1"; \
+            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: "button_center_part"; \
+         } \
+         program { name: "button_unclick"; \
+            signal: "mouse,up,1"; \
+            source: "over2"; \
+            action: SIGNAL_EMIT "elm,action,unpress" ""; \
+            after: "button_unclick_anim"; \
+         } \
+         program { name: "button_unclick_anim"; \
+            action: STATE_SET "default" 0.0; \
+            target: "button_image"; \
+            target: "button_center_part"; \
+         } \
+         program { name: "button_unclick2"; \
+            signal: "mouse,clicked,1"; \
+            source: "over1"; \
+            action: SIGNAL_EMIT "elm,action,click" ""; \
+         } \
+         program { name: "disable"; \
+            signal: "elm,state,disabled"; \
+            source: "elm"; \
+            action: STATE_SET "disabled" 0.0; \
+            target: "disabler"; \
+            target: "button_image"; \
+            target: "button_center_part"; \
+         } \
+         program { name: "enable"; \
+            signal: "elm,state,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "disabler"; \
+            target: "button_image"; \
+            target: "button_center_part"; \
+         } \
+      } \
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   BUTTON_CIRCLE_STYLES("gallery/rename", GALLERY_EDC_IMAGE_BUTTON_RENAME, GALLERY_EDC_IMAGE_BUTTON_RENAME_PRESS, 40, 40)
+
+   group { name: "elm/button/base/multiline/gallery";
+      alias: "elm/button/base/multiline";
+      alias: "elm/button/base/text_only/multiline";
+      images {
+         image: GALLERY_EDC_IMAGE_BTN_04_NORMAL COMP;
+         image: GALLERY_EDC_IMAGE_BTN_04_PRESS COMP;
+//         image: GALLERY_EDC_IMAGE_BTN_04_DIM COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      styles{
+         style { name: "btn_multiline_style";
+            base: "font=HelveticaNeue:style=Medium font_size=18 align=center color=#ffffff wrap=mixed";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 46;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BTN_04_NORMAL;
+                  border: 4 4 3 3;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_04_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               //image.normal: GALLERY_EDC_IMAGE_BTN_04_DIM;
+               image.normal: GALLERY_EDC_IMAGE_BTN_04_NORMAL;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_04_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: 2 2;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: 2 2;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 1;
+               min: 0 40;
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "padding_icon_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               color: 0 0 0 0;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "visible" 0.0; //when icon is visible
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 5 0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+            description { state: "icononly" 0.0;
+               min: 40 40;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_icon_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC;
+               text {
+                  style: "btn_multiline_style";
+                  min: 0 0;
+                  max: 0 1;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 80 0;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_TEXT_STYLE1_TEXT_DISABLED_COLOR_INC;
+               visible: 1;
+               min: 80 0;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_icon_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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+   ///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/naviframe/back_btn/gallery";
+       alias: "elm/button/base/naviframe/back_btn/default";
+       alias: "elm/button/base/naviframe/prev_btn/default";
+       alias: "elm/button/base/naviframe/end_btn/default";
+       images {
+         image: GALLERY_EDC_IMAGE_BTN_PREV COMP;
+         image: GALLERY_EDC_IMAGE_BTN_PREV_PRESS COMP;
+         image: GALLERY_EDC_IMAGE_PREV COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BTN_PREV;
+                  border: BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_PREV_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_PREV_PRESS;
+            }
+         }
+         part { name: "back_button";
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+               rel1.to: "button_image";
+               rel2.to: "button_image";
+               image.normal: GALLERY_EDC_IMAGE_PREV;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         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: "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";
+         }
+         program { name: "button_unpress";
+            action: SIGNAL_EMIT "elm,action,unpress" "";
+         }
+         program { name: "button_mouseout_clicked";
+            signal: "mouse,up,1";
+            source: "over3";
+            script {
+               if (get_int(button_state) != 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: "disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "button_image";
+            target: "disabler";
+            after: "disable_button";
+         }
+         program { name: "disable_button";
+            script {
+               set_int(button_state, 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_button";
+         }
+         program { name: "enable_button";
+            script {
+               set_int(button_state, BUTTON_STATE_ENABLED);
+            }
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+      group { name: "elm/button/base/naviframe_control/gallery";
+         alias: "elm/button/base/naviframe_control/default";
+         alias: "elm/button/base/naviframe_control/center";
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT COMP;
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_DIM COMP;
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_PRESS COMP;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_BG_NORMAL_MIN_INC;
+               color: 0 0 0 0;
+               rel1.offset: 0 0;
+               rel2.offset: -1 -1;
+               image {
+                  normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT;
+                  border: BUTTON_NAVIFRAME_CENTER_BG_NORMAL_BORDER_INC;
+               }
+               color: 255 255 255 255;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_DIM;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+               color: 0 0 0 0;
+            }
+            description { state: "visible" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_ICON_RECT_VISIBLE_MIN_SIZE;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+               color: 0 0 0 0;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_after_icon";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               color: 0 0 0 0;
+            }
+            description { state: "visible" 0.0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC;
+               color: 0 0 0 0;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_BEFORE_TEXT_DEFAULT_MIN_INC;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_right_bottom";
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_after_icon";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+               text {
+                  font: "Helvetica Neue:style=Medium";
+                  size: BUTTON_NAVIFRAME_CENTER_TEXT_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+            description { state: "disabled" 0.0;
+               color: 255 255 255 127;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                 }
+               set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "text_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "icon_rect";
+            target: "padding_after_icon";
+         }
+         program { name: "disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "button_image";
+            target: "clipper";
+            target: "disabler";
+            after: "disable_text";
+         }
+         program { name: "disable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               set_int(button_state, BUTTON_STATE_DISABLED);
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "clicked") || !strcmp(st, "focused"))
+                 set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "button_image";
+            target: "clipper";
+            target: "disabler";
+            after: "enable_text";
+         }
+         program { name: "enable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               set_int(button_state, BUTTON_STATE_ENABLED);
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "clicked") || !strcmp(st, "focused"))
+                 set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "focused";
+            action: STATE_SET "focused" 0.0;
+            target: "button_image";
+            target: "elm.text";
+         }
+         program { name: "unfocused";
+            action: STATE_SET "default" 0.0;
+            target: "button_image";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/naviframe_control/multiline/gallery";
+           alias: "elm/button/base/naviframe_control/multiline";
+
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT COMP;
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_DIM COMP;
+         image: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_PRESS COMP;
+      }
+      styles{
+         style { name: "btn_multiline_naviframe_controlbar_style";
+            base: "font=Helvetica Neue:style=Medium font_size="BUTTON_NAVIFRAME_MULTILINE_TEXT_FONT_SIZE_INC" align=center color=#ffffff wrap=mixed";
+            tag: "br" "\n";
+            tag: "ps" "ps";
+            tag: "tab" "\t";
+         }
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_BG_NORMAL_MIN_INC;
+               rel1.offset: 0 0;
+               rel2.offset: -1 -1;
+               image {
+                  normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT;
+                  border: BUTTON_NAVIFRAME_CENTER_BG_NORMAL_BORDER_INC;
+               }
+               color: 255 255 255 255;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_DIM;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_OPTION_HEADER_BT_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_MIN_MAX_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "elm.swallow.content";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+         }
+         part { name: "padding_icon_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               visible: 0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to: "icon_rect";
+               }
+               fixed: 1 0;
+               min: 0 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to: "icon_rect";
+               }
+           }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_icon_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                   relative: 0.0 0.0;
+                   to: "padding_right_bottom";
+               }
+               color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+               text {
+                  style: "btn_multiline_naviframe_controlbar_style";
+                  min: 0 0;
+                  max: 0 1;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 80 0;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               min: 0 0;
+               color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+            description { state: "disabled" 0.0;
+               color: 255 255 255 127;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "text_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"padding_icon_text", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"padding_icon_text", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_icon_text";
+         }
+         program { name: "disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "button_image";
+            target: "clipper";
+            target: "disabler";
+            after: "disable_text";
+         }
+         program { name: "disable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               set_int(button_state, BUTTON_STATE_DISABLED);
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "clicked") || !strcmp(st, "focused"))
+                 set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "button_image";
+            target: "clipper";
+            target: "disabler";
+            after: "enable_text";
+         }
+         program { name: "enable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               set_int(button_state, BUTTON_STATE_ENABLED);
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "clicked") || !strcmp(st, "focused"))
+                 set_state(PART:"elm.text", "visible", 0.0);
+            }
+         }
+         program { name: "focused";
+            action: STATE_SET "focused" 0.0;
+            target: "button_image";
+            target: "elm.text";
+         }
+         program { name: "unfocused";
+            action: STATE_SET "default" 0.0;
+            target: "button_image";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+///////////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/button/base/naviframe/title/gallery";
+       alias: "elm/button/base/naviframe/title/default";
+
+      images {
+         image: GALLERY_EDC_IMAGE_BTN_TITLE COMP;
+         image: GALLERY_EDC_IMAGE_BTN_TITLE_PRESS COMP;
+      }
+      script {
+         public button_state = BUTTON_STATE_ENABLED;
+      }
+      parts {
+         part { name: "button_image";
+            scale: 1;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC;
+               max: BUTTON_NAVIFRAME_TITLE_BUTTON_MIN_INC;
+               image {
+                  normal: GALLERY_EDC_IMAGE_BTN_TITLE;
+                  border: BUTTON_NAVIFRAME_BG_BORDER_INC;
+                  border_scale: 1;
+               }
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_TITLE_PRESS;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               image.normal: GALLERY_EDC_IMAGE_BTN_TITLE_PRESS;
+            }
+         }
+         part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: BUTTON_NAVIFRAME_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               min: BUTTON_NAVIFRAME_BG_MIN_INC;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_NAVIFRAME_VISIBLE_BG_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+               min: BUTTON_NAVIFRAME_ICONONLY_BG_MIN_INC;
+            }
+         }
+         part { name: "padding_right_bottom";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               rel1.relative: 1.0 1.0;
+               min: BUTTON_NAVIFRAME_PADDING_MIN_INC;
+               fixed: 1 1;
+               visible: 0;
+            }
+         }
+         part { name: "icon_rect";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_VISIBLE_ICON_RECT_MIN_MAX_INC;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               align: 0.0 0.5;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_after_icon";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               visible: 0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "icon_rect";
+               }
+               rel2.to: "icon_rect";
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+            }
+            description { state: "icononly" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0; //when only icon or no icon is there
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "elm.text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "elm.text";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_PADDING_ICON_TEXT_MIN_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "padding_left_top";
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to_x: "padding_left_top";
+                  to_y: "padding_right_bottom";
+               }
+               fixed: 1 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 0;
+               min: BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_VISIBLE_ICON_MIN_MAX_INC;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "padding_before_text";
+                  to_y: "padding_right_bottom";
+               }
+            }
+            description { state: "icononly" 0.0;
+               min: BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC;
+               max: BUTTON_NAVIFRAME_ICONONLY_ICON_MIN_MAX_INC;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "padding_after_icon";
+                  to_y: "padding_left_top";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "padding_right_bottom";
+               }
+               color: BUTTON_TEXT_NAVIFRAME_NORMAL_COLOR_INC;
+               text {
+                  font: "HelveticaNeue:style=Medium";
+                  size: BUTTON_TEXT_NAVIFRAME_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+            description { state: "clicked" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_NAVIFRAME_PRESSED_COLOR_INC;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: BUTTON_TEXT_NAVIFRAME_DISABLED_COLOR_INC;
+               visible: 1;
+            }
+            description { state: "focused" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: BUTTON_TEXT_NAVIFRAME_FOCUSED_COLOR_INC;
+            }
+         }
+         part { name: "over2";
+            type: RECT;
+            repeat_events: 1;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "over3";
+            type: RECT;
+            repeat_events: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         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: "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";
+            after: "text_clicked";
+         }
+         program { name: "text_clicked";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "clicked", 0.0);
+            }
+         }
+         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.swallow.content", st, 30, vl);
+               if (strcmp(st, "icononly"))
+                 {
+                    emit("elm,action,default,text,set", "");
+                    set_state(PART:"elm.text", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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 {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "icononly"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               if (get_int(button_state) != 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";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.swallow.content", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+               set_state(PART:"elm.text", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 {
+                    set_state(PART:"elm.swallow.content", "visible", 0.0);
+                    set_state(PART:"icon_rect", "visible", 0.0);
+                    set_state(PART:"padding_after_icon", "visible", 0.0);
+                    set_state(PART:"bg", "visible", 0.0);
+                 }
+               else
+                 {
+                    set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                    set_state(PART:"icon_rect", "icononly", 0.0);
+                    set_state(PART:"padding_after_icon", "icononly", 0.0);
+                    set_state(PART:"bg", "icononly", 0.0);
+                 }
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+            target: "padding_after_icon";
+            target: "icon_rect";
+            target: "bg";
+         }
+         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, 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, 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";
+            after: "unfocus_text";
+         }
+         program { name: "unfocus_text";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+      }
+   }
+
+#undef BUTTON_STATE_ENABLED
+#undef BUTTON_STATE_DISABLED
+
diff --git a/res/edc/gl-check.edc b/res/edc/gl-check.edc
new file mode 100755 (executable)
index 0000000..b637229
--- /dev/null
@@ -0,0 +1,969 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC 42 42
+
+#define CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC        255 255 255 255
+#define CHECK_DEFAULT_TEXT_PRESSED_COLOR_INC      255 255 255 255
+#define CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC          136 136 136 136
+
+////////////////////////////////////////////////////////////////////////////////////////
+//
+// check default textblock style
+//
+///////////////////////////////////////////////////////////////////////////////////////
+       styles {
+               style { name: "check_label_textblock_style";
+                       base: "font=HelveticaNeue:style=Roman font_size=32 color=#ffffff wrap=char";
+                       tag: "br" "\n";
+                       tag: "ps" "ps";
+                       tag: "hilight" "+ font=HelveticaNeue:style=Bold";
+                       tag: "b" "+ font=HelveticaNeue:style=Bold";
+                       tag: "whitecolor" "+ color=#ffffff";
+                       tag: "tab" "\t";
+               }
+       }
+
+#define CHECK_STATE_DEFAULT 0
+#define CHECK_STATE_VISIBLE 1
+#define CHECK_STATE_DISABLED_VISIBLE 2
+#define CHECK_STATE_DISABLED 3
+
+////////////////////////////////////////////////////////////////////////////////
+#define CHECK_STYLE_DEFAULT(style_name, image_bg, image_checking, min_width, min_height) \
+ group { name: "elm/check/base/"style_name; \
+      images { \
+         image: image_bg COMP; \
+         image: GALLERY_EDC_IMAGE_CHECK_BG_DIM COMP; \
+         image: image_checking COMP; \
+      } \
+      script { \
+         public check_state = CHECK_STATE_DEFAULT; \
+      } \
+      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: image_bg; \
+               fill.smooth : 0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: GALLERY_EDC_IMAGE_CHECK_BG_DIM; \
+               fill.smooth : 0; \
+            } \
+         } \
+         part { name: "check"; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel1.to: "bg"; \
+               rel2.to: "bg"; \
+               visible: 0; \
+               image.normal: image_checking; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         } \
+         part { name: "elm.swallow.content"; \
+            type: SWALLOW; \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               visible: 0; \
+               color: 255 255 255 255; \
+               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; \
+               color: 128 128 128 128; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               color: 128 128 128 128; \
+               fixed: 1 1; \
+               visible: 1; \
+               aspect: 1.0 1.0; \
+            } \
+         } \
+         part { name: "elm.text"; \
+            type: TEXTBLOCK; \
+            mouse_events: 0; \
+            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: "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: "click"; \
+            signal: "mouse,clicked,1"; \
+            source: "events1"; \
+            action: SIGNAL_EMIT "elm,action,check,toggle" ""; \
+         } \
+         program { name: "check_on"; \
+            signal: "elm,state,check,on"; \
+            source: "elm"; \
+            script { \
+               set_int(check_state, CHECK_STATE_VISIBLE); \
+               set_state(PART:"check", "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); \
+                 } \
+            } \
+         } \
+         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: "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: "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_int(check_state, CHECK_STATE_VISIBLE); \
+                 } \
+               else \
+                 set_int(check_state, CHECK_STATE_DEFAULT); \
+            } \
+         } \
+      } \
+   }
+
+////////////////////////////////////////////////////////////////////////////////
+       CHECK_STYLE_DEFAULT("gallery/default", GALLERY_EDC_IMAGE_CHECK_BG, GALLERY_EDC_IMAGE_CHECK_BG_CHECKING, 42, 42)
+
+////////////////////////////////////////////////////////////////////////////////
+       CHECK_STYLE_DEFAULT("gallery/album", GALLERY_EDC_IMAGE_CHECK_ALBUM_BG, GALLERY_EDC_IMAGE_CHECK_BG_CHECKING, 42, 42)
+
+////////////////////////////////////////////////////////////////////////////////
+#define CHECK_STYLE_GRID(style_name, image_grid, width, height) \
+   group { name: "elm/check/base/"style_name; \
+      images.image: image_grid COMP; \
+      parts { \
+         part { name: "bg"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         } \
+               part { name: "icon_bg_img"; \
+                       type: RECT; \
+                       mouse_events: 0; \
+                       scale : 1; \
+                       description { \
+                               color: 0 0 0 0; \
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; } \
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; } \
+                       } \
+               } \
+               part { name: "icon_bg"; \
+                       type: RECT; \
+                       description { state: "default" 0.0; \
+                               color: 0 0 0 0; \
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; } \
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; } \
+                       } \
+               } \
+         part { name: "bg2"; \
+            type: RECT; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel1.to: "icon_bg"; \
+               rel2.to: "icon_bg"; \
+               align: 0.5 0.5; \
+               min: width height; \
+               max: width height; \
+               color:  0 0 0 0; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         } \
+         part { name: "selected_bg"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel1.to: "icon_bg"; \
+               rel2.to: "icon_bg"; \
+               color: 0 0 0 0; \
+               visible: 0; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               color: 0 0 0 153; \
+               visible: 1; \
+            } \
+         } \
+         part { name: "check"; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel1.to: "bg2"; \
+               rel2.to: "bg2"; \
+               visible: 0; \
+               image.normal: image_grid; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         } \
+         part { name: "elm.swallow.content"; \
+            type: SWALLOW; \
+            description { \
+               state: "default" 0.0; \
+               fixed: 1 0; \
+               visible: 0; \
+               color: 255 255 255 255; \
+               align: 0.0 0.5; \
+               rel1 { \
+                  to_x: "bg2"; \
+                  relative: 1.0 0.0; \
+                  offset: 1 1; \
+               } \
+               rel2 { \
+                  to_x: "bg2"; \
+                  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; \
+               color: 128 128 128 128; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               color: 128 128 128 128; \
+               fixed: 1 1; \
+               visible: 1; \
+               aspect: 1.0 1.0; \
+            } \
+         } \
+         part { name: "elm.text"; \
+            type: TEXTBLOCK; \
+            mouse_events: 0; \
+            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; \
+               } \
+               color: 255 255 255 255; \
+               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: "events"; \
+            type: RECT; \
+            ignore_flags: ON_HOLD; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         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: "click"; \
+            signal: "mouse,up,1"; \
+            source: "events"; \
+            action: SIGNAL_EMIT "elm,action,check,toggle" ""; \
+            after: "bg_normal"; \
+         } \
+         program { name: "bg_normal"; \
+            script { \
+               set_state(PART:"bg", "default", 0.0); \
+               set_state(PART:"bg2", "default", 0.0); \
+            } \
+         } \
+         program { name: "mouseout"; \
+            signal: "mouse,out"; \
+            source: "events"; \
+            after: "bg_check_normal"; \
+         } \
+         program { name: "bg_check_normal"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "pressed")) \
+                 set_state(PART:"check", "visible", 0.0); \
+               set_state(PART:"bg", "default", 0.0); \
+               set_state(PART:"bg2", "default", 0.0); \
+            } \
+         } \
+         program { name: "pressed"; \
+            signal: "mouse,down,1"; \
+            source: "events"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                 set_state(PART:"check", "pressed", 0.0); \
+               set_state(PART:"bg", "pressed", 0.0); \
+               set_state(PART:"bg2", "pressed", 0.0); \
+            } \
+         } \
+         program { name: "check_on"; \
+            signal: "elm,state,check,on"; \
+            source: "elm"; \
+            action: STATE_SET "visible" 0.0; \
+            target: "check"; \
+            target: "selected_bg"; \
+         } \
+         program { name: "check_off"; \
+            signal: "elm,state,check,off"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "check"; \
+            target: "selected_bg"; \
+         } \
+         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: "bg"; \
+            target: "bg2"; \
+            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); \
+            } \
+         } \
+         program { name: "enable"; \
+            signal: "elm,state,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "disabler"; \
+            target: "bg"; \
+            target: "bg2"; \
+            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); \
+            } \
+         } \
+      } \
+   }
+
+////////////////////////////////////////////////////////////////////////////////
+       CHECK_STYLE_GRID("gallery/grid", GALLERY_EDC_IMAGE_CHECK_GRID, 64, 64)
+
+////////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/check/base/gallery/album/grid";
+      parts {
+         part { name: "bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "bg2";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+               align: 0.5 0.5;
+               min: 40 40;
+               max: 40 40;
+               color:  0 0 0 0;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "selected_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+               color: 0 0 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               color: 0 0 0 153;
+               visible: 1;
+            }
+         }
+         part { name: "check";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1.to: "bg2";
+               rel2.to: "bg2";
+               color: 0 0 0 0;
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            description {
+               state: "default" 0.0;
+               fixed: 1 0;
+               visible: 0;
+               color: 255 255 255 255;
+               align: 0.0 0.5;
+               rel1 {
+                  to_x: "bg2";
+                  relative: 1.0 0.0;
+                  offset: 1 1;
+               }
+               rel2 {
+                  to_x: "bg2";
+                  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;
+               color: 128 128 128 128;
+            }
+            description { state: "disabled_visible" 0.0;
+               inherit: "default" 0.0;
+               color: 128 128 128 128;
+               fixed: 1 1;
+               visible: 1;
+               aspect: 1.0 1.0;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            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;
+               }
+               color: 255 255 255 255;
+               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: "events";
+            type: RECT;
+            ignore_flags: ON_HOLD;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         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: "click";
+            signal: "mouse,up,1";
+            source: "events";
+            action: SIGNAL_EMIT "elm,action,check,toggle" "";
+            after: "bg_normal";
+         }
+         program { name: "bg_normal";
+            script {
+               set_state(PART:"bg", "default", 0.0);
+               set_state(PART:"bg2", "default", 0.0);
+            }
+         }
+         program { name: "mouseout";
+            signal: "mouse,out";
+            source: "events";
+            after: "bg_check_normal";
+         }
+         program { name: "bg_check_normal";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"check", st, 30, vl);
+               if (!strcmp(st, "pressed"))
+                 set_state(PART:"check", "visible", 0.0);
+               set_state(PART:"bg", "default", 0.0);
+               set_state(PART:"bg2", "default", 0.0);
+            }
+         }
+         program { name: "pressed";
+            signal: "mouse,down,1";
+            source: "events";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"check", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                 set_state(PART:"check", "pressed", 0.0);
+               set_state(PART:"bg", "pressed", 0.0);
+               set_state(PART:"bg2", "pressed", 0.0);
+            }
+         }
+         program { name: "check_on";
+            signal: "elm,state,check,on";
+            source: "elm";
+            action: STATE_SET "visible" 0.0;
+            target: "check";
+            target: "selected_bg";
+         }
+         program { name: "check_off";
+            signal: "elm,state,check,off";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "check";
+            target: "selected_bg";
+         }
+         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: "bg";
+            target: "bg2";
+            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);
+            }
+         }
+         program { name: "enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "disabler";
+            target: "bg";
+            target: "bg2";
+            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);
+            }
+         }
+      }
+   }
+
+#undef CHECK_STATE_DEFAULT
+#undef CHECK_STATE_VISIBLE
+#undef CHECK_STATE_DISABLED_VISIBLE
+#undef CHECK_STATE_DISABLED
diff --git a/res/edc/gl-editfield.edc b/res/edc/gl-editfield.edc
new file mode 100755 (executable)
index 0000000..37d6bc4
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define ENTRY_TEXT_SIZE_INC 44
+
+#define EDITFIELD_GUIDE_TEXT_COLOR_INC 189 189 189 255 // 70 70 70 255
+#define EDITFIELD_DEFAULT_ERASER_MINW_INC 48
+#define EDITFIELD_DEFAULT_ERASER_MINH_INC 48
+#define EDITFIELD_DEFAULT_MINH_INC 112
+#define EDITFIELD_DEFAULT_TOP1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_TOP2_INC 6
+#define EDITFIELD_DEFAULT_LEFT1_INC 0
+#define EDITFIELD_DEFAULT_LEFT2_INC 0
+#define EDITFIELD_DEFAULT_RIGHT1_ERASER_SHOW_INC 56
+#define EDITFIELD_DEFAULT_RIGHT2_INC 0
+#define EDITFIELD_DEFAULT_BOTTOM1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_BOTTOM2_SINGLE_INC 32
+#define EDITFIELD_DEFAULT_BOTTOM3_SINGLE_INC 85
+
+
+group { name: "elm/layout/editfield/gallery";
+   images {
+      image: GALLERY_EDC_IMAGE_FIELD_BTN_DELETE COMP;
+   }
+   parts {
+      part {
+         name: "base";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            min: 0 EDITFIELD_DEFAULT_MINH_INC;
+            color: 0 0 0 0;
+         }
+      }
+      part {
+         name: "top1";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 EDITFIELD_DEFAULT_TOP1_SINGLE_INC;
+            fixed: 1 1;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0;
+         }
+      }
+      part {
+         name: "top2";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 EDITFIELD_DEFAULT_TOP2_INC;
+            fixed: 1 1;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0;
+         }
+      }
+      part {
+         name: "left1";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: EDITFIELD_DEFAULT_LEFT1_INC 0;
+            fixed: 1 1;
+            align: 0 0;
+            rel1.relative : 0.0 0.0;
+            rel2.relative : 0.0 1.0;
+         }
+      }
+      part {
+         name: "left2";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: EDITFIELD_DEFAULT_LEFT2_INC 0;
+            fixed: 1 1;
+            align: 0 0;
+            rel1.relative : 0.0 0.0;
+            rel2.relative : 0.0 1.0;
+         }
+      }
+      part {
+         name: "right1";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: EDITFIELD_DEFAULT_RIGHT1_ERASER_SHOW_INC 0;
+            fixed: 1 1;
+            align: 1 0;
+            rel1.relative : 1.0 0.0;
+            rel2.relative : 1.0 1.0;
+         }
+      }
+      part {
+         name: "right2";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: EDITFIELD_DEFAULT_RIGHT2_INC 0;
+            fixed: 1 1;
+            align: 1 0;
+            rel1.relative : 1.0 0.0;
+            rel2.relative : 1.0 1.0;
+         }
+      }
+      part {
+         name: "bottom1";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 EDITFIELD_DEFAULT_BOTTOM1_SINGLE_INC;
+            fixed: 1 1;
+            align: 0 1;
+            rel1.relative: 0.0 1.0;
+         }
+      }
+      part {
+         name: "bottom2";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 EDITFIELD_DEFAULT_BOTTOM2_SINGLE_INC;
+            fixed: 0 1;
+            rel1.relative: 0.0 1.0;
+            align: 0 1;
+         }
+      }
+      part {
+         name: "bottom3";
+         type: RECT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 EDITFIELD_DEFAULT_BOTTOM3_SINGLE_INC;
+            fixed: 0 1;
+            rel1.relative: 0.0 1.0;
+            align: 0 1;
+         }
+      }
+      part {
+         name: "elm.guidetext";
+         type: TEXT;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.0;
+            fixed: 1 1;
+            rel1.to: "elm.swallow.content";
+            rel2.to: "elm.swallow.content";
+            color: EDITFIELD_GUIDE_TEXT_COLOR_INC;
+            text {
+               font: "SLP:style=Roman";
+               size: ENTRY_TEXT_SIZE_INC;
+               min: 0 0;
+               align: 0.0 0.5;
+            }
+         }
+         description {
+            state: "hidden" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            min: 0 40;
+            rel1 {
+               relative : 1.0 1.0;
+               to_x: "left1";
+               to_y: "top1";
+            }
+            rel2 {
+               relative : 0.0 0.0;
+               to_x: "right1";
+               to_y: "bottom1";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part {
+         name: "eraser_image";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: EDITFIELD_DEFAULT_ERASER_MINW_INC EDITFIELD_DEFAULT_ERASER_MINH_INC;
+            fixed: 1 1;
+            align: 1 1;
+            rel1 {
+               relative: 0.0 0.0;
+               to_x : "right2";
+               to_y : "bottom2";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x : "right2";
+               to_y : "bottom2";
+            }
+            image {
+               normal: GALLERY_EDC_IMAGE_FIELD_BTN_DELETE;
+               border: 10 10 10 10;
+               border_scale: 1;
+            }
+         }
+         description {
+            state: "elm.eraser.show" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part {
+         name: "eraser";
+         mouse_events: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            color: 0 0 0 0;
+            rel1 {
+               relative: 0.0 0.0;
+               to_x : "eraser_image";
+               to_y : "bottom3";
+            }
+         }
+         description {
+            state: "elm.eraser.show" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+      program {
+         name: "guidetext_show";
+         signal: "elm,state,guidetext,show";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.guidetext";
+      }
+      program {
+         name: "guidetext_hide";
+         signal: "elm,state,guidetext,hide";
+         source: "elm";
+         action: STATE_SET "hidden" 0.0;
+         target: "elm.guidetext";
+      }
+      program {
+         name: "eraser_show";
+         signal: "elm,state,eraser,show";
+         source: "elm";
+         action: STATE_SET "elm.eraser.show" 0.0;
+         target: "eraser_image";
+         target: "eraser";
+      }
+      program {
+         name: "eraser_hide";
+         signal: "elm,state,eraser,hide";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "eraser_image";
+         target: "eraser";
+      }
+      program {
+         name: "eraser_clicked";
+         signal: "mouse,clicked,1";
+         source: "eraser";
+         action: SIGNAL_EMIT "elm,eraser,clicked" "elm";
+      }
+   }
+}
\ No newline at end of file
diff --git a/res/edc/gl-entry.edc b/res/edc/gl-entry.edc
new file mode 100755 (executable)
index 0000000..e4a3a58
--- /dev/null
@@ -0,0 +1,4374 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define ENTRY_BLOCK_HANDLE_SOURCE2 "elm/entry/selection/block_handle_right"
+#define ENTRY_BLOCK_HANDLE_SOURCE3 "elm/entry/selection/block_handle_left"
+
+#define ENTRY_TEXT_SIZE_INC 44
+//bg color is black, font color is while
+#define ENTRY_TEXT_COLOR_INC "#FFFFFF"
+//bg color is white, font color is black
+#define ENTRY_TEXT_COLOR_RENAME_INC "#000000"
+//cursor color is BLUE
+#define ENTRY_CURSOR_COLOR_INC 3 131 238 255
+//bg color is white, font color is black
+#define ENTRY_PREEDIT_BACKGROUND_COLOR_INC "#000000"
+#define ENTRY_PREEDIT_TEXT_COLOR_INC "#FFFFFF"
+//bg color is black, font color is while
+#define ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC "#FFFFFF"
+#define ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC "#000000"
+
+#define ENTRY_SELECTION_BG_COLOR 90 123 138 127 // 204 230 224 127
+#define ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE 48 67
+#define MAGNIFIER_HEIGHT_FILL 182
+#define MAGNIFIER_HEIGHT_FIXED 108
+#define MAGNIFIER_WIDTH_FIXED 358
+
+#define ENTRY_BUBBLE_EX_PAD 15
+#define ENTRY_BUBBLE_IX_PAD 22
+#define ENTRY_BUBBLE_Y_PAD 15
+#define ENTRY_BUBBLE_BOTTOM_PAD 22
+#define ENTRY_BUBBLE_CALLERID_PAD 16
+#define ENTRY_BUBBLE_CALLERID_WIDTH 60
+#define ENTRY_BUBBLE_CALLERID_HEIGHT 60
+#define ENTRY_BUBBLE_DATE_AREA_TEXT_SIZE_INC 26
+
+#define GENLIST_PADDING_6_INC 6
+#define GENLIST_PADDING_34_INC 34
+#define GENLIST_PADDING_64_INC 64
+#define GENLIST_SIZE_64_INC 64
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC 129 129 129 255
+#define GENLIST_FONT_28_INC 44
+
+group { name: "elm/entry/base/gallery";
+   alias: "elm/entry/base-mixedwrap/gallery";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "entry_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" left_margin=1 right_margin=2 wrap=mixed text_class=entry";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "entry_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 left_margin=1 right_margin=2 wrap=mixed text_class=entry";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "entry_textblock_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-charwrap/default";
+   alias: "elm/entry/base/char_wrap";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "entry_textblock_char_wrap_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "entry_textblock_char_wrap_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "entry_textblock_char_wrap_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_char_wrap_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+group { name: "elm/entry/base-nowrap/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "entry_textblock_style";
+               min: 1 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base/editfield";
+   alias: "elm/entry/base-mixedwrap/editfield";
+   alias: "elm/entry/base/editfield/default";
+   alias: "elm/entry/base/editfield/lighting";
+   alias: "elm/entry/base/editfield/multiline";
+   alias: "elm/entry/base/editfield/multiline/default";
+   alias: "elm/entry/base/editfield/multiline/lighting";
+   alias: "elm/entry/base/editfield/searchbar/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=mixed left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "editfield_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=mixed left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+            style: "editfield_textblock_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-charwrap/gallery";
+   alias: "elm/entry/base/gallery/char_wrap";
+   alias: "elm/entry/base/gallery/default/char_wrap";
+   alias: "elm/entry/base/gallery/lighting/char_wrap";
+   alias: "elm/entry/base/gallery/multiline/char_wrap";
+   alias: "elm/entry/base/gallery/multiline/default/char_wrap";
+   alias: "elm/entry/base/gallery/multiline/lighting/char_wrap";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_textblock_char_wrap_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "editfield_textblock_char_wrap_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "editfield_textblock_char_wrap_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_textblock_char_wrap_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single/gallery";
+   alias: "elm/entry/base-single/gallery/default";
+   alias: "elm/entry/base-single/gallery/lighting";
+   alias: "elm/entry/base-single/gallery/singleline";
+   alias: "elm/entry/base-single/gallery/singleline/default";
+   alias: "elm/entry/base-single/gallery/singleline/lighting";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_single_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "editfield_single_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "editfield_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single/editfield/searchbar/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "editfield_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-nowrap/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "entry_textblock_style";
+               min: 1 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "entry_single_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "entry_single_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link " "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "entry_single_textblock_style";
+               min: 1 1;
+               max: 0 0;
+               align: 0.0 0.5;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single-noedit/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PLAIN;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "entry_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-noedit/default";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PLAIN;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "entry_textblock_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+   group { name: "elm/entry/base-noedit-charwrap/default";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      parts {
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description { state: "default" 0.0;
+               fixed: 1 0;
+              text {
+                 style: "entry_textblock_style_charwrap";
+                 min: 0 1;
+               align: 0.0 0.0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style_charwrap";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base-nowrap-noedit/default";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      parts {
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description { state: "default" 0.0;
+              text {
+                 style: "entry_textblock_style";
+                 min: 1 1;
+               align: 0.0 0.0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+  group { name: "elm/entry/base-password/default";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      parts {
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PASSWORD;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 0;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source4: "elm/entry/cursor/default"; // cursorover
+           source5: "elm/entry/anchor/default"; // anchor under
+           description { state: "default" 0.0;
+              text {
+                 style: "entry_single_textblock_style";
+                 repch: "*";
+                 min: 1 1;
+                  max: 0 1;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_single_textblock_disabled_style";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+group { name: "elm/entry/base-password/popup";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   styles
+   {
+      style { name: "entry_single_textblock_popup_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" align=center wrap=mixed ellipsis=1.0";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+      style { name: "entry_single_textblock_disabled_popup_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 align=center wrap=mixed ellipsis=1.0";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+      }
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PASSWORD;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "entry_single_textblock_popup_style";
+               repch: "*";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "entry_single_textblock_disabled_popup_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+       group { name: "elm/entry/cursor/default";
+               parts {
+                       part { name: "clip2";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       rel1.to: "clip";
+                                       rel2.to: "clip";
+                               visible: 0;
+                               }
+                               description { state: "focused" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "clip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "clip2";
+                               description { state: "default" 0.0;
+                                       rel1.offset: -10 0;
+                                       rel2.offset: 9 9;
+                               }
+                               description { state: "hidden" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "base";
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "clip";
+                               description { state: "default" 0.0;
+                                       min: 2 2;
+                                       align: 0.5 1.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+
+                       part { name: "glow";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               clip_to: "clip2";
+                               description { state: "default" 0.0;
+                                       min: 3 0;
+                                       fixed: 1 0;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               relative: 0.0  0.0;
+                                               offset: 0 2;
+                                       }
+                                       rel2 {
+                                               relative: 0.0  1.0;
+                                               offset: 0 -2;
+                                       }
+                                       color: ENTRY_CURSOR_COLOR_INC;
+                               }
+                               description { state: "hidden" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "show";
+                               action: STATE_SET "hidden" 0.0;
+                               in: 0.6 0.0;
+                               target: "glow";
+                               after: "show4";
+                       }
+                       program { name: "show4";
+                               action: STATE_SET "default" 0.0;
+                               in: 0.6 0.0;
+                               target: "glow";
+                               after: "show";
+                       }
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               action: STATE_SET "focused" 0.0;
+                               target: "clip2";
+                               after: "show4";
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "clip2";
+                               after: "stop_glow";
+                       }
+                       program { name: "stop_glow";
+                               action: ACTION_STOP;
+                               target: "show";
+                               target: "show4";
+                       }
+               }
+       }
+
+
+       group { name: "elm/entry/selection/default";
+               parts {
+                       part { name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description { state: "default" 0.0;
+                                       color: ENTRY_SELECTION_BG_COLOR;
+                               }
+                       }
+               }
+       }
+
+       group { name: "elm/entry/selection/block_handle";
+       data.item: "position" "BOTH";
+               images {
+                 image: GALLERY_EDC_IMAGE_READER_HANDLER_UP COMP;
+               }
+               parts {
+                       part { name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       fixed: 1 1;
+                                       align: 0.5 0.25;
+                                       min: 50 80;
+                                       color: 0 0 0 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "handle";
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                               fixed: 1 1;
+                                       align: 0.5 0.0;
+                                       min: 48 66;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 0;
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 0;
+                                       }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_READER_HANDLER_UP;
+                                               border: 0 0 0 0;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               action: STATE_SET "show" 0.0;
+                               target: "handle";
+                               target: "bg";
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "handle";
+                               target: "bg";
+                       }
+               }
+       }
+
+       group { name: "elm/entry/selection/block_handle_top";
+       data.item: "position" "BOTH";
+               images {
+                 image: GALLERY_EDC_IMAGE_READER_HANDLER_DOWN COMP;
+               }
+               parts {
+                       part { name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       fixed: 1 1;
+                                       align: 0.5 0.75;
+                                       min: 50 80;
+                                       color: 0 0 0 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "handle";
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                               fixed: 1 1;
+                                       align: 0.5 1.0;
+                                       min: 48 66;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 0;
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 0;
+                                       }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_READER_HANDLER_DOWN;
+                                               border: 0 0 0 0;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               action: STATE_SET "show" 0.0;
+                               target: "handle";
+                               target: "bg";
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "handle";
+                               target: "bg";
+                       }
+               }
+       }
+/////////////////////////////////////////////////////////////////////////
+       group { name: "elm/entry/selection/block_handle_left";
+               data.item: "position" "BOTTOM";
+               data.item: "height" "40";
+               images {
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_PRESS COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP_PRESS COMP;
+               }
+               parts {
+                       part { name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       fixed: 1 1;
+                                       align: 1 0;
+                                       min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+                                       color: 0 0 0 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "handle";
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       fixed: 1 1;
+                                       align: 1 0;
+                                       min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+                                       rel1 {
+                                               relative: 1.1 0.0;
+                                               offset: 0 -2;
+                                               to: "bg";
+                                       }
+                                       rel2 {
+                                               relative: 1.1 0.0;
+                                               offset: 0 -2;
+                                               to: "bg";
+                                       }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT;
+                                               border: 0 0 0 0;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description { state: "top" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       align: 1 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP;
+                                       }
+                               }
+                               description { state: "press" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_PRESS;
+                                       }
+                               }
+                               description { state: "top_press" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       align: 1 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_LEFT_TOP_PRESS;
+                                       }
+                               }
+                       }
+               }
+               script {
+                       public handler_ontop;
+                       public handler_pressed;
+                       public handler_focused;
+               }
+               programs {
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               script {
+                                       set_int(handler_focused, 1);
+                               }
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               script {
+                                       set_int(handler_focused, 0);
+                                       set_state(PART:"handle", "default", 0.0);
+                               }
+                       }
+                       program { name: "top";
+                       signal: "elm,state,top";
+                               source: "elm";
+                               script {
+                                       new pressed;
+                                       new focused;
+                                       pressed = get_int(handler_pressed);
+                                       focused = get_int(handler_focused);
+                                       set_int(handler_ontop, 1);
+                                        if (focused)
+                                        {
+                                             if (pressed)
+                                               set_state(PART:"handle", "top_press", 0.0);
+                                             else
+                                               set_state(PART:"handle", "top", 0.0);
+                                        }
+                                        else
+                                        {
+                                             set_state(PART:"handle", "default", 0.0);
+                                        }
+                               }
+                       }
+                       program { name: "bottom";
+                       signal: "elm,state,bottom";
+                               source: "elm";
+                               script {
+                                       new pressed;
+                                       new focused;
+                                       pressed = get_int(handler_pressed);
+                                       focused = get_int(handler_focused);
+                                       set_int(handler_ontop, 0);
+                                        if (focused)
+                                        {
+                                             if (pressed)
+                                               set_state(PART:"handle", "press", 0.0);
+                                             else
+                                               set_state(PART:"handle", "show", 0.0);
+                                        }
+                                        else
+                                        {
+                                             set_state(PART:"handle", "default", 0.0);
+                                        }
+                               }
+                       }
+                       program { name: "pressed";
+                               signal: "mouse,down,1";
+                               source: "handle";
+                               script {
+                                       new pos;
+                                       pos = get_int(handler_ontop);
+                                       set_int(handler_pressed, 1);
+                                       if (pos)
+                                               set_state(PART:"handle", "top_press", 0.0);
+                                       else
+                                               set_state(PART:"handle", "press", 0.0);
+                               }
+                       }
+                       program { name: "unpressed";
+                               signal: "mouse,up,1";
+                               source: "handle";
+                               script {
+                                       new pos;
+                                       pos = get_int(handler_ontop);
+                                       set_int(handler_pressed, 0);
+                                       if (pos)
+                                               set_state(PART:"handle", "top", 0.0);
+                                       else
+                                               set_state(PART:"handle", "show", 0.0);
+                               }
+                       }
+               }
+       }
+
+       group { name: "elm/entry/selection/block_handle_right";
+               data.item: "position" "BOTH";
+               data.item: "height" "40";
+               images {
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_PRESS COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP COMP;
+                 image: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP_PRESS COMP;
+               }
+               parts {
+                       part { name: "handle";
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       fixed: 1 1;
+                                       align: 0 0;
+                                       min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 -2;
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 -2;
+                                       }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT;
+                                               border: 0 0 0 0;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description { state: "top" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       align: 0 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP;
+                                       }
+                               }
+                               description { state: "press" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_PRESS;
+                                       }
+                               }
+                               description { state: "top_press" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       align: 0 1;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_COPY_PASTE_RIGHT_TOP_PRESS;
+                                       }
+                               }
+                       }
+               }
+               script {
+                       public handler_ontop;
+                       public handler_pressed;
+                       public handler_focused;
+               }
+               programs {
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               script {
+                                       set_int(handler_focused, 1);
+                               }
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               script {
+                                       set_int(handler_focused, 0);
+                                       set_state(PART:"handle", "default", 0.0);
+                               }
+                       }
+                       program { name: "top";
+                       signal: "elm,state,top";
+                               source: "elm";
+                               script {
+                                       new pressed;
+                                       new focused;
+                                       pressed = get_int(handler_pressed);
+                                       focused = get_int(handler_focused);
+                                        set_int(handler_ontop, 1);
+                                        if (focused)
+                                        {
+                                             if (pressed)
+                                               set_state(PART:"handle", "top_press", 0.0);
+                                             else
+                                               set_state(PART:"handle", "top", 0.0);
+                                        }
+                                        else
+                                        {
+                                             set_state(PART:"handle", "default", 0.0);
+                                        }
+                               }
+                       }
+                       program { name: "bottom";
+                       signal: "elm,state,bottom";
+                               source: "elm";
+                               script {
+                                       new pressed;
+                                       new focused;
+                                       pressed = get_int(handler_pressed);
+                                       focused = get_int(handler_focused);
+                                       set_int(handler_ontop, 0);
+                                        if (focused)
+                                        {
+                                             if (pressed)
+                                               set_state(PART:"handle", "press", 0.0);
+                                             else
+                                               set_state(PART:"handle", "show", 0.0);
+                                        }
+                                        else
+                                        {
+                                             set_state(PART:"handle", "default", 0.0);
+                                        }
+                               }
+                       }
+                       program { name: "pressed";
+                               signal: "mouse,down,1";
+                               source: "handle";
+                               script {
+                                       new pos;
+                                       pos = get_int(handler_ontop);
+                                       set_int(handler_pressed, 1);
+                                       if (pos)
+                                               set_state(PART:"handle", "top_press", 0.0);
+                                       else
+                                               set_state(PART:"handle", "press", 0.0);
+                               }
+                       }
+                       program { name: "unpressed";
+                               signal: "mouse,up,1";
+                               source: "handle";
+                               script {
+                                       new pos;
+                                       pos = get_int(handler_ontop);
+                                       set_int(handler_pressed, 0);
+                                       if (pos)
+                                               set_state(PART:"handle", "top", 0.0);
+                                       else
+                                               set_state(PART:"handle", "show", 0.0);
+                               }
+                       }
+               }
+       }
+
+
+/////////////////////////////////////////////////////////////////////////
+
+       group { name: "elm/entry/selection/block_bar";
+               images {
+                 image: GALLERY_EDC_IMAGE_LONGTAP_BLUE COMP;
+               }
+               parts {
+                       part { name: "bar_bg";
+                               scale: 1;
+                               mouse_events: 0;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_LONGTAP_BLUE;
+                                               border: 0 0 0 0;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+               }
+       }
+
+
+
+       group { name: "elm/entry/anchor/default";
+               parts {
+                       part { name: "bg";
+                               type: RECT;
+                               mouse_events: 0;
+                               description { state: "default" 0.0;
+                                       color: 128 0 0 64;
+                               }
+                       }
+               }
+       }
+
+    group { name: "elm/entry/preedit/default";
+        parts {
+            part { name: "bg";
+                type: RECT;
+                mouse_events: 0;
+                description { state: "default" 0.0;
+                    color: 128 128 128 255;
+                }
+            }
+        }
+   }
+
+
+#define MAGNIFIER_SCALE 1.2
+
+       group { name: "elm/entry/magnifier/fill-width";
+               data.item: "height" MAGNIFIER_HEIGHT_FILL;
+               data.item: "scale" MAGNIFIER_SCALE;
+               images {
+                 image: GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW COMP;
+                 image: GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW_LINE COMP;
+               }
+               parts {
+                       part { name: "bg";
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.5 0.0;
+                                       rel1 { offset: -20 -10; }
+                                       rel2 { offset: 22 15; }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW;
+                                               border: 25 25 35 25;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+                       part { name: "swallow";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "bg";
+                                               offset: 18 18;
+                                       }
+                                       rel2 {
+                                               to: "bg";
+                                               offset: -20 -20;
+                                       }
+                               }
+                       }
+                       part { name: "outline";
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       align: 0.0 0.0;
+                                       rel1 { to: "bg"; offset: 0 0; }
+                                       rel2 { to: "bg"; offset: -1 -1; }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_MAGNIFIER_NOARROW_LINE;
+                                               border: 25 25 35 25;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+               }
+       }
+
+
+       group { name: "elm/entry/magnifier/fixed-size";
+               data.item: "height" MAGNIFIER_HEIGHT_FIXED;
+               data.item: "scale" MAGNIFIER_SCALE;
+               images {
+                 image: GALLERY_EDC_IMAGE_MAGNIFIER COMP;
+                 image: GALLERY_EDC_IMAGE_MAGNIFIER_LINE COMP;
+               }
+               parts {
+                       part { name: "bg";
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                               fixed: 1 1;
+                                       min: MAGNIFIER_WIDTH_FIXED MAGNIFIER_HEIGHT_FIXED;
+                                       align: 0.5 0.0;
+                                       rel1.offset: 0 8;
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_MAGNIFIER;
+                                               border: 12 14 14 20;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+                       part { name: "swallow";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                               fixed: 1 1;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "bg";
+                                               offset: 12 14;
+                                       }
+                                       rel2 {
+                                               to: "bg";
+                                               offset: -14 -20;
+                                       }
+                               }
+                       }
+                       part { name: "outline";
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                               fixed: 1 1;
+                                       visible: 0;
+                                       align: 0.0 0.0;
+                                       rel1 { to: "bg"; offset: 0 0; }
+                                       rel2 { to: "bg"; offset: -1 -1; }
+                                       image {
+                                               normal: GALLERY_EDC_IMAGE_MAGNIFIER_LINE;
+                                               border: 12 14 14 20;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+               }
+       }
+
+       group { name: "elm/entry/matchlist/default";
+               data.item: "max_height" "230";
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               scale : 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description { state: "default" 0.0;
+                                       color: 0 0 0 0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               offset: 0 20;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               offset: 0 20;
+                                       }
+                               }
+                       }
+                       part { name: "elm.swallow.content";
+                               type: SWALLOW;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               to: "base";
+                                       }
+                                       rel2 {
+                                               to: "base";
+                                       }
+                               }
+                       }
+               }
+       }
+
+/* Entry's bubble style */
+
+      styles
+       {
+          style { name: "entry_bubble_date_area_textblock_style";
+             base: "font=SLP:style=Roman font_size="ENTRY_BUBBLE_DATE_AREA_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" left_margin=2 right_margin=2 wrap=mixed text_class_entry";
+             tag:  "br" "\n";
+             tag:  "ps" "ps";
+             tag:  "tab" "\t";
+             tag:  "em" "+ font=SLP:style=Oblique";
+             tag:  "b" "+ font=SLP:style=Bold";
+             tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+             tag:  "hilight" "+ font=SLP:style=Bold";
+             tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+             tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+          }
+       }
+
+   group { name: "elm/entry/base/readmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel2.relative: 0.0 1.0;
+           }
+         }
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_IX_PAD 0;
+              fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 1.0 0.0; to: "elm.text"; }
+               rel2.to: "elm.text";
+           }
+        }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+            }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+            }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              rel2.to_x: "elm.rect.right.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE;
+                 border: 1 11 7 12;
+                 border_scale: 1;
+              }
+           }
+        }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: EDITABLE;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source4: "elm/entry/cursor/default"; // cursorover
+           source5: "elm/entry/anchor/default"; // anchor under
+//         source6: "X"; // anchor over
+           description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+               rel2 { relative: 1.0 0.0; to_y: "elm.rect.bottom.pad"; }
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+                  max: 1 0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base-noedit/readmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel2.relative: 0.0 1.0;
+           }
+         }
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: ENTRY_BUBBLE_IX_PAD 0;
+              fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 1.0 0.0; to: "elm.text"; }
+               rel2.to: "elm.text";
+           }
+        }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.topleft.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+              max: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+              fixed: 1 1;
+              align: 0.0 0.0;
+              visible: 0;
+           }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_BOTTOM_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+           }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              rel2.to_x: "elm.rect.right.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE;
+                 border: 1 11 7 12;
+                 border_scale: 1;
+              }
+           }
+        }
+         // it's temporary blocked for prepare entry's signal feature
+         /*
+         part {
+           name: "elm.text.subject";
+           type: TEXTBLOCK;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              align: 0.0 0.0;
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+              }
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.top.pad"; }
+           }
+         }
+         */
+         part {
+           name: "elm.rect.subject.line";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              visible: 0;
+              min: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 255;
+              /*
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.text.subject"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.text.subject"; }
+              */
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.top.pad"; }
+           }
+         }
+         part {
+            name: "elm.swallow.callerid";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: ENTRY_BUBBLE_CALLERID_WIDTH ENTRY_BUBBLE_CALLERID_HEIGHT;
+               max: ENTRY_BUBBLE_CALLERID_WIDTH ENTRY_BUBBLE_CALLERID_HEIGHT;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               visible: 0;
+               rel1 { relative: 1.0 1.0; to: "elm.rect.topleft.pad"; to_y: "elm.rect.topleft.pad"; }
+               rel2 { relative: 1.0 0.0; to_y: "elm.rect.bottom.pad"; }
+            }
+            description { state: "callerid_on" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part {
+            name: "elm.rect.callerid.pad";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+               max: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               visible: 0;
+               rel1 { relative: 1.0 1.0; to: "elm.swallow.callerid"; to_y: "elm.rect.top.pad"; }
+               rel2 { relative: 1.0 0.0; to_y: "elm.rect.bottom.pad"; }
+            }
+         }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description {
+               state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.subject.line"; }
+               rel2 { relative: 1.0 1.0; to_y: "elm.rect.subject.line"; }
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+                  max: 1 0;
+              }
+            }
+            description { state: "callerid_on" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 1.0 1.0; to_x: "elm.rect.callerid.pad"; to_y: "elm.rect.subject.line"; }
+               rel2 { relative: 1.0 1.0; to_y: "elm.rect.subject.line"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               text {
+                  style: "entry_textblock_disabled_style";
+               }
+            }
+        }
+         part {
+            name: "elm.rect.status.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_6_INC GENLIST_SIZE_64_INC;
+              fixed: 1 1;
+              align: 0.0 1.0;
+               visible: 0;
+              rel1 { relative: 1.5 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+              rel2 { relative: 1.0 1.0; to_y: "elm.rect.bottom.pad"; }
+           }
+        }
+         part {
+            name: "elm.rect.time.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_6_INC GENLIST_PADDING_34_INC;
+               max: GENLIST_PADDING_6_INC GENLIST_PADDING_34_INC;
+              fixed: 1 1;
+              align: 0.0 0.0;
+               visible: 0;
+              rel1.to: "elm.rect.status.pad";
+              rel2 { relative: 1.0 1.0; to_y: "elm.rect.bottom.pad"; }
+           }
+        }
+         part { name: "elm.text.status";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 1.0;
+               fixed: 1 1;
+               text {
+                  font: "SLP:style=Roman";
+                  size: GENLIST_FONT_28_INC;
+                  min: 1 0;
+               }
+               visible: 1;
+               color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+               rel1 { relative: 0.0 0.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.status.pad"; }
+               rel2 { relative: 0.0 0.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.status.pad"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.text.time";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               text {
+                  font: "SLP:style=Roman";
+                  size: GENLIST_FONT_28_INC;
+                  min: 1 0;
+               }
+               visible: 1;
+               color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+               rel1 { relative: 0.0 1.0; to_x: "elm.rect.time.pad"; to_y: "elm.rect.time.pad"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.rect.time.pad"; to_y: "elm.rect.time.pad"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part {
+            name: "elm.swallow.icon1";
+           type: SWALLOW;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_64_INC GENLIST_PADDING_64_INC;
+               max: GENLIST_PADDING_64_INC GENLIST_PADDING_64_INC;
+              fixed: 1 1;
+              align: 0.0 1.0;
+               visible: 0;
+              rel1 { relative: 1.5 0.3; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+              rel2 { relative: 1.0 0.3; to_y: "elm.rect.bottom.pad"; }
+           }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+        }
+         part {
+           name: "elm.swallow.end";
+           type: SWALLOW;
+           scale: 1;
+           description { state: "default" 0.0;
+              align: 0.0 0.0;
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.text"; }
+              rel2 { relative: 0.0 0.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+           }
+         }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+        program { name: "go_callerid_on";
+           signal: "elm,state,callerid,enabled";
+           source: "elm";
+           action: STATE_SET "callerid_on" 0.0;
+           target: "elm.swallow.callerid";
+           target: "elm.text";
+        }
+        program { name: "go_callerid_off";
+           signal: "elm,state,callerid,disabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.swallow.callerid";
+           target: "elm.text";
+        }
+        program { name: "go_textstatus_on";
+           signal: "elm,state,text,status,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text.time";
+           target: "elm.text.status";
+            after: "go_contentstatus_off";
+        }
+        program { name: "go_textstatus_off";
+           signal: "elm,state,text,status,disbled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text.time";
+           target: "elm.text.status";
+        }
+        program { name: "go_contentstatus_on";
+           signal: "elm,state,content,status,enabled";
+           source: "elm";
+           action: STATE_SET "enabled" 0.0;
+           target: "elm.swallow.icon1";
+            after: "go_textstatus_off";
+        }
+        program { name: "go_contentstatus_off";
+           signal: "elm,state,content,status,disabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.swallow.icon1";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base-noedit-charwrap/readmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel2.relative: 0.0 1.0;
+           }
+         }
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: ENTRY_BUBBLE_IX_PAD 0;
+               fixed: 1 0;
+              align: 0.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 1.0 0.0; to_x: "elm.text"; }
+               rel2.to_x: "elm.text";
+           }
+        }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+           }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              rel2.to_x: "elm.rect.right.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_RECEIVE;
+                 border: 1 20 13 20;
+                 border_scale: 1;
+              }
+           }
+        }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+               rel2 { relative: 1.0 0.0; to_y: "elm.rect.bottom.pad"; }
+              text {
+                 style: "entry_textblock_style_charwrap";
+                 min: 0 1;
+                  max: 1 0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style_charwrap";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base/sentmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+               rel1.relative: 1.0 0.0;
+           }
+         }
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_IX_PAD 0;
+              fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 0.0 0.0; to: "elm.text"; }
+               rel2 { relative: 0.0 1.0; to: "elm.text"; }
+           }
+        }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+           }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               rel1.to_x: "elm.rect.left.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND;
+                 border: 20 1 13 20;
+                 border_scale: 1;
+              }
+           }
+        }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: EDITABLE;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source4: "elm/entry/cursor/default"; // cursorover
+           source5: "elm/entry/anchor/default"; // anchor under
+//         source6: "X"; // anchor over
+           description { state: "default" 0.0;
+              fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "elm.rect.top.pad";}
+               rel2 { relative: 0.0 0.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+                  max: 1 0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base-noedit/sentmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+               rel1.relative: 1.0 0.0;
+           }
+         }
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_IX_PAD 0;
+              fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 0.0 0.0; to: "elm.text"; }
+               rel2 { relative: 0.0 1.0; to: "elm.text"; }
+           }
+        }
+         part {
+           name: "elm.rect.topright.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+              max: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+              align: 1.0 0.0;
+              visible: 0;
+              rel1.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_BOTTOM_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+           }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               rel1.to_x: "elm.rect.left.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND;
+                 border: 20 1 13 20;
+                 border_scale: 1;
+              }
+           }
+        }
+         // it's temporary blocked for prepare entry's signal feature
+         /*
+         part {
+           name: "elm.text.subject";
+           type: TEXTBLOCK;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              align: 0.0 0.0;
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+              }
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.top.pad"; }
+           }
+         }
+         */
+         part {
+           name: "elm.rect.subject.line";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              visible: 0;
+              min: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 255;
+              /*
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.text.subject"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.text.subject"; }
+              */
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.top.pad"; }
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.top.pad"; }
+           }
+         }
+         part {
+            name: "elm.swallow.callerid";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: ENTRY_BUBBLE_CALLERID_WIDTH ENTRY_BUBBLE_CALLERID_HEIGHT;
+               max: ENTRY_BUBBLE_CALLERID_WIDTH ENTRY_BUBBLE_CALLERID_HEIGHT;
+               align: 1.0 0.0;
+               visible: 0;
+               rel1 { relative: 0.0 1.0; to_x: "elm.rect.topright.pad"; to_y: "elm.rect.topright.pad"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.rect.topright.pad"; to_y: "elm.rect.bottom.pad"; }
+            }
+            description { state: "callerid_on" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part {
+            name: "elm.rect.callerid.pad";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+               max: ENTRY_BUBBLE_CALLERID_PAD ENTRY_BUBBLE_CALLERID_PAD;
+               align: 1.0 0.0;
+               visible: 0;
+               rel1 { relative: 0.0 1.0; to_x: "elm.swallow.callerid"; to_y: "elm.rect.topright.pad"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.swallow.callerid"; to_y: "elm.rect.bottom.pad"; }
+           }
+         }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description {
+               state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "elm.rect.subject.line";}
+               rel2 { relative: 0.0 1.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.subject.line"; }
+              text {
+                 style: "entry_textblock_style";
+                 min: 0 1;
+                  max: 1 0;
+              }
+           }
+           description { state: "callerid_on" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "elm.rect.subject.line";}
+               rel2 { relative: 0.0 1.0; to_x: "elm.rect.callerid.pad"; to_y: "elm.rect.subject.line"; }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style";
+              }
+           }
+        }
+         part {
+            name: "elm.rect.status.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_6_INC GENLIST_SIZE_64_INC;
+              fixed: 1 1;
+              align: 1.0 1.0;
+               visible: 0;
+              rel1 { relative: -0.8 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.bottom.pad"; }
+              rel2 { relative: -0.8 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.rect.bottom.pad"; }
+           }
+        }
+         part {
+            name: "elm.rect.time.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_6_INC GENLIST_PADDING_34_INC;
+               max: GENLIST_PADDING_6_INC GENLIST_PADDING_34_INC;
+              fixed: 1 1;
+              align: 0.0 0.0;
+               visible: 0;
+              rel1.to: "elm.rect.status.pad";
+              rel2 { relative: 0.0 1.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.bottom.pad"; }
+           }
+        }
+         part { name: "elm.text.status";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 1.0 1.0;
+               fixed: 1 1;
+               text {
+                  font: "SLP:style=Roman";
+                  size: GENLIST_FONT_28_INC;
+                  min: 1 0;
+               }
+               visible: 1;
+               color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+               rel1 { relative: 0.0 0.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.status.pad"; }
+               rel2 { relative: 0.0 0.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.status.pad"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.text.time";
+            type: TEXT;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 1.0 0.0;
+               fixed: 1 1;
+               text {
+                  font: "SLP:style=Roman";
+                  size: GENLIST_FONT_28_INC;
+                  min: 1 0;
+               }
+               visible: 1;
+               color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+               rel1 { relative: 0.0 1.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.time.pad"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.rect.status.pad"; to_y: "elm.rect.time.pad"; }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part {
+            name: "elm.swallow.icon1";
+           type: SWALLOW;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               min: GENLIST_PADDING_64_INC GENLIST_PADDING_64_INC;
+               max: GENLIST_PADDING_64_INC GENLIST_PADDING_64_INC;
+              fixed: 1 1;
+              align: 1.0 1.0;
+               visible: 0;
+              rel1 { relative: -0.8 0.3; to_x: "elm.rect.left.pad"; to_y: "elm.rect.bottom.pad"; }
+              rel2 { relative: -0.8 0.3; to_x: "elm.rect.left.pad"; to_y: "elm.rect.bottom.pad"; }
+           }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+        }
+         part {
+           name: "elm.swallow.end";
+           type: SWALLOW;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              align: 0.0 0.0;
+              rel1 { relative: 1.0 1.0; to_x: "elm.rect.left.pad"; to_y: "elm.text"; }
+              rel2 { relative: 0.0 0.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+           }
+         }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+        program { name: "go_callerid_on";
+           signal: "elm,state,callerid,enabled";
+           source: "elm";
+           action: STATE_SET "callerid_on" 0.0;
+           target: "elm.swallow.callerid";
+           target: "elm.text";
+        }
+        program { name: "go_callerid_off";
+           signal: "elm,state,callerid,disabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.swallow.callerid";
+           target: "elm.text";
+        }
+        program { name: "go_textstatus_on";
+           signal: "elm,state,text,status,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text.time";
+           target: "elm.text.status";
+            after: "go_contentstatus_off";
+        }
+        program { name: "go_textstatus_off";
+           signal: "elm,state,text,status,disbled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text.time";
+           target: "elm.text.status";
+        }
+        program { name: "go_contentstatus_on";
+           signal: "elm,state,content,status,enabled";
+           source: "elm";
+           action: STATE_SET "enabled" 0.0;
+           target: "elm.swallow.icon1";
+            after: "go_textstatus_off";
+        }
+        program { name: "go_contentstatus_off";
+           signal: "elm,state,content,status,disabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.swallow.icon1";
+        }
+      }
+   }
+
+   group { name: "elm/entry/base-noedit-charwrap/sentmessage";
+      data.item: "default_font_size" "24";
+      data.item: "min_font_size" "8";
+      data.item: "max_font_size" "60";
+      data {
+         item: context_menu_orientation "horizontal";
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND COMP;
+      }
+      parts {
+         part {
+            name: "elm.rect.right.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_EX_PAD 0;
+               fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+               rel1.relative: 1.0 0.0;
+           }
+         }
+         part {
+            name: "elm.rect.left.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: ENTRY_BUBBLE_IX_PAD 0;
+              fixed: 1 0;
+              align: 1.0 0.0;
+               color: 0 0 0 0;
+              rel1 { relative: 0.0 0.0; to: "elm.text"; }
+               rel2 { relative: 0.0 1.0; to: "elm.text"; }
+           }
+        }
+         part {
+           name: "elm.rect.top.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 0.0;
+              color: 0 0 0 0;
+              rel2.relative: 1.0 0.0;
+           }
+         }
+         part {
+           name: "elm.rect.bottom.pad";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 ENTRY_BUBBLE_Y_PAD;
+              fixed: 0 1;
+              align: 0.0 1.0;
+              color: 0 0 0 0;
+              rel1.relative: 0.0 1.0;
+           }
+         }
+        part {
+           name: "elm.image.bg";
+           type: IMAGE;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+               rel1.to_x: "elm.rect.left.pad";
+              image {
+                 normal: GALLERY_EDC_IMAGE_MSGBUBBLE_SEND;
+                 border: 20 1 13 20;
+                 border_scale: 1;
+              }
+           }
+        }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 1;
+           scale: 1;
+           entry_mode: PLAIN;
+           select_mode: BLOCK_HANDLE;
+           //cursor_mode: BEFORE;
+           multiline: 1;
+           source: "elm/entry/selection/default"; // selection under
+           source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+           source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+           source5: "elm/entry/anchor/default"; // anchor under
+           description { state: "default" 0.0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "elm.rect.top.pad";}
+               rel2 { relative: 0.0 0.0; to_x: "elm.rect.right.pad"; to_y: "elm.rect.bottom.pad"; }
+              text {
+                 style: "entry_textblock_style_charwrap";
+                 min: 0 1;
+                  max: 1 0;
+              }
+           }
+           description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+              text {
+                 style: "entry_textblock_disabled_style_charwrap";
+              }
+           }
+        }
+      }
+      programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+group { name: "elm/entry/base/font_color_black";
+   alias: "elm/entry/base-mixedwrap/font_color_black";
+   alias: "elm/entry/base/font_color_black/default";
+   alias: "elm/entry/base/font_color_black/lighting";
+   alias: "elm/entry/base/font_color_black/multiline";
+   alias: "elm/entry/base/font_color_black/multiline/default";
+   alias: "elm/entry/base/font_color_black/multiline/lighting";
+   alias: "elm/entry/base/editfield/font_color_black";
+
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+
+   styles {
+      style { name: "font_color_black_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#000000FF wrap=mixed left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+      style { name: "font_color_black_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=mixed left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "font_color_black_textblock_style";
+               min: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-noedit/font_color_black";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PLAIN;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "font_color_black_textblock_style";
+               min: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-charwrap/font_color_black";
+   alias: "elm/entry/base/font_color_black/char_wrap";
+   alias: "elm/entry/base/font_color_black/default/char_wrap";
+   alias: "elm/entry/base/font_color_black/lighting/char_wrap";
+   alias: "elm/entry/base/font_color_black/multiline/char_wrap";
+   alias: "elm/entry/base/font_color_black/multiline/default/char_wrap";
+   alias: "elm/entry/base/font_color_black/multiline/lighting/char_wrap";
+   alias: "elm/entry/base-charwrap/editfield/font_color_black";
+
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+
+   styles {
+      style { name: "font_color_black_textblock_char_wrap_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#000000FF wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+      style { name: "font_color_black_textblock_char_wrap_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "font_color_black_textblock_char_wrap_style";
+               min: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_textblock_char_wrap_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single/font_color_black";
+   alias: "elm/entry/base-single/font_color_black/default";
+   alias: "elm/entry/base-single/font_color_black/lighting";
+   alias: "elm/entry/base-single/font_color_black/singleline";
+   alias: "elm/entry/base-single/font_color_black/singleline/default";
+   alias: "elm/entry/base-single/font_color_black/singleline/lighting";
+   alias: "elm/entry/base-single/editfield/font_color_black";
+   alias: "elm/entry/base-single/editfield/searchbar/font_color_black";
+
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+
+   styles {
+      style { name: "font_color_black_single_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#000000FF wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+      style { name: "font_color_black_single_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color=#000000FF";
+         tag:  "preedit_sel" "+ backing=on backing_color=#000000FF color=#FFFFFFFF";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-single-noedit/font_color_black";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PLAIN;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+group { name: "elm/entry/base-password/font_color_black";
+   alias: "elm/entry/base-password/editfield/font_color_black";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: PASSWORD;
+         select_mode: BLOCK_HANDLE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_style";
+               repch: "*";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "font_color_black_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/scroller/entry/default";
+      alias : "elm/scroller/entry/editfield";
+      alias : "elm/scroller/entry/editfield/searchbar/default";
+      data {
+         item: "focus_highlight" "on";
+      }
+      script {
+         public sbvis_v, sbvis_h, sbalways_v, sbalways_h, sbvis_timer;
+         public timer0(val) {
+            new v;
+            v = get_int(sbvis_v);
+            if (v) {
+               v = get_int(sbalways_v);
+               if (!v) {
+                  emit("do-hide-vbar", "");
+                  set_int(sbvis_v, 0);
+               }
+            }
+            v = get_int(sbvis_h);
+            if (v) {
+               v = get_int(sbalways_h);
+               if (!v) {
+                  emit("do-hide-hbar", "");
+                  set_int(sbvis_h, 0);
+               }
+            }
+            set_int(sbvis_timer, 0);
+            return 0;
+         }
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_BT_SM_BASE2 COMP;
+      }
+      parts {
+         part { name: "bg";
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+            }
+         }
+         part { name: "contentclipper";
+            type: RECT;
+            mouse_events: 0;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.icon";
+               rel1.relative: 1.0 0.0;
+               rel2.to: "elm.swallow.end";
+               rel2.relative: 0.0 1.0;
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  to: "bg";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 0.0 1.0;
+               }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 1;
+               align: 0.0 1.0;
+               rel1 {
+                         to: "bg";
+                         relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 0.0 1.0;
+               }
+               visible: 1;
+            }
+         }
+         part { name: "elm.swallow.end";
+            type: SWALLOW;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  to: "bg";
+                  relative: 1.0 0.0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1.0 1.0;
+               }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               rel1 {
+                  to: "bg";
+                  relative: 1.0 0.0;
+               }
+               rel2 {
+                  to: "bg";
+                  relative: 1.0 1.0;
+               }
+               visible: 1;
+            }
+         }
+         part { name: "elm.swallow.content";
+            clip_to: "contentclipper";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1 {
+                       to: "elm.swallow.icon";
+                       relative: 1.0 0.0;
+               }
+               rel2 {
+                to: "elm.swallow.end";
+                relative: 0.0 1.0;
+               }
+            }
+         }
+         part { name: "sb_vbar_clip_master";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+            }
+            description { state: "hidden" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "sb_vbar_clip";
+            clip_to: "sb_vbar_clip_master";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+            }
+            description { state: "hidden" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "sb_vbar";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               visible: 0;
+               min: 10 17;
+               align: 1.0 0.0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to_y:     "elm.swallow.content";
+                  to_x:     "elm.swallow.end";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_y:     "sb_hbar";
+                  to_x:     "elm.swallow.end";
+               }
+            }
+         }
+         part { name: "elm.dragable.vbar";
+            clip_to: "sb_vbar_clip";
+            mouse_events: 0;
+            dragable {
+               x: 0 0 0;
+               y: 1 1 0;
+               confine: "sb_vbar";
+            }
+            description { state: "default" 0.0;
+               visible: 0;
+               fixed: 1 1;
+               min: 10 17;
+               max: 10 99999;
+               rel1 {
+                  relative: 0.5  0.5;
+                  to: "sb_vbar";
+               }
+               rel2 {
+                  relative: 0.5  0.5;
+                  to: "sb_vbar";
+               }
+               image {
+                  normal: GALLERY_EDC_IMAGE_BT_SM_BASE2;
+                  border: 6 6 6 6;
+                  middle: SOLID;
+               }
+            }
+         }
+         part { name: "sb_hbar_clip_master";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+            }
+            description { state: "hidden" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "sb_hbar_clip";
+            clip_to: "sb_hbar_clip_master";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+            }
+            description { state: "hidden" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+            }
+         }
+         part { name: "sb_hbar";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               visible: 0;
+               min: 17 10;
+               align: 0.0 1.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_x:     "elm.swallow.content";
+                  to_y:     "elm.swallow.content";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x:     "sb_vbar";
+                  to_y:     "elm.swallow.content";
+               }
+            }
+         }
+         part { name: "elm.dragable.hbar";
+            clip_to: "sb_hbar_clip";
+            mouse_events: 0;
+            dragable {
+               x: 1 1 0;
+               y: 0 0 0;
+               confine: "sb_hbar";
+            }
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: 17 10;
+               max: 99999 10;
+               rel1 {
+                  relative: 0.5  0.5;
+                  to: "sb_hbar";
+               }
+               rel2 {
+                  relative: 0.5  0.5;
+                  to: "sb_hbar";
+               }
+               image {
+                  normal: GALLERY_EDC_IMAGE_BT_SM_BASE2;
+                  border: 4 4 4 4;
+                  middle: SOLID;
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "load";
+            signal: "load";
+            source: "";
+            script {
+               set_state(PART:"sb_hbar_clip", "hidden", 0.0);
+               set_state(PART:"sb_vbar_clip", "hidden", 0.0);
+               set_int(sbvis_h, 0);
+               set_int(sbvis_v, 0);
+               set_int(sbalways_v, 0);
+               set_int(sbalways_h, 0);
+               set_int(sbvis_timer, 0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,action,show,icon";
+            source: "elm";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.swallow.icon";
+         }
+         program { name: "icon_hide";
+            signal: "elm,action,hide,icon";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.icon";
+         }
+         program { name: "end_show";
+            signal: "elm,action,show,end";
+            source: "elm";
+            action: STATE_SET "visible" 0.0;
+            target: "elm.swallow.end";
+         }
+         program { name: "end_hide";
+            signal: "elm,action,hide,end";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "elm.swallow.end";
+         }
+         program { name: "vbar_show";
+            signal: "elm,action,show,vbar";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "sb_vbar_clip_master";
+         }
+         program { name: "vbar_hide";
+            signal: "elm,action,hide,vbar";
+            source: "elm";
+            action:  STATE_SET "hidden" 0.0;
+            target: "sb_vbar_clip_master";
+         }
+         program { name: "vbar_show_always";
+            signal: "elm,action,show_always,vbar";
+            source: "elm";
+            script {
+               new v;
+               v = get_int(sbvis_v);
+               v |= get_int(sbalways_v);
+               if (!v) {
+                  set_int(sbalways_v, 1);
+                  emit("do-show-vbar", "");
+                  set_int(sbvis_v, 1);
+               }
+            }
+         }
+         program { name: "vbar_show_notalways";
+            signal: "elm,action,show_notalways,vbar";
+            source: "elm";
+            script {
+               new v;
+               v = get_int(sbalways_v);
+               if (v) {
+                  set_int(sbalways_v, 0);
+                  v = get_int(sbvis_v);
+                  if (!v) {
+                     emit("do-hide-vbar", "");
+                     set_int(sbvis_v, 0);
+                  }
+               }
+            }
+         }
+         program { name: "sb_vbar_show";
+            signal: "do-show-vbar";
+            source: "";
+            action:  STATE_SET "default" 0.0;
+            transition: LINEAR 0.5;
+            target: "sb_vbar_clip";
+         }
+         program { name: "sb_vbar_hide";
+            signal: "do-hide-vbar";
+            source: "";
+            action:  STATE_SET "hidden" 0.0;
+            transition: LINEAR 0.5;
+            target: "sb_vbar_clip";
+         }
+
+         program { name: "hbar_show";
+            signal: "elm,action,show,hbar";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "sb_hbar_clip_master";
+         }
+         program { name: "hbar_hide";
+            signal: "elm,action,hide,hbar";
+            source: "elm";
+            action:  STATE_SET "hidden" 0.0;
+            target: "sb_hbar_clip_master";
+         }
+         program { name: "hbar_show_always";
+            signal: "elm,action,show_always,hbar";
+            source: "elm";
+            script {
+               new v;
+               v = get_int(sbvis_h);
+               v |= get_int(sbalways_h);
+               if (!v) {
+                  set_int(sbalways_h, 1);
+                  emit("do-show-hbar", "");
+                  set_int(sbvis_h, 1);
+               }
+            }
+         }
+         program { name: "hbar_show_notalways";
+            signal: "elm,action,show_notalways,hbar";
+            source: "elm";
+            script {
+               new v;
+               v = get_int(sbalways_h);
+               if (v) {
+                  set_int(sbalways_h, 0);
+                  v = get_int(sbvis_h);
+                  if (!v) {
+                     emit("do-hide-hbar", "");
+                     set_int(sbvis_h, 0);
+                  }
+               }
+            }
+         }
+         program { name: "sb_hbar_show";
+            signal: "do-show-hbar";
+            source: "";
+            action:  STATE_SET "default" 0.0;
+            transition: LINEAR 0.5;
+            target: "sb_hbar_clip";
+         }
+         program { name: "sb_hbar_hide";
+            signal: "do-hide-hbar";
+            source: "";
+            action:  STATE_SET "hidden" 0.0;
+            transition: LINEAR 0.5;
+            target: "sb_hbar_clip";
+         }
+
+         program { name: "scroll";
+            signal: "elm,action,scroll";
+            source: "elm";
+            script {
+               new v;
+               v = get_int(sbvis_v);
+               v |= get_int(sbalways_v);
+               if (!v) {
+                  emit("do-show-vbar", "");
+                  set_int(sbvis_v, 1);
+               }
+               v = get_int(sbvis_h);
+               v |= get_int(sbalways_h);
+               if (!v) {
+                  emit("do-show-hbar", "");
+                  set_int(sbvis_h, 1);
+               }
+               v = get_int(sbvis_timer);
+               if (v > 0) cancel_timer(v);
+               v = timer(1.0, "timer0", 0);
+               set_int(sbvis_timer, v);
+            }
+         }
+      }
+   }
+group { name: "elm/entry/base/gallery/rename";
+   alias: "elm/entry/base-mixedwrap/gallery/rename";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_rename_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_RENAME_INC" left_margin=1 right_margin=2 wrap=mixed text_class=entry";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+      style { name: "editfield_rename_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 left_margin=1 right_margin=2 wrap=mixed text_class=entry";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "editfield_rename_textblock_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_rename_textblock_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
+
+group { name: "elm/entry/base-charwrap/gallery/rename";
+   alias: "elm/entry/base/gallery/rename/char_wrap";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_rename_textblock_char_wrap_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_RENAME_INC" wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+      style { name: "editfield_rename_textblock_char_wrap_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=char left_margin=1 right_margin=2";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 1;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         //source6: "X"; // anchor over
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            text {
+               style: "editfield_rename_textblock_char_wrap_style";
+               min: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_rename_textblock_char_wrap_disabled_style";
+               min: 0 1;
+            }
+         }
+      }
+   }
+   programs {
+        program { name: "focus";
+            signal: "load";
+           source: "";
+           action: FOCUS_SET;
+           target: "elm.text";
+        }
+        program { name: "disable";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "elm.text";
+        }
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "elm.text";
+        }
+      }
+   }
+
+////////////////////////////RENAME STYLE///////////////////////////////////
+
+group { name: "elm/entry/base-single/gallery/rename";
+   alias: "elm/entry/base-single/gallery/rename/default";
+   alias: "elm/entry/base-single/gallery/rename/lighting";
+   alias: "elm/entry/base-single/gallery/rename/singleline";
+   alias: "elm/entry/base-single/gallery/rename/singleline/default";
+   alias: "elm/entry/base-single/gallery/rename/singleline/lighting";
+   data.item: "default_font_size" "24";
+   data.item: "min_font_size" "8";
+   data.item: "max_font_size" "60";
+   styles {
+      style { name: "editfield_rename_single_textblock_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_RENAME_INC" wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#800 underline=on underline_color=#8008";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+      style { name: "editfield_rename_single_textblock_disabled_style";
+         base: "font=Helvetica Neue:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=none left_margin=1 right_margin=3";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "tab" "\t";
+         tag:  "em" "+ font=Helvetica Neue:style=Oblique";
+         tag:  "b" "+ font=Helvetica Neue:style=Bold";
+         tag:  "link" "+ color=#00000080 underline=on underline_color=#00000080";
+         tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+         tag:  "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC"";
+         tag:  "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_RENAME_INC" color="ENTRY_PREEDIT_TEXT_COLOR_RENAME_INC"";
+      }
+   }
+   data {
+      item: context_menu_orientation "horizontal";
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 1;
+         scale: 1;
+         entry_mode: EDITABLE;
+         select_mode: BLOCK_HANDLE;
+         //cursor_mode: BEFORE;
+         multiline: 0;
+         source: "elm/entry/selection/default"; // selection under
+         source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+         source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+         source4: "elm/entry/cursor/default"; // cursorover
+         source5: "elm/entry/anchor/default"; // anchor under
+         description { state: "default" 0.0;
+            text {
+               style: "editfield_rename_single_textblock_style";
+               min: 1 1;
+               max: 0 1;
+            }
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            text {
+               style: "editfield_rename_single_textblock_disabled_style";
+            }
+         }
+      }
+   }
+   programs {
+      program { name: "focus";
+         signal: "load";
+         source: "";
+         action: FOCUS_SET;
+         target: "elm.text";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "elm.text";
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+   }
+}
diff --git a/res/edc/gl-gengrid-item-albums.edc b/res/edc/gl-gengrid-item-albums.edc
new file mode 100755 (executable)
index 0000000..bbf6ea9
--- /dev/null
@@ -0,0 +1,414 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+/* 14 + 334 + 10 */
+#define ALBUM_ITEM_W 358
+/* 26 + 334 */
+#define ALBUM_ITEM_H 360
+
+#define ALBUM_W 334
+#define ALBUM_H 334
+
+#define ALBUM_GAP_L 12
+#define ALBUM_GAP_R 12
+#define ALBUM_GAP_T 26
+
+#define ALBUM_ICON_W 318
+#define ALBUM_ICON_H 318
+
+#define ALBUM_ICON_GAP_L 8
+#define ALBUM_ICON_GAP_R 8
+#define ALBUM_ICON_GAP_B 16
+#define ALBUM_ICON_PAD 3
+
+#define ALBUM_TEXT_AREA_W 207
+#define ALBUM_TEXT_AREA_H 102
+#define ALBUM_TEXT_GAP_L 4
+#define ALBUM_TEXT_GAP_R 4
+#define ALBUM_TEXT_NAME_H 32
+#define ALBUM_TEXT_DATE_H 25
+#define ALBUM_TEXT_Y 60
+
+#define ALBUM_RENAME_BTN_W 64
+#define ALBUM_RENAME_BTN_H 64
+
+#define ALBUM_CHECKBOX_W 42
+#define ALBUM_CHECKBOX_H 42
+#define ALBUM_CHECKBOX_GAP_L 1
+#define ALBUM_CHECKBOX_GAP_T 8
+
+
+group {
+       name: "elm/gengrid/item/gallery/albums_view/default";
+
+       data.item: "texts" "elm.text.name elm.text.date elm.text.count";
+       data.item: "contents" "elm.swallow.firsticon elm.swallow.icon elm.swallow.onlyicon elm.swallow.end elm.swallow.check_grid label_bg elm.swallow.rename";
+
+       images {
+               image: GALLERY_EDC_IMAGE_MAIN_FOLDER_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: 255 0 0 0;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_W ALBUM_H;
+                               state: "default" 0.0;
+                               image {
+                                       normal : GALLERY_EDC_IMAGE_MAIN_FOLDER_BG;
+                               }
+                               rel1 { relative: ALBUM_GAP_L/ALBUM_ITEM_W ALBUM_GAP_T/ALBUM_ITEM_H; to:"bg"; }
+                               rel2 { relative: (ALBUM_ITEM_W-ALBUM_GAP_R-1)/ALBUM_ITEM_W 1.0; to:"bg"; }
+                       }
+               }
+               part { name: "icon_bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_ICON_W ALBUM_ICON_H;
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_ICON_GAP_L/ALBUM_ICON_W 0.0; to:"icon_bg_img"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_GAP_R+2)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_GAP_B+2)/ALBUM_ICON_H; to:"icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.onlyicon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "label_bg";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                               rel2 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W-1)/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H-1)/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.firsticon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W+ALBUM_ICON_PAD)/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.text.date";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W  ALBUM_TEXT_NAME_H/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  (ALBUM_TEXT_NAME_H+ALBUM_TEXT_DATE_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               color: 190 190 190 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 22;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.text.count";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               rel1 { relative: ((ALBUM_TEXT_GAP_L+1)/ALBUM_TEXT_AREA_W)  ALBUM_TEXT_Y/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  1.0; to: "label_bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 38;
+                                       align: 1.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.text.name";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W) 0.0; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W (ALBUM_TEXT_NAME_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 28;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.swallow.rename";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               min: ALBUM_RENAME_BTN_W ALBUM_RENAME_BTN_H;
+                               max: ALBUM_RENAME_BTN_W ALBUM_RENAME_BTN_H;
+                               rel1 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD-ALBUM_RENAME_BTN_W)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD-ALBUM_RENAME_BTN_H)/ALBUM_ICON_H); to:"icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H); to:"icon_bg"; } //-->GUI_v0.2_110309
+                       }
+               }
+               part {
+                       name: "elm.swallow.check_grid";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               max : (ALBUM_ICON_W+2) (ALBUM_ICON_H+2);
+                               rel1 { relative: (ALBUM_ICON_GAP_L-1)/ALBUM_ICON_W 0.0; to:"icon_bg_img"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_GAP_R+3)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_GAP_B+4)/ALBUM_ICON_H; to:"icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.end";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               min: ALBUM_CHECKBOX_W ALBUM_CHECKBOX_H;
+                               max: ALBUM_CHECKBOX_W ALBUM_CHECKBOX_H;
+                               rel1 { relative: (ALBUM_GAP_L-ALBUM_CHECKBOX_GAP_L)/ALBUM_ITEM_W (ALBUM_GAP_T-ALBUM_CHECKBOX_GAP_T)/ALBUM_ITEM_H; to:"bg"; }
+                               rel2 { relative: (ALBUM_GAP_L+ALBUM_CHECKBOX_W)/ALBUM_ITEM_W (ALBUM_GAP_T-ALBUM_CHECKBOX_GAP_T+ALBUM_CHECKBOX_H+1)/ALBUM_ITEM_H; to:"bg"; }
+                       }
+               }
+       }
+}
+
+group {
+       name: "elm/gengrid/item/gallery/albums_view_blue/default";
+
+       data.item: "texts" "elm.text.name elm.text.date elm.text.count";
+       data.item: "contents" "elm.swallow.firsticon elm.swallow.icon elm.swallow.onlyicon elm.swallow.end elm.swallow.check_grid label_bg elm.swallow.rename";
+
+       images {
+               image: GALLERY_EDC_IMAGE_MAIN_FOLDER_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: 255 0 0 0;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 1.0; }
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_W ALBUM_H;
+                               state: "default" 0.0;
+                               image {
+                                       normal : GALLERY_EDC_IMAGE_MAIN_FOLDER_BG;
+                               }
+                               rel1 { relative: ALBUM_GAP_L/ALBUM_ITEM_W ALBUM_GAP_T/ALBUM_ITEM_H; to:"bg"; }
+                               rel2 { relative: (ALBUM_ITEM_W-ALBUM_GAP_R-1)/ALBUM_ITEM_W 1.0; to:"bg"; }
+                       }
+               }
+               part { name: "icon_bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               min : ALBUM_ICON_W ALBUM_ICON_H;
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_ICON_GAP_L/ALBUM_ICON_W 0.0; to:"icon_bg_img"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_GAP_R+2)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_GAP_B+2)/ALBUM_ICON_H; to:"icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.onlyicon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "label_bg";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                               description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                               rel2 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W-1)/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H-1)/ALBUM_ICON_H); offset: 0 0; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.firsticon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_W+ALBUM_ICON_PAD)/ALBUM_ICON_W) (ALBUM_ICON_PAD/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_ICON_PAD/ALBUM_ICON_W) ((ALBUM_ICON_PAD+ALBUM_TEXT_AREA_H+ALBUM_ICON_PAD)/ALBUM_ICON_H); to: "icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H; to: "icon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.text.date";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W  ALBUM_TEXT_NAME_H/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  (ALBUM_TEXT_NAME_H+ALBUM_TEXT_DATE_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               color: 190 190 190 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 22;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.text.count";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               rel1 { relative: ((ALBUM_TEXT_GAP_L+1)/ALBUM_TEXT_AREA_W)  ALBUM_TEXT_Y/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W  1.0; to: "label_bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 38;
+                                       align: 1.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.text.name";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (ALBUM_TEXT_GAP_L/ALBUM_TEXT_AREA_W) 0.0; to: "label_bg"; }
+                               rel2 { relative: (ALBUM_TEXT_AREA_W-ALBUM_TEXT_GAP_L-1)/ALBUM_TEXT_AREA_W (ALBUM_TEXT_NAME_H-1)/ALBUM_TEXT_AREA_H; to: "label_bg"; }
+                               color: 111 198 235 255;
+                               text {
+                                       font: "Helvetica Neue:style=Medium";
+                                       size: 28;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "elm.swallow.rename";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               min: ALBUM_RENAME_BTN_W ALBUM_RENAME_BTN_H;
+                               max: ALBUM_RENAME_BTN_W ALBUM_RENAME_BTN_H;
+                               rel1 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD-ALBUM_RENAME_BTN_W)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD-ALBUM_RENAME_BTN_H)/ALBUM_ICON_H); to:"icon_bg"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_PAD)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_PAD)/ALBUM_ICON_H); to:"icon_bg"; } //-->GUI_v0.2_110309
+                       }
+               }
+               part {
+                       name: "elm.swallow.check_grid";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               max : (ALBUM_ICON_W+2) (ALBUM_ICON_H+2);
+                               rel1 { relative: (ALBUM_ICON_GAP_L-1)/ALBUM_ICON_W 0.0; to:"icon_bg_img"; }
+                               rel2 { relative: (ALBUM_ICON_W-ALBUM_ICON_GAP_R+3)/ALBUM_ICON_W (ALBUM_ICON_H-ALBUM_ICON_GAP_B+4)/ALBUM_ICON_H; to:"icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.end";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               min: ALBUM_CHECKBOX_W ALBUM_CHECKBOX_H;
+                               max: ALBUM_CHECKBOX_W ALBUM_CHECKBOX_H;
+                               rel1 { relative: (ALBUM_GAP_L-ALBUM_CHECKBOX_GAP_L)/ALBUM_ITEM_W (ALBUM_GAP_T-ALBUM_CHECKBOX_GAP_T)/ALBUM_ITEM_H; to:"bg"; }
+                               rel2 { relative: (ALBUM_GAP_L+ALBUM_CHECKBOX_W)/ALBUM_ITEM_W (ALBUM_GAP_T-ALBUM_CHECKBOX_GAP_T+ALBUM_CHECKBOX_H+1)/ALBUM_ITEM_H; to:"bg"; }
+                       }
+               }
+       }
+}
diff --git a/res/edc/gl-gengrid-item-thumbview.edc b/res/edc/gl-gengrid-item-thumbview.edc
new file mode 100755 (executable)
index 0000000..e81eee6
--- /dev/null
@@ -0,0 +1,598 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define THUMBNAILS_BG_COLOR            190 189 189 255
+
+/* Grid item background size W: 14+158+6; H: 24+158 */
+#define W               178
+#define H               182
+
+/* Gap between bg and icon */
+#define GAP_BG_L         14
+#define GAP_BG_R         6
+#define GAP_BG_T         24
+
+/* Gap between icon and shadow */
+#define GAP_ICON_L         3
+#define GAP_ICON_R         3
+#define GAP_ICON_T         0
+#define GAP_ICON_B         4
+
+/* Shadow image size */
+#define SHADOW_W               (W-GAP_BG_L-GAP_BG_R+GAP_ICON_L+GAP_ICON_R)
+#define SHADOW_H               (H-GAP_BG_T+GAP_ICON_B)
+
+/* Gap between bg and shadow */
+#define GAP_SHADOW_L         (GAP_BG_L-GAP_ICON_L)
+#define GAP_SHADOW_R         (GAP_BG_R-GAP_ICON_R)
+#define GAP_SHADOW_T         (GAP_BG_T-GAP_ICON_T)
+#define GAP_SHADOW_B         (0+GAP_ICON_B)
+
+/* Thumbnail boundary size */
+#define INNER         1
+
+/* Bookmark icon boundary size */
+#define BOOKMARK_ICON_W         30
+#define BOOKMARK_ICON_H         38
+
+/* Backgroud size for setting play icon position */
+#define PLAY_BG_W         (47+64+47)
+#define PLAY_BG_H         (27+64+28)
+#define PLAY_W         64
+#define PLAY_H         64
+#define PLAY_X         47
+#define PLAY_Y         27
+
+group {
+       name: "elm/gengrid/item/gallery/thumbnail_view/default";
+
+       data.item: "contents" "elm.swallow.icon elm.swallow.end";
+
+       parts {
+        part {
+            name: "bg";
+            type: RECT;
+            description {
+                state: "default" 0.0;
+                color: 0 0 0 0;
+                rel1 { relative: 0.0 0.0; offset: 0 0;}
+                rel2 { relative: 1.0 1.0; offset: 0 0;}
+            }
+        }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       scale : 1;
+
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.5;
+                               visible: 0;
+                               color: 0 0 0 0;
+                               rel1 { relative: 0.0 0.0;to:"bg"; }
+                               rel2 { relative: 1.0 1.0;to:"bg"; }
+
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                               rel1 { relative: 0.0 0.0; to: "icon_bg"; }
+                               rel2 { relative: 1.0 1.0; to: "icon_bg"; }
+                       }
+               }
+        part {
+            name: "elm.swallow.end";
+            type: SWALLOW;
+            description {
+                state: "default" 0.0;
+                rel1 { relative: 0.0 0.0; to: "elm.swallow.icon"; }
+                rel2 { relative: 1.0 1.0; to: "elm.swallow.icon"; }
+            }
+        }
+       }
+
+       programs {
+               program {
+                       name: "movedonw_bg";
+                       signal: "movedown,bg,show";
+                       source: "bg";
+                       action: STATE_SET "move_down" 0.0;
+                       target: "bg";
+               }
+       }
+}
+
+
+
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout";
+
+       images {
+               image: GALLERY_EDC_IMAGE_THUMBS_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GALLERY_EDC_IMAGE_THUMBS_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout_video";
+       images {
+               image: GALLERY_EDC_IMAGE_BUTTON_PLAY COMP;
+               image: GALLERY_EDC_IMAGE_THUMBS_BG COMP;
+       }
+
+               parts {
+                       part {
+                       name: "bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GALLERY_EDC_IMAGE_THUMBS_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                       state: "default" 0.0;
+                       color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.text.bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               color: 0 0 0 130;
+                               align: 0.5 1.0;
+                               fixed: 0 1;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER-BOOKMARK_ICON_H+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1+0.5)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.videoicon_bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               align: 0.5 0.0;
+                               fixed: 1 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.swallow.icon";}
+                               rel2 { relative: 1.0 0.0; to_x: "elm.swallow.icon"; to_y: "elm.text.bg";}
+                       }
+               }
+               part {
+                       name: "elm.swallow.videoicon";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               align: 0.5 0.5;
+                               aspect: 1.0 1.0;
+                               rel1 { relative: PLAY_X/PLAY_BG_W PLAY_Y/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               rel2 { relative: (PLAY_X+PLAY_W)/PLAY_BG_W (PLAY_Y+PLAY_H)/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               image.normal: GALLERY_EDC_IMAGE_BUTTON_PLAY;
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               rel1 { relative: 0.0  0.0; to: "elm.text.bg"; }
+                               rel2 { relative: 1.0  1.0; to: "elm.text.bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "HelveticaNeue:style=Medium";
+                                       size: 26;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
+
+group
+{
+       name: "elm/gengrid/photoframe/default_layout_video_bookmark";
+       images {
+               image: GALLERY_EDC_IMAGE_BUTTON_PLAY COMP;
+               image: GALLERY_EDC_IMAGE_THUMBS_BG COMP;
+       }
+
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0;}
+                               rel2 { relative: 1.0 1.0;}
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "shrink" 0.0;
+                               rel1 { relative: 0.03 0.03;}
+                               rel2 { relative: 0.97 0.97;}
+                               color: 0 0 0 0;
+                       }
+               }
+               part { name: "icon_bg_img";
+                       type: IMAGE;
+                       mouse_events: 1;
+                       scale : 1;
+                       description {
+                               state: "default" 0.0;
+                               image {
+                                       normal : GALLERY_EDC_IMAGE_THUMBS_BG;
+                               }
+                               rel1 { relative: GAP_SHADOW_L/W GAP_SHADOW_T/H; to: "bg"; }
+                               rel2 { relative: (W-GAP_SHADOW_R-1)/W (H+GAP_SHADOW_B-1)/H; to: "bg"; }
+                       }
+               }
+               part {
+                       name: "icon_bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: THUMBNAILS_BG_COLOR;
+                               rel1 { relative: GAP_ICON_L/SHADOW_W GAP_ICON_T/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R+2)/SHADOW_W (SHADOW_H-GAP_ICON_B+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (GAP_ICON_T+INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.text.bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale : 1;
+
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               color: 0 0 0 130;
+                               min: 0 24;
+                               align: 0.5 1.0;
+                               fixed: 0 1;
+                               rel1 { relative: (GAP_ICON_L+INNER+0.5)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER-BOOKMARK_ICON_H+1)/SHADOW_H; to: "icon_bg_img"; }
+                               rel2 { relative: (SHADOW_W-GAP_ICON_R-INNER+1)/SHADOW_W (SHADOW_H-GAP_ICON_B-INNER+1+0.5)/SHADOW_H; to: "icon_bg_img"; }
+                       }
+               }
+               part {
+                       name: "elm.videoicon_bg";
+                       type: RECT;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               align: 0.5 0.0;
+                               fixed: 1 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.swallow.icon";}
+                               rel2 { relative: 1.0 0.0; to_x: "elm.swallow.icon"; to_y: "elm.text.bg";}
+                       }
+               }
+               part {
+                       name: "elm.swallow.videoicon";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       repeat_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 40 40;
+                               visible: 1;
+                               align: 0.5 0.5;
+                               aspect: 1.0 1.0;
+                               rel1 { relative: PLAY_X/PLAY_BG_W PLAY_Y/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               rel2 { relative: (PLAY_X+PLAY_W)/PLAY_BG_W (PLAY_Y+PLAY_H)/PLAY_BG_H; to: "elm.videoicon_bg";}
+                               image.normal: GALLERY_EDC_IMAGE_BUTTON_PLAY;
+                       }
+               }
+               part {
+                       name: "bookmarkicon_bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOOKMARK_ICON_W BOOKMARK_ICON_H;
+                               max: BOOKMARK_ICON_W BOOKMARK_ICON_H;
+                               align: 0.0 0.5;
+                               fixed: 1 1;
+                               visible: 0;
+                               rel1 { relative: 0.0 0.0; to: "elm.text.bg"; }
+                               rel2 { relative: 0.0 1.0; to: "elm.text.bg"; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.bookmarkicon";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.5;
+                               visible: 1;
+                               rel1 { relative: 0.0 0.0; to: "bookmarkicon_bg"; }
+                               rel2 { relative: 1.0 1.0; to: "bookmarkicon_bg"; }
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type: TEXT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                               rel1 { relative: 0.9  0.0; to_x: "elm.swallow.bookmarkicon"; to_y: "elm.text.bg"; }
+                               rel2 { relative: 1.0  1.0; to: "elm.text.bg"; }
+                               color: 255 255 255 255;
+                               text {
+                                       font: "HelveticaNeue:style=Medium";
+                                       size: 26;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "mouse_down_shrink";
+                       signal: "mouse,down,shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       //after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "mouse_up_expand";
+                       signal: "mouse,up,expand";
+                       source: "bg";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+
+               program {
+                       name: "shrink";
+                       signal: "shrink";
+                       source: "bg";
+                       action: STATE_SET "shrink" 0.0;
+                       target: "bg";
+                       after: "expand";
+                       transition: LINEAR 0.1;
+               }
+               program {
+                       name: "expand";
+                       action: STATE_SET "default" 0.0;
+                       target: "bg";
+                       transition: LINEAR 0.05;
+                       after: "shrink,expand,done,icon";
+               }
+               program {
+                       name: "shrink,expand,done,icon";
+                       action: SIGNAL_EMIT "shrink,expand,done" "bg";
+               }
+       }
+}
diff --git a/res/edc/gl-genlist-item-video.edc b/res/edc/gl-genlist-item-video.edc
new file mode 100755 (executable)
index 0000000..914f136
--- /dev/null
@@ -0,0 +1,657 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define GENLIST_PART_BOTTOM_LINE_COLOR_VIDEO 82 82 82 255
+#define GENLIST_PART_BG_SELECTED_COLOR_INC 50 65 74 255
+#define GENLIST_PART_BG_UNSELECTED_COLOR_INC 0 0 0 0
+#define GENLIST_PART_BOTTOM_LINE_INC 65 65 65 255
+#define GENLIST_PART_DISCLIP_COLOR_INC 255 255 255 110 // alpha was 64
+
+#define GENLIST_PART_BASE( param_item_height ) \
+         part { name: "base"; \
+            type: RECT; \
+            repeat_events: 1; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: 0 param_item_height; \
+               color: 0 0 0 0; \
+            } \
+         }
+
+#define GENLIST_PART_BG_IMAGE \
+         part { name: "bg_image"; \
+            type: RECT; \
+            clip_to: "disclip"; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               color: GENLIST_PART_BG_UNSELECTED_COLOR_INC; \
+            } \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_PART_BG_SELECTED_COLOR_INC; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+       part { name: "elm.padding.top"; \
+            type: RECT; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               min: 0 param_padding_size; \
+               fixed: 0 1; \
+               visible: 0; \
+               rel2.relative: 1.0 0.0; \
+               align: 0.0 0.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+       part { name: "elm.padding.bottom"; \
+            type: RECT; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               min: 0 param_padding_size; \
+               fixed: 0 1; \
+               visible: 0; \
+               rel1.relative: 0.0 1.0; \
+               align: 0.0 1.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+         part { name: "elm.padding.left"; \
+            type: RECT; \
+            scale: 1; \
+            description { \
+               state: "default" 0.0; \
+               min: param_padding_size 0; \
+               fixed: 1 0; \
+               visible: 0; \
+               rel2.relative: 0.0 1.0; \
+               align: 0.0 0.0; \
+            } \
+         }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+       part { name: "elm.padding.right"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: param_padding_size 0; \
+               fixed: 1 0; \
+               visible: 0; \
+               rel1.relative: 1.0  0.0; \
+               align: 1.0 0.0; \
+            } \
+         }
+
+#define GENLIST_PART_DISCLIP \
+        part { name: "disclip"; \
+            type: RECT; \
+            description { state: "default" 0.0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_PART_DISCLIP_COLOR_INC; \
+            } \
+         }
+
+#define GENLIST_PART_BOTTOM_LINE_VIDEO \
+         part { name: "bottom_line"; \
+            type: RECT; \
+            clip_to: "disclip"; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               min: 0 1; \
+               fixed: 0 1; \
+               visible: 1; \
+               color: GENLIST_PART_BOTTOM_LINE_COLOR_VIDEO; \
+               rel1 { \
+                  relative: 0.0 1.0; \
+                  offset: 0 -1; \
+               } \
+            } \
+         }
+
+#define VIDEO_COLOR_GAP 239 239 239 127
+#define VIDEO_COLOR_DURATION 204 204 204 255
+#define VIDEO_COLOR_TITLE 255 255 255 255
+#define VIDEO_FONT_TITLE 44
+#define VIDEO_FONT_DURATION 32
+
+#define VIDEO_SELECT_ALL_ITEM_H 150
+#define VIDEO_ITEM_H 160
+#define VIDEO_PAD_T 22
+#define VIDEO_PAD_B 32
+#define VIDEO_PAD_L 16
+#define VIDEO_PAD_R 16
+#define VIDEO_PAD_ICON_R 16
+#define VIDEO_PAD_ICON_L 16
+#define VIDEO_PAD_BOOKMARK_T 28
+#define VIDEO_BG_H 128
+#define VIDEO_BG_W 172
+#define VIDEO_GAP 2
+#define VIDEO_TITLE_H 64
+#define VIDEO_DURATION_H 48
+#define VIDEO_BOOKMARK_H 64
+#define VIDEO_BOOKMARK_W 64
+#define VIDEO_PROGRESSBAR_H 17
+#define VIDEO_PROGRESSBAR_W 64
+#define VIDEO_PLAY_H 38
+#define VIDEO_PLAY_W 38
+#define VIDEO_CHECKBOX_W 42
+#define VIDEO_CHECKBOX_H 42
+
+group { name: "elm/genlist/item/video_list/gallery/default";
+  alias: "elm/genlist/item_odd/video_list/gallery/default";
+  alias: "elm/genlist/item_compress/video_list/gallery/default";
+  alias: "elm/genlist/item_compress_odd/video_list/gallery/default";
+
+  //data.item: "stacking" "above";
+  //data.item: "selectraise" "on";
+  data.item: "texts" "elm.text.title elm.text.duration";
+  data.item: "contents" "elm.icon elm.videoicon elm.bookmarkicon elm.progressbar_icon";
+
+  //data.item: "treesize" "20";
+  parts {
+     GENLIST_PART_BASE( VIDEO_ITEM_H )
+     GENLIST_PART_BG_IMAGE
+     GENLIST_PART_BOTTOM_LINE_VIDEO
+     GENLIST_PART_PADDING_TOP( VIDEO_PAD_T )
+     GENLIST_PART_PADDING_BOTTOM( VIDEO_PAD_B )
+     GENLIST_PART_PADDING_LEFT( VIDEO_PAD_L )
+     GENLIST_PART_PADDING_RIGHT( VIDEO_PAD_R )
+
+     part { name: "elm.padding.icon.right";
+        type: RECT;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_PAD_ICON_R 0;
+           fixed: 1 0;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.icon";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.icon";
+           }
+           color: 0 0 0 0;
+           align: 0.0 0.0;
+        }
+     }
+     part { name: "icon_bg";
+        clip_to: "disclip";
+        type: RECT;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_BG_W VIDEO_BG_H;
+           max: VIDEO_BG_W VIDEO_BG_H;
+           fixed: 1 1;
+           align: 0.0 0.5;
+           color: VIDEO_COLOR_GAP;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.padding.left";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.padding.left";
+           }
+        }
+     }
+     part { name: "elm.icon";
+        clip_to: "disclip";
+        type: SWALLOW;
+        scale: 1;
+        description { state: "default" 0.0;
+           fixed: 1 1;
+           align: 0.5 0.5;
+           rel1 {
+              relative: (VIDEO_GAP)/VIDEO_BG_W (VIDEO_GAP)/VIDEO_BG_H;
+              to: "icon_bg";
+           }
+           rel2 {
+              relative: (VIDEO_BG_W-VIDEO_GAP+1)/VIDEO_BG_W (VIDEO_BG_H-VIDEO_GAP+1)/VIDEO_BG_H;
+              to: "icon_bg";
+           }
+        }
+     }
+     part {
+        name: "elm.videoicon";
+        type: SWALLOW;
+               scale: 1;
+        description {
+                state: "default" 0.0;
+                max: VIDEO_PLAY_W VIDEO_PLAY_H;
+                align: 0.95 0.95;
+                rel1 { relative: 0.0 0.0; to: "elm.icon"; }
+                rel2 { relative: 1.0 1.0; to: "elm.icon"; }
+        }
+       }
+       part { name: "elm.padding.bookmark.top";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 VIDEO_PAD_BOOKMARK_T;
+              fixed: 0 1;
+              visible: 0;
+              rel2.relative: 1.0 0.0;
+              align: 0.0 0.0;
+           }
+        }
+       part { name: "elm.bookmarkicon";
+               clip_to: "disclip";
+               scale: 1;
+               type: SWALLOW;
+               description { state: "default" 0.0;
+                  min: VIDEO_BOOKMARK_W VIDEO_BOOKMARK_H;
+                  fixed: 1 1;
+                  align: 1.0 0.0;
+                  rel1 {
+                         relative: 0.0 1.0;
+                         to_x: "elm.padding.right";
+                         to_y: "elm.padding.bookmark.top";
+            }
+                  rel2 {
+                         relative: 0.0 0.0;
+                         to_x: "elm.padding.right";
+                  }
+               }
+       }
+     part { name: "elm.progressbar.icon";
+               clip_to: "disclip";
+               scale: 1;
+               type: SWALLOW;
+               description { state: "default" 0.0;
+                  min: VIDEO_PROGRESSBAR_W VIDEO_PROGRESSBAR_H;
+                  fixed: 0 1;
+                  align: 1.0 1.0;
+                  rel1 {
+                         relative: 0.0 1.0;
+                         to_x: "elm.bookmarkicon";
+            }
+                  rel2 {
+                         relative: 1.0 0.0;
+                         to_x: "elm.bookmarkicon";
+                         to_y: "elm.padding.bottom";
+                  }
+               }
+     }
+     part { name: "elm.text.title";
+        clip_to: "disclip";
+        type: TEXT;
+        mouse_events: 0;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: 0 VIDEO_TITLE_H;
+           fixed: 0 1;
+           align: 0.0 0.0;
+           rel1 {
+              relative: 1.0 1.0;
+              to_x: "elm.padding.icon.right";
+              to_y: "elm.padding.top";
+           }
+           rel2 {
+              relative: 0.0 1.0;
+              offset: 0 0;
+              to_x: "elm.bookmarkicon";
+              to_y: "elm.padding.top";
+           }
+           color: VIDEO_COLOR_TITLE;
+           text {
+              font: "Helvetica Neue:style=Roman";
+              size: VIDEO_FONT_TITLE;
+              min: 0 1;
+              align: 0.0 0.5;
+           }
+        }
+     }
+     part { name: "elm.text.duration";
+        clip_to: "disclip";
+        type: TEXT;
+        mouse_events: 0;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: 0 VIDEO_DURATION_H;
+           fixed: 0 1;
+           align: 0.0 0.0;
+           rel1 {
+              relative: 1.0  1.0;
+              to_x: "elm.padding.icon.right";
+              to_y: "elm.text.title";
+           }
+           rel2 {
+              relative: 0 1;
+              offset: 0 0;
+              to_x: "elm.padding.right";
+              to_y: "elm.text.title";
+           }
+           color: VIDEO_COLOR_DURATION;
+           text {
+              font: "Helvetica Neue:style=Medium";
+              size: VIDEO_FONT_DURATION;
+              min: 0 1;
+              align: 0.0 0.5;
+           }
+        }
+     }
+
+   GENLIST_PART_DISCLIP
+  }
+  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/video_list_edit/gallery/default";
+  alias: "elm/genlist/item_odd/video_list_edit/gallery/default";
+
+  //data.item: "stacking" "above";
+  //data.item: "selectraise" "on";
+  data.item: "texts" "elm.text.title elm.text.duration";
+  data.item: "contents" "elm.swallow.checkbox elm.icon elm.videoicon elm.bookmarkicon elm.progressbar_icon";
+
+  //data.item: "treesize" "20";
+  parts {
+     GENLIST_PART_BASE( VIDEO_ITEM_H )
+     GENLIST_PART_BG_IMAGE
+     GENLIST_PART_BOTTOM_LINE_VIDEO
+     GENLIST_PART_PADDING_TOP( VIDEO_PAD_T )
+     GENLIST_PART_PADDING_BOTTOM( VIDEO_PAD_B )
+     GENLIST_PART_PADDING_LEFT( VIDEO_PAD_L )
+     GENLIST_PART_PADDING_RIGHT( VIDEO_PAD_R )
+
+//checkbox
+     part { name: "elm.swallow.checkbox";
+        clip_to: "disclip";
+        type: SWALLOW;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_CHECKBOX_W VIDEO_CHECKBOX_H;
+           max: VIDEO_CHECKBOX_W VIDEO_CHECKBOX_H;
+           fixed: 1 1;
+           align: 0.0 0.5;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.padding.left";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.padding.left";
+           }
+        }
+     }
+     part { name: "elm.padding.icon.left";
+        type: RECT;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_PAD_ICON_L 0;
+           fixed: 1 0;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.swallow.checkbox";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.swallow.checkbox";
+           }
+           color: 0 0 0 0;
+           align: 0.0 0.0;
+        }
+     }
+     part { name: "elm.padding.icon.right";
+        type: RECT;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_PAD_ICON_R 0;
+           fixed: 1 0;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.icon";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.icon";
+           }
+           color: 0 0 0 0;
+           align: 0.0 0.0;
+        }
+     }
+     part { name: "icon_bg";
+        clip_to: "disclip";
+        type: RECT;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: VIDEO_BG_W VIDEO_BG_H;
+           max: VIDEO_BG_W VIDEO_BG_H;
+           fixed: 1 1;
+           align: 0.0 0.5;
+           color: VIDEO_COLOR_GAP;
+           rel1 {
+              relative: 1.0 0.0;
+              to_x: "elm.padding.icon.left";
+           }
+           rel2 {
+              relative: 1.0 1.0;
+              offset: 0 0;
+              to_x: "elm.padding.icon.left";
+           }
+        }
+     }
+     part { name: "elm.icon";
+        clip_to: "disclip";
+        type: SWALLOW;
+        scale: 1;
+        description { state: "default" 0.0;
+           fixed: 1 1;
+           align: 0.5 0.5;
+           rel1 {
+              relative: (VIDEO_GAP)/VIDEO_BG_W (VIDEO_GAP)/VIDEO_BG_H;
+              to: "icon_bg";
+           }
+           rel2 {
+              relative: (VIDEO_BG_W-VIDEO_GAP+1)/VIDEO_BG_W (VIDEO_BG_H-VIDEO_GAP+1)/VIDEO_BG_H;
+              to: "icon_bg";
+           }
+        }
+     }
+     part {
+        name: "elm.videoicon";
+        type: SWALLOW;
+               scale: 1;
+        description {
+                state: "default" 0.0;
+                               max: VIDEO_PLAY_W VIDEO_PLAY_H;
+                               align: 0.95 0.95;
+                               color: 0 0 0 0;
+                rel1 { relative: 0.0 0.0; to: "elm.icon"; }
+                rel2 { relative: 1.0 1.0; to: "elm.icon"; }
+        }
+       }
+       part { name: "elm.padding.bookmark.top";
+           type: RECT;
+           scale: 1;
+           description {
+              state: "default" 0.0;
+              min: 0 VIDEO_PAD_BOOKMARK_T;
+              fixed: 0 1;
+              visible: 0;
+              rel2.relative: 1.0 0.0;
+              align: 0.0 0.0;
+           }
+        }
+       part { name: "elm.bookmarkicon";
+               clip_to: "disclip";
+               scale: 1;
+               type: SWALLOW;
+               description { state: "default" 0.0;
+                  min: VIDEO_BOOKMARK_W VIDEO_BOOKMARK_H;
+                  fixed: 1 1;
+                  align: 1.0 0.0;
+                  rel1 {
+                         relative: 0.0 1.0;
+                         to_x: "elm.padding.right";
+                         to_y: "elm.padding.bookmark.top";
+            }
+                  rel2 {
+                         relative: 0.0 0.0;
+                         to_x: "elm.padding.right";
+                  }
+               }
+       }
+     part { name: "elm.progressbar.icon";
+               clip_to: "disclip";
+               scale: 1;
+               type: SWALLOW;
+               description { state: "default" 0.0;
+                  min: VIDEO_PROGRESSBAR_W VIDEO_PROGRESSBAR_H;
+                  fixed: 0 1;
+                  align: 1.0 1.0;
+                  rel1 {
+                         relative: 0.0 1.0;
+                         to_x: "elm.bookmarkicon";
+            }
+                  rel2 {
+                         relative: 1.0 0.0;
+                         to_x: "elm.bookmarkicon";
+                         to_y: "elm.padding.bottom";
+                  }
+               }
+     }
+     part { name: "elm.text.title";
+        clip_to: "disclip";
+        type: TEXT;
+        mouse_events: 0;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: 0 VIDEO_TITLE_H;
+           fixed: 0 1;
+           align: 0.0 0.0;
+           rel1 {
+              relative: 1.0 1.0;
+              to_x: "elm.padding.icon.right";
+              to_y: "elm.padding.top";
+           }
+           rel2 {
+              relative: 0.0 1.0;
+              offset: 0 0;
+              to_x: "elm.bookmarkicon";
+              to_y: "elm.padding.top";
+           }
+           color: VIDEO_COLOR_TITLE;
+           text {
+              font: "Helvetica Neue:style=Roman";
+              size: VIDEO_FONT_TITLE;
+              min: 0 1;
+              align: 0.0 0.5;
+           }
+        }
+     }
+     part { name: "elm.text.duration";
+        clip_to: "disclip";
+        type: TEXT;
+        mouse_events: 0;
+        scale: 1;
+        description { state: "default" 0.0;
+           min: 0 VIDEO_DURATION_H;
+           fixed: 0 1;
+           align: 0.0 0.0;
+           rel1 {
+              relative: 1.0  1.0;
+              to_x: "elm.padding.icon.right";
+              to_y: "elm.text.title";
+           }
+           rel2 {
+              relative: 0 1;
+              offset: 0 0;
+              to_x: "elm.padding.right";
+              to_y: "elm.text.title";
+           }
+           color: VIDEO_COLOR_DURATION;
+           text {
+              font: "Helvetica Neue:style=Medium";
+              size: VIDEO_FONT_DURATION;
+              min: 0 1;
+              align: 0.0 0.5;
+           }
+        }
+     }
+
+   GENLIST_PART_DISCLIP
+  }
+  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";
+     }
+  }
+}
+
diff --git a/res/edc/gl-naviframe.edc b/res/edc/gl-naviframe.edc
new file mode 100755 (executable)
index 0000000..7842673
--- /dev/null
@@ -0,0 +1,4810 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define NAVIFRAME_TITLE_H_INC 100
+#define NAVIFRAME_SEGMENT_TITLE_H_INC 136
+#define NAVIFRAME_OH_OPENED_H_INC 106
+#define NAVIFRAME_OH_CONTENT_H_INC 74
+#define NAVIFRAME_OH_PADDING_INC 16
+#define NAVIFRAME_OH_ARROW_SIZE_INC 19 12
+#define NAVIFRAME_OH_OPENED_DOUBLE_H_INC 196
+#define NAVIFRAME_PREV_BTN_W_INC 124
+#define NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 10
+#define NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC 124 80
+#define NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 144
+#define NAVIFRAME_TEXT_PADDING_INC 144
+#define NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 52
+#define NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 186
+#define NAVIFRAME_TITLE_SEGMENT_H_INC 74
+#define NAVIFRAME_TITLE_SEGMENT_FONT_SIZE_INC 28
+#define NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC 50
+#define NAVIFRAME_TITLE_FONT_SIZE_INC 36
+#define NAVIFRAME_ICON_SIZE_INC 32 32
+#define NAVIFRAME_ICON_PADDING_INC 16 0
+#define NAVIFRAME_CONTROLBAR_BG_COLOR_INC 15 15 15 255
+#define NAVIFRAME_TITLE_TEXT_COLOR_INC 249 249 249 255
+#define NAVIFRAME_TITLE_BG_COLOR_INC 92 92 92 255
+#define NAVIFRAME_OH_BORDER_INC 0 0 4 0
+
+#define TOOLBAR_SMALL_HEIGHT_INC 95 // 114 // 102
+
+#define NAVIFRAME_VIEW_TRANS_TIME 0.3
+
+///////////////////////////////////////////////////////////////////////////
+// Naviframe
+///////////////////////////////////////////////////////////////////////////
+   group { name:"elm/naviframe/base/gallery/default";
+      parts {
+         part { name: "base";
+            description { state: "default" 0.0;
+            }
+         }
+      }
+   }
+   group { name:"elm/naviframe/item/basic/gallery/default";
+      alias:"elm/naviframe/item/1line/gallery/default";
+      images {
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER COMP;
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW COMP;
+      }
+      script {
+         public oh_show = 0;     //optionheader show/hide
+         public oh_close = 0;    //optionheader close/open
+         public cbar_bg = 0;     //Controlbar BG Show call count
+         public left_btn_visible = 0; //whether left btn is shown
+         public icon_visible = 0; //whether icon is shown
+         public right_btn_visible = 0; //whether right btn is shown
+         public more_btn_visible = 0; //whether more btn is shown
+         public large_padded_center_align = 0; //large padding based on button size for center align for 1/2 buttons.
+      }
+      parts {
+         part { name: "base";
+            type: RECT;
+            mouse_events:  0;
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "left" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: -1.0 0.0;
+               rel2.relative: 0.0 1.0;
+            }
+            description { state: "right" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: 1.0 0.0;
+               rel2.relative: 2.0 1.0;
+            }
+         }
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; to: "base"; }
+               rel2 { relative: 1.0 0.0; to: "base"; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "optionheader_bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 0;
+               align: 0.5 0;
+               fixed: 0 1;
+               rel1.to: "title_bg";
+               rel1.relative: 0 1;
+               rel2.to: "title_bg";
+               visible: 0;
+               image { normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER;
+                  border: NAVIFRAME_OH_BORDER_INC;
+               }
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 1 NAVIFRAME_OH_OPENED_H_INC;
+               visible: 1;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "optionheader_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "optionheader_bg"; }
+               rel2 { to: "optionheader_bg"; }
+            }
+         }
+         part { name: "optionheader_top_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "optionheader_bg"; }
+               rel2 { relative: 1.0 0.0; to: "optionheader_bg"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader_top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader_top_padding"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader_bottom_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_x: "base";
+               rel1.to_y: "optionheader_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_x: "base";
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_more_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_more_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_more_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+         part { name: "padding_center_text1";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+            description { state: "icon" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 0;
+            }
+            description { state: "icon_left_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 0;
+            }
+         }
+         part { name: "padding_center_text2";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "HelveticaNeue:style=Medium";
+                  size: NAVIFRAME_TITLE_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0.5;
+               fixed: 1 0;
+               rel1 { relative: 1.0 0.0; to: "padding_center_text1"; }
+               rel2 { relative: 0.0 1.0; to: "padding_center_text2"; }
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "padding_after_left_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_more_btn"; }
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_ICON_SIZE_INC;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_before_text"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_text"; }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "padding_before_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "padding_before_left_btn"; }
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.5;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_after_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_after_right_btn"; }
+            }
+         }
+         part { name: "title_more_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 1 0.5;
+               rel1 { relative: 0.0 0.0; to: "padding_before_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_right_btn"; }
+            }
+         }
+         part { name: "optionheader_arrow";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: NAVIFRAME_OH_ARROW_SIZE_INC;
+               max: NAVIFRAME_OH_ARROW_SIZE_INC;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.025; to: "title_more_btn"; }
+               rel2 { relative: 1.0 1.025; to: "title_more_btn"; }
+               image.normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW;
+               color: 255 255 255 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               rel1 { to: "base"; }
+               rel2 { to: "base"; }
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "controlbar_bg";
+               rel2.to: "controlbar_bg";
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+         part { name: "elm.swallow.prev_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               rel1.to: "elm.prev_btn_bg";
+               rel2.to: "elm.prev_btn_bg";
+            }
+         }
+         part { name: "controlbar";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1.to: "controlbar_bg";
+               rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+            }
+         }
+      }
+      programs {
+         program { name: "content_new_pushed";
+            signal: "elm,state,new,pushed,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_pushed";
+            signal: "elm,state,cur,pushed,internal";
+            source: "";
+            action: STATE_SET "left" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "pushed_finished";
+         }
+         program { name: "content_prev_popped";
+            signal: "elm,state,prev,popped,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_popped";
+            signal: "elm,state,cur,popped,internal";
+            source: "";
+            action: STATE_SET "right" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "popped_finished";
+         }
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,pushed,internal", "");
+            }
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "right", 0.0);
+               emit("elm,state,new,pushed,internal", "");
+            }
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "left", 0.0);
+               emit("elm,state,prev,popped,internal", "");
+            }
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,popped,internal", "");
+            }
+         }
+         program { name: "visible";
+            signal: "elm,state,visible";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            script {
+               set_state(PART:"title_bg", "default", 0.0);
+               if (get_int(oh_show) == 1) {
+                  if (get_int(oh_close) == 1) {
+                     emit("elm,state,optionheader,instant_close", "");
+                  }else {
+                     emit("elm,state,optionheader,instant_open", "");
+                  }
+               }
+               else
+                 set_state(PART:"optionheader_bg", "default", 0.0);
+            }
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_bg";
+            target: "optionheader_bg";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "left_btn_show";
+            signal: "elm,state,title_left_btn,show";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 1);
+               if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               if ((get_int(more_btn_visible) == 1) && (get_int(right_btn_visible) == 1)) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+            }
+         }
+         program { name: "left_btn_hide";
+            signal: "elm,state,title_left_btn,hide";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(right_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_show";
+            signal: "elm,state,title_right_btn,show";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 1);
+               if (get_int(more_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_hide";
+            signal: "elm,state,title_right_btn,hide";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_show";
+            signal: "elm,state,title_more_btn,show";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 1);
+               if (get_int(right_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_hide";
+            signal: "elm,state,title_more_btn,hide";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(right_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,elm.swallow.icon,show";
+            source: "elm";
+            script {
+               set_int(icon_visible, 1);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,elm.swallow.icon,hide";
+            source: "elm";
+            script {
+               set_int(icon_visible, 0);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "optionheader_show";
+            signal: "elm,state,optionheader,show";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "show", 0.0);
+               set_state(PART:"optionheader_arrow", "show", 0.0);
+               set_int(oh_show, 1);
+            }
+         }
+         program { name: "optionheader_hide";
+            signal: "elm,state,optionheader,hide";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "default", 0.0);
+               set_state(PART:"optionheader_arrow", "default", 0.0);
+               set_int(oh_show, 0);
+            }
+         }
+         program { name: "optionheader_open";
+            signal: "elm,state,optionheader,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_close";
+            signal: "elm,state,optionheader,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_instant_open";
+            signal: "elm,state,optionheader,instant_open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_instant_close";
+            signal: "elm,state,optionheader,instant_close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_close_set";
+            signal: "elm,state,optionheader,close_set";
+            source: "";
+            script {
+               set_int(oh_close, 1);
+            }
+         }
+         program { name: "optionheader_open_set";
+            signal: "elm,state,optionheader,open_set";
+            source: "";
+            script {
+               set_int(oh_close, 0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name:"elm/naviframe/item/basic2/gallery/default";
+      alias:"elm/naviframe/item/2line/gallery/default";
+      images {
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER COMP;
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW COMP;
+      }
+      script {
+         public oh_show = 0;     //optionheader show/hide
+         public oh_close = 0;    //optionheader close/open
+         public cbar_bg = 0;     //Controlbar BG Show call count
+         public left_btn_visible = 0; //whether left btn is shown
+         public icon_visible = 0; //whether icon is shown
+         public right_btn_visible = 0; //whether right btn is shown
+         public more_btn_visible = 0; //whether more btn is shown
+         public large_padded_center_align = 0; //large padding based on button size for center align for 1/2 buttons.
+      }
+      parts {
+         part { name: "base";
+            type: RECT;
+            mouse_events:  0;
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "left" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: -1.0 0.0;
+               rel2.relative: 0.0 1.0;
+            }
+            description { state: "right" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: 1.0 0.0;
+               rel2.relative: 2.0 1.0;
+            }
+         }
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; to: "base"; }
+               rel2 { relative: 1.0 0.0; to: "base"; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "optionheader_bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 0;
+               align: 0.5 0;
+               fixed: 0 1;
+               rel1.to: "title_bg";
+               rel1.relative: 0 1;
+               rel2.to: "title_bg";
+               visible: 0;
+               image { normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER;
+                  border: NAVIFRAME_OH_BORDER_INC;
+               }
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 1 NAVIFRAME_OH_OPENED_DOUBLE_H_INC;
+               visible: 1;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "optionheader_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "optionheader_bg"; }
+               rel2 { to: "optionheader_bg"; }
+            }
+         }
+         part { name: "optionheader_top_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "optionheader_bg"; }
+               rel2 { relative: 1.0 0.0; to: "optionheader_bg"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader_top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader_top_padding"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader.mid.padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader2";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader.mid.padding";}
+               rel2 { relative: 1.0 1.0; to: "optionheader.mid.padding";}
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader.bottom.padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader2"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader2"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_x: "base";
+               rel1.to_y: "optionheader_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_x: "base";
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_more_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_more_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_more_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+         part { name: "padding_center_text1";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+            description { state: "icon" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 0;
+            }
+            description { state: "icon_left_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 0;
+            }
+         }
+         part { name: "padding_center_text2";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "SLP:style=Medium";
+                  size: NAVIFRAME_TITLE_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0.5;
+               fixed: 1 0;
+               rel1 { relative: 1.0 0.0; to: "padding_center_text1"; }
+               rel2 { relative: 0.0 1.0; to: "padding_center_text2"; }
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "padding_after_left_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_more_btn"; }
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_ICON_SIZE_INC;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_before_text"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_text"; }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "padding_before_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "padding_before_left_btn"; }
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.5;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_after_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_after_right_btn"; }
+            }
+         }
+         part { name: "title_more_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 0;
+               align: 1 0.5;
+               rel1 { relative: 0.0 0.0; to: "padding_before_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_right_btn"; }
+            }
+         }
+         part { name: "optionheader_arrow";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: NAVIFRAME_OH_ARROW_SIZE_INC;
+               max: NAVIFRAME_OH_ARROW_SIZE_INC;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.025; to: "title_more_btn"; }
+               rel2 { relative: 1.0 1.025; to: "title_more_btn"; }
+               image.normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW;
+               color: 255 255 255 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               rel1 { to: "base"; }
+               rel2 { to: "base"; }
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+         part { name: "elm.swallow.prev_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               rel1.to: "elm.prev_btn_bg";
+               rel2.to: "elm.prev_btn_bg";
+            }
+         }
+         part { name: "controlbar";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               rel1.to: "controlbar_bg";
+               rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+            }
+         }
+      }
+      programs {
+         program { name: "content_new_pushed";
+            signal: "elm,state,new,pushed,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_pushed";
+            signal: "elm,state,cur,pushed,internal";
+            source: "";
+            action: STATE_SET "left" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "pushed_finished";
+         }
+         program { name: "content_prev_popped";
+            signal: "elm,state,prev,popped,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_popped";
+            signal: "elm,state,cur,popped,internal";
+            source: "";
+            action: STATE_SET "right" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "popped_finished";
+         }
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,pushed,internal", "");
+            }
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "right", 0.0);
+               emit("elm,state,new,pushed,internal", "");
+            }
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "left", 0.0);
+               emit("elm,state,prev,popped,internal", "");
+            }
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,popped,internal", "");
+            }
+         }
+         program { name: "visible";
+            signal: "elm,state,visible";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            script {
+               set_state(PART:"title_bg", "default", 0.0);
+               if (get_int(oh_show) == 1) {
+                  if (get_int(oh_close) == 1) {
+                     emit("elm,state,optionheader,instant_close", "");
+                  }else {
+                     emit("elm,state,optionheader,instant_open", "");
+                  }
+               }
+               else
+                 set_state(PART:"optionheader_bg", "default", 0.0);
+            }
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_bg";
+            target: "optionheader_bg";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "left_btn_show";
+            signal: "elm,state,title_left_btn,show";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 1);
+               if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               if ((get_int(more_btn_visible) == 1) && (get_int(right_btn_visible) == 1)) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+            }
+         }
+         program { name: "left_btn_hide";
+            signal: "elm,state,title_left_btn,hide";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(right_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_show";
+            signal: "elm,state,title_right_btn,show";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 1);
+               if (get_int(more_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_hide";
+            signal: "elm,state,title_right_btn,hide";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_show";
+            signal: "elm,state,title_more_btn,show";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 1);
+               if (get_int(right_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_hide";
+            signal: "elm,state,title_more_btn,hide";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(right_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,elm.swallow.icon,show";
+            source: "elm";
+            script {
+               set_int(icon_visible, 1);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,elm.swallow.icon,hide";
+            source: "elm";
+            script {
+               set_int(icon_visible, 0);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "optionheader_show";
+            signal: "elm,state,optionheader,show";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "show", 0.0);
+               set_state(PART:"optionheader_arrow", "show", 0.0);
+               set_int(oh_show, 1);
+            }
+         }
+         program { name: "optionheader_hide";
+            signal: "elm,state,optionheader,hide";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "default", 0.0);
+               set_state(PART:"optionheader_arrow", "default", 0.0);
+               set_int(oh_show, 0);
+            }
+         }
+         program { name: "optionheader_open";
+            signal: "elm,state,optionheader,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_close";
+            signal: "elm,state,optionheader,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_instant_open";
+            signal: "elm,state,optionheader,instant_open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_instant_close";
+            signal: "elm,state,optionheader,instant_close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_close_set";
+            signal: "elm,state,optionheader,close_set";
+            source: "";
+            script {
+               set_int(oh_close, 1);
+            }
+         }
+         program { name: "optionheader_open_set";
+            signal: "elm,state,optionheader,open_set";
+            source: "";
+            script {
+               set_int(oh_close, 0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name: "elm/naviframe/item/segment/gallery/default";
+      script {
+         public cbar_bg = 0;     //Controlbar BG Show call count
+      }
+      parts {
+         part { name: "base";
+            type: RECT;
+            mouse_events:  0;
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "left" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: -1.0 0.0;
+               rel2.relative: 0.0 1.0;
+            }
+            description { state: "right" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: 1.0 0.0;
+               rel2.relative: 2.0 1.0;
+            }
+         }
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_SEGMENT_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; to: "base"; }
+               rel2 { relative: 1.0 0.0; to: "base"; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_x: "base";
+               rel1.to_y: "title_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_x: "base";
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "SLP:style=Medium";
+                  size: NAVIFRAME_TITLE_SEGMENT_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               min: 0 NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC;
+               fixed: 1 1;
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0;
+               rel1.to: "padding_before_left_btn";
+               rel1.relative: 1 0;
+               rel2.to: "padding_after_right_btn";
+               rel2.relative: 0 1;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0;
+               rel1.relative: 1.0 1.0;
+               rel1.to_x: "padding_before_left_btn";
+               rel1.to_y: "elm.text.title";
+               rel2.relative: 1.0 1.0;
+               rel2.to_x: "padding_before_left_btn";
+               rel2.to_y: "elm.text.title";
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.0;
+               fixed: 1 1;
+               rel1.relative: 0.0 1.0;
+               rel1.to_x: "padding_after_right_btn";
+               rel1.to_y: "elm.text.title";
+               rel2.relative: 0.0 1.0;
+               rel2.to_x: "padding_after_right_btn";
+               rel2.to_y: "elm.text.title";
+            }
+         }
+         part { name: "segment2";
+            type: "SWALLOW";
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               fixed: 0 1;
+               align: 0.5 0;
+               rel1.to_y: "elm.text.title";
+               rel1.to_x: "title_bg";
+               rel1.relative: 0.28 1;
+               rel2.to_y: "elm.text.title";
+               rel2.to_x: "title_bg";
+               rel2.relative: 0.72 1;
+            }
+         }
+         part { name: "segment3";
+            type: "SWALLOW";
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               fixed: 0 1;
+               align: 0.5 0;
+               rel1.to_y: "elm.text.title";
+               rel1.relative: 0.2 1;
+               rel1.to_x: "title_bg";
+               rel2.to_y: "elm.text.title";
+               rel2.to_x: "title_bg";
+               rel2.relative: 0.8 1;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               rel1 { to: "base"; }
+               rel2 { to: "base"; }
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+        part { name: "elm.swallow.prev_btn";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              fixed: 1 1;
+              align: 0.5 0.5;
+              rel1.to: "elm.prev_btn_bg";
+              rel2.to: "elm.prev_btn_bg";
+           }
+        }
+        part { name: "controlbar";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              rel1.to: "controlbar_bg";
+              rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+           }
+        }
+      }
+      programs {
+         program { name: "content_new_pushed";
+            signal: "elm,state,new,pushed,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_pushed";
+            signal: "elm,state,cur,pushed,internal";
+            source: "";
+            action: STATE_SET "left" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "pushed_finished";
+         }
+         program { name: "content_prev_popped";
+            signal: "elm,state,prev,popped,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_popped";
+            signal: "elm,state,cur,popped,internal";
+            source: "";
+            action: STATE_SET "right" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "popped_finished";
+         }
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,pushed,internal", "");
+            }
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "right", 0.0);
+               emit("elm,state,new,pushed,internal", "");
+            }
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "left", 0.0);
+               emit("elm,state,prev,popped,internal", "");
+            }
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,popped,internal", "");
+            }
+         }
+         program { name: "visible";
+            signal: "elm,state,visible";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            action: STATE_SET "show" 0.0;
+            target: "title_bg";
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_bg";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name: "elm/naviframe/item/tabbar/gallery/default";
+      script {
+         public cbar_bg = 0;     //Controlbar BG Show call count
+      }
+      parts {
+         part { name: "base";
+            type: RECT;
+            mouse_events:  0;
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "left" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: -1.0 0.0;
+               rel2.relative: 0.0 1.0;
+            }
+            description { state: "right" 0.0;
+               inherit: "default" 0.0;
+               rel1.relative: 1.0 0.0;
+               rel2.relative: 2.0 1.0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 0.0;
+               rel1.to: "base";
+               rel2.relative: 1.0 0.0;
+               rel2.to_x: "base";
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               rel1 { to: "base"; }
+               rel2 { to: "base"; }
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+           type: RECT;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              min: 0 0;
+              fixed: 1 0;
+              align: 1.0 0.0;
+              rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+              rel2.to: "controlbar_bg";
+              visible: 0;
+           }
+           description { state: "visible" 0.0;
+              inherit: "default" 0.0;
+              min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+           }
+         }
+         part { name: "elm.swallow.prev_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               rel1.to: "elm.prev_btn_bg";
+               rel2.to: "elm.prev_btn_bg";
+            }
+         }
+         part { name: "controlbar";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               rel1.to: "controlbar_bg";
+               rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+            }
+         }
+      }
+      programs {
+         program { name: "content_new_pushed";
+            signal: "elm,state,new,pushed,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_pushed";
+            signal: "elm,state,cur,pushed,internal";
+            source: "";
+            action: STATE_SET "left" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "pushed_finished";
+         }
+         program { name: "content_prev_popped";
+            signal: "elm,state,prev,popped,internal";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "show_finished";
+         }
+         program { name: "content_cur_popped";
+            signal: "elm,state,cur,popped,internal";
+            source: "";
+            action: STATE_SET "right" 0.0;
+            target: "base";
+            transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+            after: "popped_finished";
+         }
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,pushed,internal", "");
+            }
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            script {
+               set_state(PART:"base", "right", 0.0);
+               emit("elm,state,new,pushed,internal", "");
+            }
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "left", 0.0);
+               emit("elm,state,prev,popped,internal", "");
+            }
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            script {
+               set_state(PART:"base", "default", 0.0);
+               emit("elm,state,cur,popped,internal", "");
+            }
+         }
+         program { name: "visible";
+            signal: "elm,state,visible";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "base";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            action: STATE_SET "show" 0.0;
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name:"elm/naviframe/item/basic/instant/gallery/default";
+      alias:"elm/naviframe/item/1line/instant/gallery/default";
+      alias:"elm/naviframe/item/instant/gallery/default";
+      images {
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER COMP;
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW COMP;
+      }
+      script {
+         public oh_show = 0;     //optionheader show/hide
+         public oh_close = 0;    //optionheader close/open
+         public cbar_bg = 0;     //Controlbar BG Show call count
+         public left_btn_visible = 0; //whether left btn is shown
+         public icon_visible = 0; //whether icon is shown
+         public right_btn_visible = 0; //whether right btn is shown
+         public more_btn_visible = 0; //whether more btn is shown
+         public large_padded_center_align = 0; //large padding based on button size for center align for 1/2 buttons.
+      }
+      parts {
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; }
+               rel2 { relative: 1.0 0.0; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+             }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "optionheader_bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 0;
+               align: 0.5 0;
+               fixed: 0 1;
+               rel1.to: "title_bg";
+               rel1.relative: 0 1;
+               rel2.to: "title_bg";
+               visible: 0;
+               image { normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER;
+                  border: NAVIFRAME_OH_BORDER_INC;
+               }
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 1 NAVIFRAME_OH_OPENED_H_INC;
+               visible: 1;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "optionheader_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "optionheader_bg"; }
+               rel2 { to: "optionheader_bg"; }
+            }
+         }
+         part { name: "optionheader_top_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "optionheader_bg"; }
+               rel2 { relative: 1.0 0.0; to: "optionheader_bg"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader_top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader_top_padding"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader_bottom_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_y: "optionheader_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_more_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_more_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_more_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+         part { name: "padding_center_text1";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+            description { state: "icon" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 0;
+            }
+            description { state: "icon_left_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 0;
+            }
+         }
+         part { name: "padding_center_text2";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "SLP:style=Medium";
+                  size: NAVIFRAME_TITLE_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0.5;
+               fixed: 1 0;
+               rel1 { relative: 1.0 0.0; to: "padding_center_text1"; }
+               rel2 { relative: 0.0 1.0; to: "padding_center_text2"; }
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "padding_after_left_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_more_btn"; }
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_ICON_SIZE_INC;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_before_text"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_text"; }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "padding_before_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "padding_before_left_btn"; }
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.5;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_after_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_after_right_btn"; }
+            }
+         }
+         part { name: "title_more_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 1 0.5;
+               rel1 { relative: 0.0 0.0; to: "padding_before_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_right_btn"; }
+            }
+         }
+         part { name: "optionheader_arrow";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: NAVIFRAME_OH_ARROW_SIZE_INC;
+               max: NAVIFRAME_OH_ARROW_SIZE_INC;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.025; to: "title_more_btn"; }
+               rel2 { relative: 1.0 1.025; to: "title_more_btn"; }
+               image.normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW;
+               color: 255 255 255 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+        part { name: "elm.swallow.prev_btn";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              fixed: 1 1;
+              align: 0.5 0.5;
+              rel1.to: "elm.prev_btn_bg";
+              rel2.to: "elm.prev_btn_bg";
+           }
+        }
+        part { name: "controlbar";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              rel1.to: "controlbar_bg";
+              rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+           }
+        }
+      }
+      programs {
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            after: "pushed_finished";
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            after: "popped_finished";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            script {
+               set_state(PART:"title_bg", "default", 0.0);
+               if (get_int(oh_show) == 1) {
+                  if (get_int(oh_close) == 1) {
+                     emit("elm,state,optionheader,instant_close", "");
+                  }else {
+                     emit("elm,state,optionheader,instant_open", "");
+                  }
+               }
+               else
+                 set_state(PART:"optionheader_bg", "default", 0.0);
+            }
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_bg";
+            target: "optionheader_bg";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "left_btn_show";
+            signal: "elm,state,title_left_btn,show";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 1);
+               if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               if ((get_int(more_btn_visible) == 1) && (get_int(right_btn_visible) == 1)) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+            }
+         }
+         program { name: "left_btn_hide";
+            signal: "elm,state,title_left_btn,hide";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(right_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_show";
+            signal: "elm,state,tltle_right_btn,show";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 1);
+               if (get_int(more_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_hide";
+            signal: "elm,state,title_right_btn,hide";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_show";
+            signal: "elm,state,title_more_btn,show";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 1);
+               if (get_int(right_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_hide";
+            signal: "elm,state,title_more_btn,hide";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(right_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,elm.swallow.icon,show";
+            source: "elm";
+            script {
+               set_int(icon_visible, 1);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,elm.swallow.icon,hide";
+            source: "elm";
+            script {
+               set_int(icon_visible, 0);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "optionheader_show";
+            signal: "elm,state,optionheader,show";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "show", 0.0);
+               set_state(PART:"optionheader_arrow", "show", 0.0);
+               set_int(oh_show, 1);
+            }
+         }
+         program { name: "optionheader_hide";
+            signal: "elm,state,optionheader,hide";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "default", 0.0);
+               set_state(PART:"optionheader_arrow", "default", 0.0);
+               set_int(oh_show, 0);
+            }
+         }
+         program { name: "optionheader_open";
+            signal: "elm,state,optionheader,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_close";
+            signal: "elm,state,optionheader,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_instant_open";
+            signal: "elm,state,optionheader,instant_open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_instant_close";
+            signal: "elm,state,optionheader,instant_close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_close_set";
+            signal: "elm,state,optionheader,close_set";
+            source: "";
+            script {
+               set_int(oh_close, 1);
+            }
+         }
+         program { name: "optionheader_open_set";
+            signal: "elm,state,optionheader,open_set";
+            source: "";
+            script {
+               set_int(oh_close, 0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name:"elm/naviframe/item/basic2/instant/gallery/default";
+      alias:"elm/naviframe/item/2line/instant/gallery/default";
+      alias:"elm/naviframe/item/instant2/gallery/default";
+      images {
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER COMP;
+         image: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW COMP;
+      }
+      script {
+         public oh_show = 0;     //optionheader show/hide
+         public oh_close = 0;    //optionheader close/open
+         public cbar_bg = 0;     //Controlbar BG Show call count
+         public left_btn_visible = 0; //whether left btn is shown
+         public icon_visible = 0; //whether icon is shown
+         public right_btn_visible = 0; //whether right btn is shown
+         public more_btn_visible = 0; //whether more btn is shown
+         public large_padded_center_align = 0; //large padding based on button size for center align for 1/2 buttons.
+      }
+      parts {
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; }
+               rel2 { relative: 1.0 0.0; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "optionheader_bg";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 0;
+               align: 0.5 0;
+               fixed: 0 1;
+               rel1.to: "title_bg";
+               rel1.relative: 0 1;
+               rel2.to: "title_bg";
+               visible: 0;
+               image { normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER;
+                  border: NAVIFRAME_OH_BORDER_INC;
+               }
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 1 NAVIFRAME_OH_OPENED_DOUBLE_H_INC;
+               visible: 1;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "optionheader_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "optionheader_bg"; }
+               rel2 { to: "optionheader_bg"; }
+            }
+         }
+         part { name: "optionheader_top_padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 0.0; to: "optionheader_bg"; }
+               rel2 { relative: 1.0 0.0; to: "optionheader_bg"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader_top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader_top_padding"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader.mid.padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "optionheader2";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader.mid.padding";}
+               rel2 { relative: 1.0 1.0; to: "optionheader.mid.padding";}
+               fixed: 0 1;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "optionheader.bottom.padding";
+            type: RECT;
+            scale: 1;
+            clip_to: "optionheader_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_OH_PADDING_INC;
+               rel1 { relative: 0.0 1.0; to: "optionheader2"; }
+               rel2 { relative: 1.0 1.0; to: "optionheader2"; }
+               fixed: 0 1;
+               align: 0.0 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_y: "optionheader_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_more_btn";
+            type: RECT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_more_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_more_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+       part { name: "padding_center_text1";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.0;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+            description { state: "icon" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 0;
+            }
+            description { state: "icon_left_button" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 0;
+            }
+         }
+         part { name: "padding_center_text2";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TEXT_PADDING_INC 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "SLP:style=Medium";
+                  size: NAVIFRAME_TITLE_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0.5;
+               fixed: 1 0;
+               rel1 { relative: 1.0 0.0; to: "padding_center_text1"; }
+               rel2 { relative: 0.0 1.0; to: "padding_center_text2"; }
+            }
+            description { state: "right_and_more_button" 0.0;
+               inherit: "default" 0.0;
+               rel1 { relative: 1.0 0.0; to: "padding_after_left_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_more_btn"; }
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_ICON_SIZE_INC;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_before_text"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_text"; }
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0.5;
+               rel1 { relative: 1.0 0.0; to: "padding_before_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "padding_before_left_btn"; }
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.5;
+               fixed: 1 1;
+               rel1 { relative: 0.0 0.0; to: "padding_after_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_after_right_btn"; }
+            }
+         }
+         part { name: "title_more_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 0;
+               align: 1 0.5;
+               rel1 { relative: 0.0 0.0; to: "padding_before_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "padding_before_right_btn"; }
+            }
+         }
+         part { name: "optionheader_arrow";
+            type: IMAGE;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: NAVIFRAME_OH_ARROW_SIZE_INC;
+               max: NAVIFRAME_OH_ARROW_SIZE_INC;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.025; to: "title_more_btn"; }
+               rel2 { relative: 1.0 1.025; to: "title_more_btn"; }
+               image.normal: GALLERY_EDC_IMAGE_NAVIFRAME_OPTIONHEADER_ARROW;
+               color: 255 255 255 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+        part { name: "elm.swallow.prev_btn";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              fixed: 1 1;
+              align: 0.5 0.5;
+              rel1.to: "elm.prev_btn_bg";
+              rel2.to: "elm.prev_btn_bg";
+           }
+        }
+        part { name: "controlbar";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              rel1.to: "controlbar_bg";
+              rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+           }
+        }
+      }
+      programs {
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            after: "pushed_finished";
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            after: "popped_finished";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            script {
+               set_state(PART:"title_bg", "default", 0.0);
+               if (get_int(oh_show) == 1) {
+                  if (get_int(oh_close) == 1) {
+                     emit("elm,state,optionheader,instant_close", "");
+                  }else {
+                     emit("elm,state,optionheader,instant_open", "");
+                  }
+               }
+               else
+                 set_state(PART:"optionheader_bg", "default", 0.0);
+            }
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_bg";
+            target: "optionheader_bg";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "left_btn_show";
+            signal: "elm,state,title_left_btn,show";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 1);
+               if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               if ((get_int(more_btn_visible) == 1) && (get_int(right_btn_visible) == 1)) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+            }
+         }
+         program { name: "left_btn_hide";
+            signal: "elm,state,title_left_btn,hide";
+            source: "elm";
+            script {
+               set_int(left_btn_visible, 0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(right_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_show";
+            signal: "elm,state,title_right_btn,show";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 1);
+               if (get_int(more_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "right_btn_hide";
+            signal: "elm,state,title_right_btn,hide";
+            source: "elm";
+            script {
+               set_int(right_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(more_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_show";
+            signal: "elm,state,title_more_btn,show";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 1);
+               if (get_int(right_btn_visible) == 1) {
+                  set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+                  set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+                                                    (get_int(large_padded_center_align) == 1)))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "more_btn_hide";
+            signal: "elm,state,title_more_btn,hide";
+            source: "elm";
+            script {
+               set_int(more_btn_visible, 0);
+               set_state(PART:"padding_before_right_btn", "default", 0.0);
+               if ((get_int(right_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+                  set_state(PART:"padding_center_text2", "default", 0.0);
+                  set_int(large_padded_center_align, 0);
+               }
+               else {
+                  set_state(PART:"padding_center_text2", "visible", 0.0);
+                  set_int(large_padded_center_align, 1);
+               }
+               if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+                  set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else if (get_int(large_padded_center_align) == 1)
+                  set_state(PART:"padding_center_text1", "visible", 0.0);
+               else if (get_int(icon_visible) == 1)
+                  set_state(PART:"padding_center_text1", "icon", 0.0);
+               else
+                  set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "icon_show";
+            signal: "elm,state,elm.swallow.icon,show";
+            source: "elm";
+            script {
+               set_int(icon_visible, 1);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "icon", 0.0);
+            }
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,elm.swallow.icon,hide";
+            source: "elm";
+            script {
+               set_int(icon_visible, 0);
+               if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+                 set_state(PART:"padding_center_text1", "visible", 0.0);
+               else
+                 set_state(PART:"padding_center_text1", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "optionheader_show";
+            signal: "elm,state,optionheader,show";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "show", 0.0);
+               set_state(PART:"optionheader_arrow", "show", 0.0);
+               set_int(oh_show, 1);
+            }
+         }
+         program { name: "optionheader_hide";
+            signal: "elm,state,optionheader,hide";
+            source: "elm";
+            script {
+               set_state(PART:"optionheader_bg", "default", 0.0);
+               set_state(PART:"optionheader_arrow", "default", 0.0);
+               set_int(oh_show, 0);
+            }
+         }
+         program { name: "optionheader_open";
+            signal: "elm,state,optionheader,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_close";
+            signal: "elm,state,optionheader,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            transition: LINEAR 0.2;
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_instant_open";
+            signal: "elm,state,optionheader,instant_open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_open_set";
+         }
+         program { name: "optionheader_instant_close";
+            signal: "elm,state,optionheader,instant_close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "optionheader_bg";
+            target: "optionheader_arrow";
+            after: "optionheader_close_set";
+         }
+         program { name: "optionheader_close_set";
+            signal: "elm,state,optionheader,close_set";
+            source: "";
+            script {
+               set_int(oh_close, 1);
+            }
+         }
+         program { name: "optionheader_open_set";
+            signal: "elm,state,optionheader,open_set";
+            source: "";
+            script {
+               set_int(oh_close, 0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name: "elm/naviframe/item/segment/instant/default";
+      script {
+         public cbar_bg = 0;     //Controlbar BG Show call count
+      }
+      parts {
+         part { name: "title_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 NAVIFRAME_SEGMENT_TITLE_H_INC;
+               align: 0.0 0.0;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; }
+               rel2 { relative: 1.0 0.0; }
+               color: NAVIFRAME_TITLE_BG_COLOR_INC;
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+            }
+         }
+         part { name: "title_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "title_bg"; }
+               rel2 { to: "title_bg"; }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 1.0;
+               rel1.to_y: "title_bg";
+               rel2.relative: 1.0 0.0;
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "padding_before_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_left_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 0.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+               rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_after_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 1.0 0.0; to: "title_bg"; }
+               rel2 { relative: 1.0 1.0; to: "title_bg"; }
+               visible: 0;
+            }
+         }
+         part { name: "padding_before_right_btn";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+               rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+               visible: 0;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+            }
+         }
+         part { name: "padding_before_text";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               align: 1.0 0.5;
+               rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+               fixed: 1 0;
+               min: NAVIFRAME_ICON_PADDING_INC;
+               visible: 0;
+            }
+         }
+         part { name: "elm.text.title";
+            type: TEXT;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               text { font: "SLP:style=Medium";
+                  size: NAVIFRAME_TITLE_SEGMENT_FONT_SIZE_INC;
+                  min: 0 0;
+                  max: 1 0;
+                  align: 0.5 0.5;
+               }
+               min: 0 NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC;
+               fixed: 1 1;
+               color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+               align: 0.5 0;
+               rel1.to: "padding_before_left_btn";
+               rel1.relative: 1 0;
+               rel2.to: "padding_after_right_btn";
+               rel2.relative: 0 1;
+            }
+         }
+         part { name: "click_event_area";
+             ignore_flags: ON_HOLD;
+             repeat_events: 1;
+             description { state: "default" 0.0;
+                rel1 { to: "title_bg"; }
+                rel2 { to: "title_bg"; }
+             }
+         }
+         part { name: "title_left_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               fixed: 1 1;
+               align: 0 0;
+               rel1.relative: 1.0 1.0;
+               rel1.to_x: "padding_before_left_btn";
+               rel1.to_y: "elm.text.title";
+               rel2.relative: 1.0 1.0;
+               rel2.to_x: "padding_before_left_btn";
+               rel2.to_y: "elm.text.title";
+            }
+         }
+         part { name: "title_right_btn";
+            type: SWALLOW;
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+               align: 1 0.0;
+               fixed: 1 1;
+               rel1.relative: 0.0 1.0;
+               rel1.to_x: "padding_after_right_btn";
+               rel1.to_y: "elm.text.title";
+               rel2.relative: 0.0 1.0;
+               rel2.to_x: "padding_after_right_btn";
+               rel2.to_y: "elm.text.title";
+            }
+         }
+         part { name: "segment2";
+            type: "SWALLOW";
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               fixed: 0 1;
+               align: 0.5 0;
+               rel1.to_y: "elm.text.title";
+               rel1.relative: 0.28 1;
+               rel2.to_y: "elm.text.title";
+               rel2.relative: 0.72 1;
+            }
+         }
+         part { name: "segment3";
+            type: "SWALLOW";
+            scale: 1;
+            clip_to: "title_clip";
+            description { state: "default" 0.0;
+               min: 0 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               max: 999999 NAVIFRAME_TITLE_SEGMENT_H_INC;
+               fixed: 0 1;
+               align: 0.5 0;
+               rel1.to_y: "elm.text.title";
+               rel1.relative: 0.2 1;
+               rel2.to_y: "elm.text.title";
+               rel2.relative: 0.8 1;
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+        part { name: "elm.swallow.prev_btn";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              fixed: 1 1;
+              align: 0.5 0.5;
+              rel1.to: "elm.prev_btn_bg";
+              rel2.to: "elm.prev_btn_bg";
+           }
+        }
+        part { name: "controlbar";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              rel1.to: "controlbar_bg";
+              rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+           }
+        }
+      }
+      programs {
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            after: "pushed_finished";
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            after: "popped_finished";
+         }
+         program { name: "title_show";
+            signal: "elm,state,title,show";
+            source: "elm";
+            action: STATE_SET "show" 0.0;
+            target: "title_clip";
+         }
+         program { name: "title_hide";
+            signal: "elm,state,title,hide";
+            source: "elm";
+            action: STATE_SET "hide" 0.0;
+            target: "title_clip";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            action: STATE_SET "show" 0.0;
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bg_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
+   group { name: "elm/naviframe/item/tabbar/instant/gallery/default";
+      script {
+         public cbar_bg = 0;     //Controlbar BG Show call count
+      }
+      parts {
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            repeat_events: 0;
+            clip_to: "content_clip";
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.relative: 0.0 0.0;
+               rel2.relative: 1.0 0.0;
+               rel2.to_y: "controlbar_bg";
+            }
+         }
+         part { name: "content_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.content";
+               rel2.to: "elm.swallow.content";
+            }
+         }
+         part { name: "controlbar_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 999999 0;
+               fixed: 0 1;
+               align: 0.0 1.0;
+               visible: 0;
+               color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               min: 0 TOOLBAR_SMALL_HEIGHT_INC;
+               max: 999999 TOOLBAR_SMALL_HEIGHT_INC;
+               visible: 1;
+            }
+         }
+         part { name: "controlbar_clip";
+            type: RECT;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1 { to: "controlbar_bg"; }
+               rel2 { to: "controlbar_bg"; }
+            }
+         }
+         part { name: "elm.prev_btn_bg";
+            type: RECT;
+            scale: 1;
+            clip_to: "controlbar_clip";
+            description { state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               align: 1.0 0.0;
+               rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+               rel2.to: "controlbar_bg";
+               visible: 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+            }
+         }
+        part { name: "elm.swallow.prev_btn";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              fixed: 1 1;
+              align: 0.5 0.5;
+              rel1.to: "elm.prev_btn_bg";
+              rel2.to: "elm.prev_btn_bg";
+           }
+        }
+        part { name: "controlbar";
+           type: SWALLOW;
+           scale: 1;
+           clip_to: "controlbar_clip";
+           description { state: "default" 0.0;
+              rel1.to: "controlbar_bg";
+              rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+           }
+        }
+      }
+      programs {
+         program { name: "cur_pushed";
+            signal: "elm,state,cur,pushed";
+            source: "elm";
+            after: "pushed_finished";
+         }
+         program { name: "new_pushed";
+            signal: "elm,state,new,pushed";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "prev_popped";
+            signal: "elm,state,prev,popped";
+            source: "elm";
+            after: "show_finished";
+         }
+         program { name: "cur_popped";
+            signal: "elm,state,cur,popped";
+            source: "elm";
+            after: "popped_finished";
+         }
+         program { name: "prev_btn_show";
+            signal: "elm,state,prev_btn,show";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+               set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+            }
+         }
+         program { name: "prev_btn_hide";
+            signal: "elm,state,prev_btn,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+               set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_show";
+            signal: "elm,state,controlbar,show";
+            source: "elm";
+            action: STATE_SET "show" 0.0;
+            script {
+               emit("elm,state,controlbar_bg,show", "elm");
+            }
+         }
+         program { name: "controlbar_hide";
+            signal: "elm,state,controlbar,hide";
+            source: "elm";
+            script {
+               emit("elm,state,controlbar_bg,hide", "elm");
+            }
+         }
+         program { name: "controlbar_bg_show";
+            signal: "elm,state,controlbar_bg,show";
+            source: "elm";
+            script {
+               set_state(PART:"controlbar_bg", "show", 0.0);
+               set_int(cbar_bg, get_int(cbar_bg) + 1);
+            }
+         }
+         program { name: "controlbar_bgp_hide";
+            signal: "elm,state,controlbar_bg,hide";
+            source: "elm";
+            script {
+               set_int(cbar_bg, get_int(cbar_bg) - 1);
+               if (get_int(cbar_bg) <= 0)
+                 set_state(PART:"controlbar_bg", "default", 0.0);
+            }
+         }
+         program { name: "controlbar_open";
+            signal: "elm,state,controlbar,open";
+            source: "";
+            action: STATE_SET "show" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_close";
+            signal: "elm,state,controlbar,close";
+            source: "";
+            action: STATE_SET "default" 0.0;
+            target: "controlbar_bg";
+            transition: LINEAR 0.2;
+         }
+         program { name: "controlbar_instant_open";
+            signal: "elm,state,controlbar,instant_open";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,show", "elm");
+               emit("elm,state,controlbar,show", "elm");
+            }
+         }
+         program { name: "controlbar_instant_close";
+            signal: "elm,state,controlbar,instant_close";
+            source: "";
+            script {
+               emit("elm,state,prev_btn,hide", "elm");
+               emit("elm,state,controlbar,hide", "elm");
+            }
+         }
+         program { name: "show_finished";
+            action: SIGNAL_EMIT "elm,action,show,finished" "";
+         }
+         program { name: "pushed_finished";
+            action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+         }
+         program { name: "popped_finished";
+            action: SIGNAL_EMIT "elm,action,popped,finished" "";
+         }
+         program {
+            name: "title_clicked";
+            signal: "mouse,clicked,1";
+            source: "click_event_area";
+            action: SIGNAL_EMIT "elm,action,title,clicked" "";
+         }
+      }
+   }
diff --git a/res/edc/gl-nocontents.edc b/res/edc/gl-nocontents.edc
new file mode 100755 (executable)
index 0000000..8b99731
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC 32
+#define NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC 173 170 165 255
+
+   group {
+      name: "elm/layout/nocontents/gallery";
+      styles{
+         style { name: "nocontent_style";
+            base: "font=Helvetica Neue:style=Roman font_size="NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC" align=center color=#ffffff wrap=word";
+            tag:  "br" "\n";
+            tag:  "hilight" "+ font=Helvetica Neue:style=Bold";
+            tag:  "b" "+ font=Helvetica Neue:style=Bold";
+            tag:  "tab" "\t";
+         }
+      }
+      images {
+         image: GALLERY_EDC_IMAGE_NOCONTENTS_PIC COMP;
+      }
+      parts {
+         part { name: "bg";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 1;
+               rel1 { relative: 0.0 0.0;}
+               rel2 { relative: 1.0 1.0;}
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "nocontents.image";
+            description { state: "default" 0.0;
+               visible: 1;
+               align: 0.5 0.0;
+               rel1 { relative: 203/720 296/1016; to: "bg";}
+               rel2 { relative: (203+314)/720 (296+310)/1016; to: "bg";}
+               image {
+                  normal: GALLERY_EDC_IMAGE_NOCONTENTS_PIC;
+                  border: 1 1 1 1;
+                  border_scale: 1;
+               }
+               aspect: 1.0 1.0;
+               aspect_preference: BOTH;
+            }
+         }
+         part { name: "middle.padding";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "nocontents.image";}
+               rel2 { relative: 1.0 (296+310+54)/1016; to: "bg";}
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            description { state: "default" 0.0;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               visible: 1;
+               rel1 { relative: 0.0 1.0; to_x: "bg"; to_y: "middle.padding";}
+               rel2 { relative: 1.0 1.0; to: "bg";}
+               color: NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC;
+               text {
+                  style: "nocontent_style";
+                  align: 0.5 0.5;
+                  min: 0 0;
+                  max: 0 1;
+               }
+            }
+         }
+      }
+   }
diff --git a/res/edc/gl-segment.edc b/res/edc/gl-segment.edc
new file mode 100755 (executable)
index 0000000..c098b2d
--- /dev/null
@@ -0,0 +1,693 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_NORMAL_INC 144 144 144 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_PRESSED_INC 0 0 0 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_SELECTED_INC 0 0 0 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_DISABLED_INC 144 144 144 255
+#define SEGMENT_CONTROL_ITEM_1PX_LEFT_PADDING_COLOR_INC 43 43 43 255
+#define SEGMENT_CONTROL_ITEM_1PX_RIGHT_PADDING_COLOR_INC 76 76 76 255
+
+#define SEGMENT_CONTROL_TEXT_SIZE_INC 28
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MIN_INC 12
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MAX_INC 28
+
+//################################################################
+//Segment Control
+//################################################################
+
+group { name: "elm/segment_control/base/gallery/default";
+   images {
+      image: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL COMP;
+   }
+#define SEGMENT_TYPE_SINGLE 1
+#define SEGMENT_TYPE_LEFT 2
+#define SEGMENT_TYPE_MIDDLE 3
+#define SEGMENT_TYPE_RIGHT 4
+#define SEGMENT_STATE_NORMAL 1
+#define SEGMENT_STATE_PRESSED 2
+#define SEGMENT_STATE_SELECTED 3
+#define SEGMENT_STATUS_ENABLED 0
+#define SEGMENT_STATUS_DISABLED 1
+   parts {
+      part { name: "bg";
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 100 40;
+            rel1.offset: 0 0;
+            rel2.offset: 0 0;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL;
+               border: 5 5 5 5;
+               border_scale: 1;
+               middle: 1;
+            }
+         }
+      }
+   }
+}
+group { name: "elm/segment_control/item/gallery/default";
+   images {
+      image: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_LEFT COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_CENTRE COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_RIGHT COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_NORMAL COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_01 COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_02 COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_03 COMP;
+      image: GALLERY_EDC_IMAGE_BTN_SGE_BODY COMP;
+   }
+   parts {
+      part { name: "base";
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part { name: "segment";
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 1 1;
+            visible: 0;
+            align: 0.0 0.5;
+            rel1 {
+               to: "base";
+               relative: 0.0 0.0;
+               offset: 0 0;
+            }
+            rel2 {
+               to: "base";
+               relative: 1.0 1.0;
+               offset: 0 0;
+            }
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL;
+               border: 5 5 5 5;
+               border_scale: 1;
+               middle: 1;
+            }
+         }
+         description { state: "default_single" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL;
+               border: 5 5 5 5;
+            }
+         }
+         description { state: "default_left" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_LEFT;
+               border:  5 2 5 5;
+            }
+         }
+         description { state: "default_right" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_RIGHT;
+               border: 2 5 5 5;
+            }
+         }
+         description { state: "default_middle" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+            normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_CENTRE;
+            border: 0 0 7 7;
+            }
+         }
+         description { state: "pressed_single" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_NORMAL;
+               border: 2 2 5 5;
+            }
+         }
+         description { state: "pressed_left" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_01;
+               border:  5 2 5 5;
+            }
+         }
+         description { state: "pressed_right" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_03;
+               border: 2 5 5 5;
+            }
+         }
+         description { state: "pressed_middle" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_02;
+               border: 0 0 7 7;
+            }
+         }
+         description { state: "selected_single" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_NORMAL;
+               border: 5 5 5 5;
+            }
+         }
+         description { state: "selected_left" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_01;
+               border:  5 2 5 5;
+            }
+         }
+         description { state: "selected_right" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_03;
+               border: 2 5 5 5;
+            }
+         }
+         description { state: "selected_middle" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_PRESS_02;
+               border: 0 0 7 7;
+            }
+         }
+      }
+      part { name: "left_1pxl_padding";
+         type: RECT;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.0 0.5;
+            min: 1 0;
+            fixed: 1 0;
+            rel1 {
+               to: "base";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to: "base";
+               relative: 0.0 1.0;
+            }
+            color: SEGMENT_CONTROL_ITEM_1PX_LEFT_PADDING_COLOR_INC;
+          }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+          }
+      }
+      part { name: "right_1pxl_padding";
+         type: RECT;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 1.0 0.5;
+            min: 1 0;
+            fixed: 1 0;
+            rel1 {
+               to: "base";
+               relative: 1.0 0.0;
+               offset: -1 0;
+            }
+            rel2 {
+               to: "base";
+               relative: 1.0 1.0;
+               offset: -1 0;
+            }
+            color: SEGMENT_CONTROL_ITEM_1PX_RIGHT_PADDING_COLOR_INC;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part { name: "padding_frame";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            /* Add a padding of 2 pxs in all directions */
+            rel1.offset: 2 2;
+            rel2.offset: -3 -3;
+         }
+      }
+      part { name: "icon.bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 0;
+            rel1.to: "elm.swallow.icon";
+            rel2.to: "elm.swallow.icon";
+         }
+      }
+      part { name: "padding_icon_text";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0; //when only icon or no icon is there
+            visible: 0;
+            align: 0.0 0.0;
+            rel1 {
+               to: "icon.bg";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "icon.bg";
+               relative: 1.0 1.0;
+            }
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+         }
+         description { state: "visible" 0.0; //when icon is visible
+            inherit: "default" 0.0;
+            rel2.offset: 2 0;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.5;
+            rel1.to: "padding_frame";
+            rel2.to: "padding_frame";
+            rel2.relative: 0.0 0.0;
+            aspect: 1.0 1.0;
+            aspect_preference: BOTH;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel2.relative: 0.3 1.0;
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            rel2.relative: 1.0 1.0;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            min: 1 1;
+            rel1 {
+               to_x: "padding_icon_text";
+               relative: 1.0 0.0;
+            }
+            rel2.to: "padding_frame";
+            color: SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_NORMAL_INC;
+            text {
+               font: "Helvetica Neue:style=Medium";
+               ellipsis: 0.0;
+               fit: 1 1;
+               size: SEGMENT_CONTROL_TEXT_SIZE_INC;
+               size_range: SEGMENT_CONTROL_TEXT_SIZE_RANGE_MIN_INC SEGMENT_CONTROL_TEXT_SIZE_RANGE_MAX_INC;
+               min: 0 1;
+            }
+         }
+         description { state: "normal" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_PRESSED_INC;
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_SELECTED_INC;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_DISABLED_INC;
+         }
+      }
+      part { name: "disabler";
+         repeat_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            min: 1 1;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "segment";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "segment";
+            }
+            color: 255 255 255 150;
+         }
+         description { state: "disabled_single" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_BODY;
+               border: 5 5 5 5;
+            }
+         }
+         description { state: "disabled_left" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_LEFT;
+               border:  5 2 5 5;
+            }
+         }
+         description { state: "disabled_right" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_RIGHT;
+               border: 2 5 5 5;
+            }
+         }
+         description { state: "disabled_middle" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            image {
+               normal: GALLERY_EDC_IMAGE_BTN_SGE_NORMAL_CENTRE;
+               border: 0 0 7 7;
+            }
+         }
+      }
+   }
+   programs {
+      script {
+         public seg_type; // Single, Left, Middle, Right.
+         public seg_state; // Normal/Default, Pressed, Selected.
+         public seg_status;// Enabled/Default, Disabled
+
+         public update_state() {
+            new type, state, disabled;
+            type = get_int(seg_type);
+            state = get_int(seg_state);
+            disabled = get_int(seg_status);
+
+            if(state == SEGMENT_STATE_NORMAL)
+              {
+                 if(type == SEGMENT_TYPE_SINGLE)
+                   {
+                      set_state(PART:"segment", "default_single", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_LEFT)
+                   {
+                      set_state(PART:"segment", "default_left", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_MIDDLE)
+                   {
+                      set_state(PART:"segment", "default_middle", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_RIGHT)
+                   {
+                      set_state(PART:"segment", "default_right", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 set_state(PART:"elm.text", "normal", 0.0);
+              }
+            else if(state == SEGMENT_STATE_PRESSED)
+              {
+                 if(type == SEGMENT_TYPE_SINGLE)
+                   {
+                      set_state(PART:"segment", "pressed_single", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_LEFT)
+                   {
+                      set_state(PART:"segment", "pressed_left", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_MIDDLE)
+                   {
+                      set_state(PART:"segment", "pressed_middle", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_RIGHT)
+                   {
+                      set_state(PART:"segment", "pressed_right", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 set_state(PART:"elm.text", "pressed", 0.0);
+              }
+            else if(state == SEGMENT_STATE_SELECTED)
+              {
+                 if(type == SEGMENT_TYPE_SINGLE)
+                   {
+                      set_state(PART:"segment", "selected_single", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_LEFT)
+                   {
+                      set_state(PART:"segment", "selected_left", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_MIDDLE)
+                   {
+                      set_state(PART:"segment", "selected_middle", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_RIGHT)
+                   {
+                      set_state(PART:"segment", "selected_right", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 set_state(PART:"elm.text", "selected", 0.0);
+              }
+            if(disabled == SEGMENT_STATUS_DISABLED)
+              {
+                 if(type == SEGMENT_TYPE_SINGLE)
+                   {
+                      set_state(PART:"disabler", "disabled_single", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_LEFT)
+                   {
+                      set_state(PART:"disabler", "disabled_left", 0.0);
+                      set_state(PART:"left_1pxl_padding", "default", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_MIDDLE)
+                   {
+                      set_state(PART:"disabler", "disabled_middle", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "visible", 0.0);
+                   }
+                 else if(type == SEGMENT_TYPE_RIGHT)
+                   {
+                      set_state(PART:"disabler", "disabled_right", 0.0);
+                      set_state(PART:"left_1pxl_padding", "visible", 0.0);
+                      set_state(PART:"right_1pxl_padding", "default", 0.0);
+                   }
+                 set_state(PART:"elm.text", "disabled", 0.0);
+              }
+            else
+              {
+                 set_state(PART:"disabler", "default", 0.0);
+              }
+         }
+      }
+      program {
+         name: "segment_type_s";
+         signal: "elm,type,segment,single";
+         source: "elm";
+         script {
+            set_int(seg_type, SEGMENT_TYPE_SINGLE);
+            update_state();
+         }
+      }
+      program {
+         name: "segment_type_l";
+         signal: "elm,type,segment,left";
+         source: "elm";
+         script {
+            set_int(seg_type, SEGMENT_TYPE_LEFT);
+            update_state();
+         }
+      }
+      program {
+         name: "segment_type_m";
+         signal: "elm,type,segment,middle";
+         source: "elm";
+         script {
+            set_int(seg_type, SEGMENT_TYPE_MIDDLE);
+            update_state();
+         }
+      }
+      program {
+         name: "segment_type_r";
+         signal: "elm,type,segment,right";
+         source: "elm";
+         script {
+            set_int(seg_type, SEGMENT_TYPE_RIGHT);
+            update_state();
+         }
+      }
+      program {
+         name: "normal_segment";
+         signal: "elm,state,segment,normal";
+         source: "elm";
+         script {
+            set_int(seg_state, SEGMENT_STATE_NORMAL);
+            update_state();
+         }
+      }
+      program {
+         name: "pressed_segment";
+         signal: "elm,state,segment,pressed";
+         source: "elm";
+         script {
+            set_int(seg_state, SEGMENT_STATE_PRESSED);
+            update_state();
+         }
+      }
+      program {
+         name: "selected_segment";
+         signal: "elm,state,segment,selected";
+         source: "elm";
+         script {
+            set_int(seg_state, SEGMENT_STATE_SELECTED);
+            update_state();
+         }
+      }
+      program { name: "disable_segment";
+         signal: "elm,state,disabled";
+         source: "elm";
+         script {
+            set_int(seg_status, SEGMENT_STATUS_DISABLED);
+            update_state();
+         }
+      }
+      program { name: "enable_segment";
+         signal: "elm,state,enabled";
+         source: "elm";
+         script {
+            set_int(seg_status, SEGMENT_STATUS_ENABLED);
+            update_state();
+         }
+      }
+      program { name: "text_show";
+         signal: "elm,state,text,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "icononly"))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"padding_icon_text", "visible", 0.0);
+              }
+            get_state(PART:"elm.text", st, 30, vl);
+            if (!strcmp(st, "selected"))
+               set_state(PART:"elm.text", "selected", 0.0);
+            else
+               set_state(PART:"elm.text", "normal", 0.0);
+         }
+      }
+      program { name: "text_hide";
+         signal: "elm,state,text,hidden";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "visible"))
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"padding_icon_text", "icononly", 0.0);
+              }
+            set_state(PART:"elm.text", "default", 0.0);
+         }
+      }
+      program { name: "icon_show";
+         signal: "elm,state,icon,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.text", st, 30, vl);
+            if ((!strcmp(st, "normal")) || (!strcmp(st, "selected")))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"padding_icon_text", "visible", 0.0);
+              }
+            else
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"padding_icon_text", "icononly", 0.0);
+              }
+         }
+      }
+      program { name: "icon_hide";
+         signal: "elm,state,icon,hidden";
+         source: "elm";
+         action:  STATE_SET "default" 0.0;
+         target: "elm.swallow.icon";
+      }
+   }
+#undef SEGMENT_TYPE_SINGLE
+#undef SEGMENT_TYPE_LEFT
+#undef SEGMENT_TYPE_MIDDLE
+#undef SEGMENT_TYPE_RIGHT
+#undef SEGMENT_STATE_NORMAL
+#undef SEGMENT_STATE_PRESSED
+#undef SEGMENT_STATE_SELECTED
+#undef SEGMENT_STATUS_ENABLED
+#undef SEGMENT_STATUS_DISABLED
+}
diff --git a/res/edc/gl-selection-notification.edc b/res/edc/gl-selection-notification.edc
new file mode 100755 (executable)
index 0000000..509800c
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+  * 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://www.tizenopensource.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.
+  */
+
+//including selection info and notification of delete/move/remove/add...
+#define SELINFO_PORT_W         720
+#define SELINFO_H              48
+#define SELINFO_TOP_LINE_COLOR  56 56 56 255
+#define SELINFO_TOP_LINE_H             2
+#define SELINFO_PAD_L          14
+
+       group
+       {
+           name: "elm/standard/selectioninfo/selectioninfo_viewer";
+           parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               scale : 1;
+                               description {//default, portrait
+                                       state: "default" 0.0;
+                                       min: SELINFO_PORT_W SELINFO_H;
+                                       fixed: 1 1;
+                                       align: 0.5 1.0;
+                                       rel1.relative: 0.5 1.0;
+                                       rel2.relative: 0.5 1.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                        name: "base";
+                        type: RECT;
+                        mouse_events: 1;
+                        scale : 1;
+                        description {
+                               state: "default" 0.0;
+                           min: 0 SELINFO_H;
+                           fixed: 0 1;
+                           align: 0.5 0.0;
+                           rel1 { relative: 0.0 0.0; to: "bg"; }
+                           rel2 { relative: 1.0 1.0; to: "bg"; }
+                           color: GALLERY_EDC_COLOR_THEME_GRAY;
+                                }
+                   }
+                   part { name: "top_line";
+                               type: RECT;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 SELINFO_TOP_LINE_H;
+                                       fixed: 1 0;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "base"; }
+                                       rel2 { relative: 1.0 SELINFO_TOP_LINE_H/SELINFO_H; to: "base"; }
+                                       color: SELINFO_TOP_LINE_COLOR;
+                               }
+                       }
+                       part { name: "left_padding";
+                               type: RECT;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: SELINFO_PAD_L SELINFO_H;
+                                       fixed: 1 1;
+                                       align: 0.5 0.0;
+                                       rel1 { relative: 0.0 0.0; to: "base"; }
+                                       rel2 { relative: 0.0 1.0; to: "base"; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "elm.text";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       rel1 { relative: 1.0 0.0; to_x: "left_padding"; to_y: "base"; }
+                                       rel2 { relative: 1.0 1.0; to: "base"; }
+                                       color: 255 255 255 255;
+                                       text {
+                                               font: "Helvetica Neue:style=Medium";
+                                               size: 32;
+                                               text: "";
+                                               align: 0.5 0.5;
+                                       }
+                               }
+                       }
+           }
+
+               programs {
+                   program {//default selection
+                   name: "selectioninfo_portrait";
+                   signal: "elm,selectioninfo,portrait";
+                   source: "elm";
+                   script {
+                       set_state(PART:"bg", "default", 0.0);
+                       set_state(PART:"base", "default", 0.0);
+                   }
+
+                   }
+           }
+       }
+
diff --git a/res/edc/gl-toolbar.edc b/res/edc/gl-toolbar.edc
new file mode 100755 (executable)
index 0000000..7d144bd
--- /dev/null
@@ -0,0 +1,1744 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXT_SIZE_INC 28
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXTBLOCK_COLOR_INC "#f9f9f9"
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC 56 56
+#define BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC 249 249 249 255
+#define BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC 249 249 249 255
+
+#define ITEM_STATE_ENABLED 0
+#define ITEM_STATE_DISABLED 1
+
+group { name: "elm/toolbar/base/gallery/default";
+   images {
+      image: GALLERY_EDC_IMAGE_CONTROL_TOOLBAR_BG COMP;
+   }
+   parts {
+      part { name: "base";
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            image.normal: GALLERY_EDC_IMAGE_CONTROL_TOOLBAR_BG;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to: "base";
+               offset: 2 2;
+            }
+            rel2 {
+               to: "base";
+               offset: -3 -3;
+            }
+         }
+      }
+      part { name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.to: "clipper";
+            rel2.to: "clipper";
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/item/gallery/default";
+   images {
+      image: GALLERY_EDC_IMAGE_TOOLBAR_PRESS COMP;
+   }
+   styles{
+      style { name: "toolbar_style";
+         base: "font=SLP:style=Medium font_size="BUTTON_CONTROLBAR_ITEM_BUTTON_TEXT_SIZE_INC" align=center color="BUTTON_CONTROLBAR_ITEM_BUTTON_TEXTBLOCK_COLOR_INC" wrap=mixed ellipsis=1";
+         tag: "br" "\n";
+         tag: "ps" "ps";
+         tag: "hilight" "+ font=SLP:style=Bold";
+         tag: "b" "+ font=SLP:style=Bold";
+         tag: "tab" "\t";
+      }
+   }
+
+   data.item: "transition_animation_on" "1";
+   script {
+      public item_state = ITEM_STATE_ENABLED;
+   }
+   parts {
+      part { name: "bg";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            image {
+               normal: GALLERY_EDC_IMAGE_TOOLBAR_PRESS;
+               border: 3 3 3 3;
+            }
+            image.middle: SOLID;
+            fill.smooth: 0;
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: 255 255 255 255;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "padding_left_top";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            align: 0.0 0.0;
+            rel2.relative: 0.0 0.0;
+            min: 10 8;
+            fixed: 1 1;
+            visible: 1;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "padding_right_bottom";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            align: 1.0 1.0;
+            rel1.relative: 1.0 1.0;
+            min: 10 5;
+            fixed: 1 1;
+            visible: 1;
+            color: 0 0 0 0;
+         }
+      }
+      part {
+         name: "icon_rect";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            min: 0 0;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            align: 0.5 0.0;
+            color: 0 0 0 0;
+         }
+         description { state: "visible" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            align: 0.5 0.0;
+            color: 0 0 0 0;
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+         }
+      }
+      part { name: "padding_after_icon";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 0.0 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "icon_rect";
+            }
+            rel2.to: "icon_rect";
+            fixed: 0 1;
+            min: 0 0;
+            color: 0 0 0 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+         }
+      }
+      part { name: "padding_before_text";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 0.5 1.0;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "elm.text";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "elm.text";
+            }
+            fixed: 0 1;
+            min: 0 0;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "elm.icon.clipper";
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            fixed: 0 1;
+         }
+         description { state: "visible" 0.0;
+            fixed: 0 1;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_before_text";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+         description { state: "icononly" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+      }
+      part { name: "elm.swallow.icon_new";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "elm.icon_new.clipper";
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            fixed: 0 1;
+         }
+         description { state: "visible" 0.0;
+            fixed: 0 1;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_before_text";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+         description { state: "icononly" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "elm.text.clipper";
+         description { state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_left_top";
+               to_y: "padding_after_icon";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+            fixed: 1 1;
+            text {
+               style: "toolbar_style";
+               min: 0 1;
+               max: 0 1;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text_new";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "elm.text_new.clipper";
+         description { state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_left_top";
+               to_y: "padding_after_icon";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+            fixed: 1 1;
+            text {
+               style: "toolbar_style";
+               min: 0 1;
+               max: 0 1;
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "disabled" 0.0;
+            color: 255 255 255 153;
+         }
+      }
+      part { name: "elm.text_new.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part { name: "elm.icon.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "disabled" 0.0;
+            color: 255 255 255 153;
+         }
+      }
+      part { name: "elm.icon_new.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         ignore_flags: ON_HOLD;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "event2";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+   programs {
+      program { name: "pressed";
+         signal:  "mouse,down,1";
+         source:  "event";
+         script {
+            if (get_int(item_state) != ITEM_STATE_DISABLED)
+              set_state(PART:"bg", "selected", 0.0);
+         }
+         transition: LINEAR 0.2;
+      }
+      program { name: "unpressed";
+         signal:  "mouse,up,1";
+         source:  "event2";
+         action:  STATE_SET "default" 0.0;
+         target:  "bg";
+         transition: LINEAR 0.1;
+      }
+      program { name: "go";
+         signal:  "mouse,up,1";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,action,click" "elm";
+      }
+      program { name: "mouse,in";
+         signal:  "mouse,in";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,mouse,in" "elm";
+      }
+      program { name: "mouse,out";
+         signal:  "mouse,out";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,mouse,out" "elm";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         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);
+               set_state(PART:"elm.text_new", "disabled_visible", 0.0);
+            }
+            else
+            {
+               set_state(PART:"elm.text", "disabled", 0.0);
+               set_state(PART:"elm.text_new", "disabled", 0.0);
+            }
+            set_state(PART:"elm.text.clipper", "disabled", 0.0);
+            set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+            set_int(item_state, ITEM_STATE_DISABLED);
+         }
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         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);
+               set_state(PART:"elm.text_new", "visible", 0.0);
+            }
+            else
+            {
+               set_state(PART:"elm.text", "default", 0.0);
+               set_state(PART:"elm.text_new", "default", 0.0);
+            }
+            set_state(PART:"elm.text.clipper", "default", 0.0);
+            set_state(PART:"elm.icon.clipper", "default", 0.0);
+            set_int(item_state, ITEM_STATE_ENABLED);
+         }
+      }
+      program { name: "label_set,animation,forward";
+         signal: "elm,state,label_set,forward";
+         source: "elm";
+         after: "label_set,animation";
+      }
+      program { name: "label_set,animation,backward";
+         signal: "elm,state,label_set,backward";
+         source: "elm";
+         after: "label_set,animation";
+      }
+      program { name: "label_set,animation";
+         signal: "elm,state,label_set";
+         source: "elm";
+         action: STATE_SET "animation" 0.0;
+         target: "elm.text.clipper";
+         target: "elm.text_new.clipper";
+         transition: LINEAR 0.2;
+         after: "label_set,animation,done";
+      }
+      program { name: "label_set,animation,done";
+         action: SIGNAL_EMIT "elm,state,label_set,done" "elm";
+      }
+      program { name: "label,reset";
+         signal: "elm,state,label,reset";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text.clipper";
+         target: "elm.text_new.clipper";
+      }
+      program { name: "icon_set,animation,forward";
+         signal: "elm,state,icon_set,forward";
+         source: "elm";
+         after: "icon_set,animation";
+      }
+      program { name: "icon_set,animation,backward";
+         signal: "elm,state,icon_set,backward";
+         source: "elm";
+         after: "icon_set,animation";
+      }
+      program { name: "icon_set,animation";
+         signal: "elm,state,icon_set";
+         source: "elm";
+         action: STATE_SET "animation" 0.0;
+         target: "elm.icon.clipper";
+         target: "elm.icon_new.clipper";
+         transition: LINEAR 0.2;
+         after: "icon_set,animation,done";
+      }
+      program { name: "icon_set,animation,done";
+         action: SIGNAL_EMIT "elm,state,icon_set,done" "elm";
+      }
+      program { name: "icon,reset";
+         signal: "elm,state,icon,reset";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.icon.clipper";
+         target: "elm.icon_new.clipper";
+      }
+      program { name: "text_show";
+         signal: "elm,state,text,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "icononly"))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"icon_rect", "visible", 0.0);
+                 set_state(PART:"padding_after_icon", "visible", 0.0);
+              }
+            set_state(PART:"elm.text", "visible", 0.0);
+         }
+      }
+      program { name: "text_hide";
+         signal: "elm,state,text,hidden";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "visible"))
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"icon_rect", "icononly", 0.0);
+                 set_state(PART:"padding_after_icon", "icononly", 0.0);
+              }
+            set_state(PART:"elm.text", "default", 0.0);
+         }
+      }
+      program { name: "icon_show";
+         signal: "elm,state,icon,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.text", st, 30, vl);
+            if (!strcmp(st, "visible"))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"icon_rect", "visible", 0.0);
+                 set_state(PART:"padding_after_icon", "visible", 0.0);
+              }
+            else
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"icon_rect", "icononly", 0.0);
+                 set_state(PART:"padding_after_icon", "icononly", 0.0);
+              }
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/item/gallery/item_horizontal";
+   inherit: "elm/toolbar/item/gallery/default";
+   script {
+      public item_state = ITEM_STATE_ENABLED;
+   }
+   parts {
+      part { name: "icon_rect";
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            align: 0.0 0.5;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part { name: "padding_after_icon";
+         description { state: "default" 0.0; //when only icon or no icon is there
+            rel1.relative: 1.0 0.0;
+            fixed: 1 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            min: 6 0;
+         }
+      }
+      part { name: "padding_before_text";
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "elm.text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               to_x: "elm.text";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+            min: 6 0;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         description { state: "default" 0.0;
+            align: 0.0 0.5;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "padding_before_text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_before_text";
+               to_y: "padding_right_bottom";
+            }
+            aspect_preference: VERTICAL;
+         }
+         description { state: "icononly" 0.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "elm.swallow.icon_new";
+         description { state: "default" 0.0;
+            align: 0.0 0.5;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "padding_before_text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_before_text";
+               to_y: "padding_right_bottom";
+            }
+            aspect_preference: VERTICAL;
+         }
+         description { state: "icononly" 0.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         description { state: "default" 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_after_icon";
+               to_y: "padding_left_top";
+            }
+            text {
+               style: "toolbar_style";
+               min: 1 0;
+               max: 1 0;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text_new";
+         type: TEXTBLOCK;
+         description { state: "default" 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_after_icon";
+               to_y: "padding_left_top";
+            }
+            text {
+               style: "toolbar_style";
+               min: 1 0;
+               max: 1 0;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/separator/gallery/default";
+   images {
+      image: GALLERY_EDC_IMAGE_SEPARATOR_V COMP;
+   }
+   parts {
+      part { name: "separator"; // separator group
+         description { state: "default" 0.0;
+            min: 2 2;
+            max: 2 9999;
+            rel1.offset: 4 4;
+            rel2.offset: -5 -5;
+            image {
+               normal: GALLERY_EDC_IMAGE_SEPARATOR_V;
+            }
+            fill {
+               smooth: 0;
+            }
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/object/gallery/default";
+   parts {
+      part { name: "elm.swallow.object"; // object group
+         type: SWALLOW;
+         description {
+             state: "default" 0.0;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/base/gallery/tabbar";
+   images {
+      image: GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_TOP COMP;
+   }
+
+   parts {
+      part { name: "base";
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            image.normal: GALLERY_EDC_IMAGE_CONTROL_TABBAR_BG_TOP;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to: "base";
+               offset: 2 2;
+            }
+            rel2 {
+               to: "base";
+               offset: -3 -3;
+            }
+         }
+      }
+      part { name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.to: "clipper";
+            rel2.to: "clipper";
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/item/gallery/tabbar";
+   alias: "elm/toolbar/item/gallery/tabbar/item_horizontal";
+   images {
+      image: GALLERY_EDC_IMAGE_TABBAR_FOCUS COMP;
+   }
+
+   data.item: "transition_animation_on" "1";
+   parts {
+      part { name: "bg";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+            image {
+               normal: GALLERY_EDC_IMAGE_TABBAR_FOCUS;
+            }
+            image.middle: SOLID;
+            fill.smooth: 0;
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: 255 255 255 255;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+            color: 255 255 255 0;
+         }
+      }
+      part { name: "padding_left_top";
+            type: RECT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               rel2.relative: 0.0 0.0;
+               min: 10 8;
+               fixed: 1 1;
+               visible: 1;
+               color: 0 0 0 0;
+            }
+         }
+      part { name: "padding_right_bottom";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            align: 1.0 1.0;
+            rel1.relative: 1.0 1.0;
+            min: 10 5;
+            fixed: 1 1;
+            visible: 1;
+            color: 0 0 0 0;
+         }
+      }
+      part {
+         name: "icon_rect";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            min: 0 0;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            align: 0.5 0.0;
+            color: 0 0 0 0;
+         }
+         description { state: "visible" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            align: 0.5 0.0;
+            color: 0 0 0 0;
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+         }
+      }
+      part { name: "padding_after_icon";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 0.0 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "icon_rect";
+            }
+            rel2.to: "icon_rect";
+            fixed: 0 1;
+            min: 0 0;
+            color: 0 0 0 0;
+         }
+         description { state: "visible" 0.0;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "icon_rect";
+            }
+            rel2.to: "icon_rect";
+            fixed: 0 1;
+            min: 0 0;
+            color: 0 0 0 0;
+         }
+         description { state: "icononly" 0.0;
+            inherit: "default" 0.0;
+         }
+      }
+      part { name: "padding_before_text";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 0.5 1.0;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "elm.text";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "elm.text";
+            }
+            fixed: 0 1;
+            min: 0 0;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "elm.icon.clipper";
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            fixed: 0 1;
+         }
+         description { state: "visible" 0.0;
+            fixed: 0 1;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_before_text";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+         description { state: "icononly" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+      }
+      part { name: "elm.swallow.icon_new";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "elm.icon_new.clipper";
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_left_top";
+            }
+            fixed: 0 1;
+         }
+         description { state: "visible" 0.0;
+            fixed: 0 1;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_right_bottom";
+               to_y: "padding_before_text";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+         description { state: "icononly" 0.0;
+            min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+            rel1 {
+               relative: 1.0 1.0;
+               to: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            aspect: 1.0 1.0;
+            aspect_preference: HORIZONTAL;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "elm.text.clipper";
+         description { state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_left_top";
+               to_y: "padding_after_icon";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+            fixed: 1 1;
+            text {
+               style: "toolbar_style";
+               min: 0 1;
+               max: 0 1;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text_new";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "elm.text_new.clipper";
+         description { state: "default" 0.0;
+            visible: 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_left_top";
+               to_y: "padding_after_icon";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "padding_right_bottom";
+            }
+            color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+            fixed: 1 1;
+            text {
+               style: "toolbar_style";
+               min: 0 1;
+               max: 0 1;
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "disabled" 0.0;
+            color: 255 255 255 153;
+         }
+      }
+      part { name: "elm.text_new.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part { name: "elm.icon.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "disabled" 0.0;
+            color: 255 255 255 153;
+         }
+      }
+      part { name: "elm.icon_new.clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 0;
+         }
+         description { state: "animation" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         ignore_flags: ON_HOLD;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+   programs {
+      program { name: "go_active";
+         signal:  "elm,state,selected";
+         source:  "elm";
+         action:  STATE_SET "selected" 0.0;
+         target:  "bg";
+         transition: LINEAR 0.2;
+      }
+      program { name: "go_passive";
+         signal:  "elm,state,unselected";
+         source:  "elm";
+         action:  STATE_SET "default" 0.0;
+         target:  "bg";
+         transition: LINEAR 0.1;
+      }/*
+         program { name: "pressed";
+         signal:  "mouse,down,1";
+         source:  "event";
+         action:  STATE_SET "selected" 0.0;
+         target:  "bg";
+         target:  "elm.text";
+         target:  "elm.text_new";
+         transition: LINEAR 0.2;
+      }
+      program { name: "unpressed";
+         signal:  "mouse,up,1";
+         source:  "event";
+         action:  STATE_SET "default" 0.0;
+         target:  "bg";
+         target:  "elm.text";
+         target:  "elm.text_new";
+         transition: LINEAR 0.1;
+      }*/
+      program { name: "go";
+         signal:  "mouse,up,1";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,action,click" "elm";
+      }
+      program { name: "mouse,in";
+         signal:  "mouse,in";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,mouse,in" "elm";
+      }
+      program { name: "mouse,out";
+         signal:  "mouse,out";
+         source:  "event";
+         action:  SIGNAL_EMIT "elm,mouse,out" "elm";
+      }
+      program { name: "disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         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);
+               set_state(PART:"elm.text_new", "disabled_visible", 0.0);
+            }
+            else
+            {
+               set_state(PART:"elm.text", "disabled", 0.0);
+               set_state(PART:"elm.text_new", "disabled", 0.0);
+            }
+            set_state(PART:"elm.text.clipper", "disabled", 0.0);
+            set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+         }
+      }
+      program { name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         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);
+               set_state(PART:"elm.text_new", "visible", 0.0);
+            }
+            else
+            {
+               set_state(PART:"elm.text", "default", 0.0);
+               set_state(PART:"elm.text_new", "default", 0.0);
+            }
+            set_state(PART:"elm.text.clipper", "default", 0.0);
+            set_state(PART:"elm.icon.clipper", "default", 0.0);
+         }
+      }
+      program { name: "label_set,animation,forward";
+         signal: "elm,state,label_set,forward";
+         source: "elm";
+         after: "label_set,animation";
+      }
+      program { name: "label_set,animation,backward";
+         signal: "elm,state,label_set,backward";
+         source: "elm";
+         after: "label_set,animation";
+      }
+      program { name: "label_set,animation";
+         signal: "elm,state,label_set";
+         source: "elm";
+         action: STATE_SET "animation" 0.0;
+         target: "elm.text.clipper";
+         target: "elm.text_new.clipper";
+         transition: LINEAR 0.2;
+         after: "label_set,animation,done";
+      }
+      program { name: "label_set,animation,done";
+         action: SIGNAL_EMIT "elm,state,label_set,done" "elm";
+      }
+      program { name: "label,reset";
+         signal: "elm,state,label,reset";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text.clipper";
+         target: "elm.text_new.clipper";
+      }
+      program { name: "icon_set,animation,forward";
+         signal: "elm,state,icon_set,forward";
+         source: "elm";
+         after: "icon_set,animation";
+      }
+      program { name: "icon_set,animation,backward";
+         signal: "elm,state,icon_set,backward";
+         source: "elm";
+         after: "icon_set,animation";
+      }
+      program { name: "icon_set,animation";
+         signal: "elm,state,icon_set";
+         source: "elm";
+         action: STATE_SET "animation" 0.0;
+         target: "elm.icon.clipper";
+         target: "elm.icon_new.clipper";
+         transition: LINEAR 0.2;
+         after: "icon_set,animation,done";
+      }
+      program { name: "icon_set,animation,done";
+         action: SIGNAL_EMIT "elm,state,icon_set,done" "elm";
+      }
+      program { name: "icon,reset";
+         signal: "elm,state,icon,reset";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.icon.clipper";
+         target: "elm.icon_new.clipper";
+      }
+      program { name: "text_show";
+         signal: "elm,state,text,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "icononly"))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"icon_rect", "visible", 0.0);
+                 set_state(PART:"padding_after_icon", "visible", 0.0);
+              }
+            set_state(PART:"elm.text", "visible", 0.0);
+         }
+      }
+      program { name: "text_hide";
+         signal: "elm,state,text,hidden";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.swallow.icon", st, 30, vl);
+            if (!strcmp(st, "visible"))
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"icon_rect", "icononly", 0.0);
+                 set_state(PART:"padding_after_icon", "icononly", 0.0);
+              }
+            set_state(PART:"elm.text", "default", 0.0);
+         }
+      }
+      program { name: "icon_show";
+         signal: "elm,state,icon,visible";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.text", st, 30, vl);
+            if (!strcmp(st, "visible"))
+              {
+                 set_state(PART:"elm.swallow.icon", "visible", 0.0);
+                 set_state(PART:"icon_rect", "visible", 0.0);
+                 set_state(PART:"padding_after_icon", "visible", 0.0);
+              }
+            else
+              {
+                 set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+                 set_state(PART:"icon_rect", "icononly", 0.0);
+                 set_state(PART:"padding_after_icon", "icononly", 0.0);
+              }
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/item/gallery/tabbar/item_horizontal";
+   inherit: "elm/toolbar/item/gallery/tabbar";
+   script {
+      public item_state = ITEM_STATE_ENABLED;
+   }
+   parts {
+      part { name: "icon_rect";
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            align: 0.0 0.5;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part { name: "padding_after_icon";
+         description { state: "default" 0.0; //when only icon or no icon is there
+            rel1.relative: 1.0 0.0;
+            fixed: 1 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            min: 6 0;
+         }
+      }
+      part { name: "padding_before_text";
+         description { state: "default" 0.0; //when only icon or no icon is there
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "elm.text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               to_x: "elm.text";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+            min: 6 0;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         description { state: "default" 0.0;
+            align: 0.0 0.5;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "padding_before_text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_before_text";
+               to_y: "padding_right_bottom";
+            }
+            aspect_preference: VERTICAL;
+         }
+         description { state: "icononly" 0.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "elm.swallow.icon_new";
+         description { state: "default" 0.0;
+            align: 0.0 0.5;
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "padding_left_top";
+               to_y: "padding_right_bottom";
+            }
+            fixed: 1 0;
+         }
+         description { state: "visible" 0.0;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "padding_before_text";
+               to_y: "padding_left_top";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "padding_before_text";
+               to_y: "padding_right_bottom";
+            }
+            aspect_preference: VERTICAL;
+         }
+         description { state: "icononly" 0.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         description { state: "default" 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_after_icon";
+               to_y: "padding_left_top";
+            }
+            text {
+               style: "toolbar_style";
+               min: 1 0;
+               max: 1 0;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+      part { name: "elm.text_new";
+         type: TEXTBLOCK;
+         description { state: "default" 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "padding_after_icon";
+               to_y: "padding_left_top";
+            }
+            text {
+               style: "toolbar_style";
+               min: 1 0;
+               max: 1 0;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+         description { state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/base/naviframe";
+   parts {
+      part { name: "base";
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to: "base";
+               offset: 2 2;
+            }
+            rel2 {
+               to: "base";
+               offset: -3 -3;
+            }
+         }
+      }
+      part { name: "elm.swallow.content";
+         clip_to: "clipper";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.to: "clipper";
+            rel2.to: "clipper";
+         }
+      }
+      part { name: "event";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+}
+
+group { name: "elm/toolbar/object/naviframe";
+   parts {
+      part { name: "elm.swallow.object"; // object group
+         type: SWALLOW;
+         description {
+             state: "default" 0.0;
+                        rel1.offset: 5 0;
+                        rel2.offset: -6 -1;
+         }
+      }
+   }
+}
+
diff --git a/res/enc/conf.enc b/res/enc/conf.enc
new file mode 100755 (executable)
index 0000000..986bf67
Binary files /dev/null and b/res/enc/conf.enc differ
diff --git a/res/gallery.uri b/res/gallery.uri
new file mode 100755 (executable)
index 0000000..721d80e
--- /dev/null
@@ -0,0 +1,2 @@
+(^( )*gallery:)([a-zA-Z0-9]+)
+Gallery Album Shortcut Internal
diff --git a/res/icon/org.tizen.gallery.png b/res/icon/org.tizen.gallery.png
new file mode 100755 (executable)
index 0000000..1a0c715
Binary files /dev/null and b/res/icon/org.tizen.gallery.png differ
diff --git a/res/images/00_MessageBubble_BG_receive.png b/res/images/00_MessageBubble_BG_receive.png
new file mode 100755 (executable)
index 0000000..487636f
Binary files /dev/null and b/res/images/00_MessageBubble_BG_receive.png differ
diff --git a/res/images/00_MessageBubble_BG_send.png b/res/images/00_MessageBubble_BG_send.png
new file mode 100755 (executable)
index 0000000..bc30b93
Binary files /dev/null and b/res/images/00_MessageBubble_BG_send.png differ
diff --git a/res/images/00_button_01_normal.png b/res/images/00_button_01_normal.png
new file mode 100644 (file)
index 0000000..fd06c1c
Binary files /dev/null and b/res/images/00_button_01_normal.png differ
diff --git a/res/images/00_button_01_normal_dim.png b/res/images/00_button_01_normal_dim.png
new file mode 100644 (file)
index 0000000..7bb54fc
Binary files /dev/null and b/res/images/00_button_01_normal_dim.png differ
diff --git a/res/images/00_button_01_normal_press.png b/res/images/00_button_01_normal_press.png
new file mode 100644 (file)
index 0000000..829554a
Binary files /dev/null and b/res/images/00_button_01_normal_press.png differ
diff --git a/res/images/00_button_02_normal.png b/res/images/00_button_02_normal.png
new file mode 100644 (file)
index 0000000..2d3c75a
Binary files /dev/null and b/res/images/00_button_02_normal.png differ
diff --git a/res/images/00_button_04_dim.png b/res/images/00_button_04_dim.png
new file mode 100644 (file)
index 0000000..df381ba
Binary files /dev/null and b/res/images/00_button_04_dim.png differ
diff --git a/res/images/00_button_04_normal.png b/res/images/00_button_04_normal.png
new file mode 100644 (file)
index 0000000..1709d98
Binary files /dev/null and b/res/images/00_button_04_normal.png differ
diff --git a/res/images/00_button_04_press.png b/res/images/00_button_04_press.png
new file mode 100644 (file)
index 0000000..829554a
Binary files /dev/null and b/res/images/00_button_04_press.png differ
diff --git a/res/images/00_button_popup_dim.png b/res/images/00_button_popup_dim.png
new file mode 100644 (file)
index 0000000..d29bf72
Binary files /dev/null and b/res/images/00_button_popup_dim.png differ
diff --git a/res/images/00_button_popup_focus.png b/res/images/00_button_popup_focus.png
new file mode 100644 (file)
index 0000000..ca979d4
Binary files /dev/null and b/res/images/00_button_popup_focus.png differ
diff --git a/res/images/00_button_popup_normal.png b/res/images/00_button_popup_normal.png
new file mode 100644 (file)
index 0000000..79f8a59
Binary files /dev/null and b/res/images/00_button_popup_normal.png differ
diff --git a/res/images/00_button_popup_press.png b/res/images/00_button_popup_press.png
new file mode 100644 (file)
index 0000000..e691671
Binary files /dev/null and b/res/images/00_button_popup_press.png differ
diff --git a/res/images/00_button_rename_press.png b/res/images/00_button_rename_press.png
new file mode 100644 (file)
index 0000000..4a0215c
Binary files /dev/null and b/res/images/00_button_rename_press.png differ
diff --git a/res/images/00_button_sweep.png b/res/images/00_button_sweep.png
new file mode 100644 (file)
index 0000000..6d9c78f
Binary files /dev/null and b/res/images/00_button_sweep.png differ
diff --git a/res/images/00_button_sweep_dim.png b/res/images/00_button_sweep_dim.png
new file mode 100644 (file)
index 0000000..ee06ef6
Binary files /dev/null and b/res/images/00_button_sweep_dim.png differ
diff --git a/res/images/00_button_sweep_press.png b/res/images/00_button_sweep_press.png
new file mode 100644 (file)
index 0000000..04a2e9d
Binary files /dev/null and b/res/images/00_button_sweep_press.png differ
diff --git a/res/images/00_check_bg_dim.png b/res/images/00_check_bg_dim.png
new file mode 100644 (file)
index 0000000..d95649c
Binary files /dev/null and b/res/images/00_check_bg_dim.png differ
diff --git a/res/images/00_grid_edit_text_bg.png b/res/images/00_grid_edit_text_bg.png
new file mode 100755 (executable)
index 0000000..9d79d1e
Binary files /dev/null and b/res/images/00_grid_edit_text_bg.png differ
diff --git a/res/images/00_grid_select_check.png b/res/images/00_grid_select_check.png
new file mode 100644 (file)
index 0000000..4385567
Binary files /dev/null and b/res/images/00_grid_select_check.png differ
diff --git a/res/images/00_winset_Back.png b/res/images/00_winset_Back.png
new file mode 100755 (executable)
index 0000000..780e24e
Binary files /dev/null and b/res/images/00_winset_Back.png differ
diff --git a/res/images/00_winset_Back_btn_normal.png b/res/images/00_winset_Back_btn_normal.png
new file mode 100755 (executable)
index 0000000..cb7ca0b
Binary files /dev/null and b/res/images/00_winset_Back_btn_normal.png differ
diff --git a/res/images/00_winset_Back_btn_press.png b/res/images/00_winset_Back_btn_press.png
new file mode 100755 (executable)
index 0000000..7032b70
Binary files /dev/null and b/res/images/00_winset_Back_btn_press.png differ
diff --git a/res/images/00_winset_btn_sge_body.png b/res/images/00_winset_btn_sge_body.png
new file mode 100644 (file)
index 0000000..5be172b
Binary files /dev/null and b/res/images/00_winset_btn_sge_body.png differ
diff --git a/res/images/00_winset_btn_sge_normal.png b/res/images/00_winset_btn_sge_normal.png
new file mode 100644 (file)
index 0000000..8babbff
Binary files /dev/null and b/res/images/00_winset_btn_sge_normal.png differ
diff --git a/res/images/00_winset_btn_sge_normal_centre.png b/res/images/00_winset_btn_sge_normal_centre.png
new file mode 100644 (file)
index 0000000..78f6ac0
Binary files /dev/null and b/res/images/00_winset_btn_sge_normal_centre.png differ
diff --git a/res/images/00_winset_btn_sge_normal_left.png b/res/images/00_winset_btn_sge_normal_left.png
new file mode 100644 (file)
index 0000000..54095be
Binary files /dev/null and b/res/images/00_winset_btn_sge_normal_left.png differ
diff --git a/res/images/00_winset_btn_sge_normal_right.png b/res/images/00_winset_btn_sge_normal_right.png
new file mode 100644 (file)
index 0000000..670f953
Binary files /dev/null and b/res/images/00_winset_btn_sge_normal_right.png differ
diff --git a/res/images/00_winset_btn_sge_press_01.png b/res/images/00_winset_btn_sge_press_01.png
new file mode 100644 (file)
index 0000000..845b19f
Binary files /dev/null and b/res/images/00_winset_btn_sge_press_01.png differ
diff --git a/res/images/00_winset_btn_sge_press_02.png b/res/images/00_winset_btn_sge_press_02.png
new file mode 100644 (file)
index 0000000..5bc86d0
Binary files /dev/null and b/res/images/00_winset_btn_sge_press_02.png differ
diff --git a/res/images/00_winset_btn_sge_press_03.png b/res/images/00_winset_btn_sge_press_03.png
new file mode 100644 (file)
index 0000000..bd0f1bd
Binary files /dev/null and b/res/images/00_winset_btn_sge_press_03.png differ
diff --git a/res/images/00_winset_btn_sge_press_normal.png b/res/images/00_winset_btn_sge_press_normal.png
new file mode 100644 (file)
index 0000000..20cd6d4
Binary files /dev/null and b/res/images/00_winset_btn_sge_press_normal.png differ
diff --git a/res/images/00_winset_control_tabbar_bg.png b/res/images/00_winset_control_tabbar_bg.png
new file mode 100644 (file)
index 0000000..84d70d6
Binary files /dev/null and b/res/images/00_winset_control_tabbar_bg.png differ
diff --git a/res/images/00_winset_control_tabbar_bg_left.png b/res/images/00_winset_control_tabbar_bg_left.png
new file mode 100644 (file)
index 0000000..51a7f80
Binary files /dev/null and b/res/images/00_winset_control_tabbar_bg_left.png differ
diff --git a/res/images/00_winset_control_tabbar_bg_right.png b/res/images/00_winset_control_tabbar_bg_right.png
new file mode 100644 (file)
index 0000000..4a08d75
Binary files /dev/null and b/res/images/00_winset_control_tabbar_bg_right.png differ
diff --git a/res/images/00_winset_tabbar_focus_left.png b/res/images/00_winset_tabbar_focus_left.png
new file mode 100755 (executable)
index 0000000..72217df
Binary files /dev/null and b/res/images/00_winset_tabbar_focus_left.png differ
diff --git a/res/images/00_winset_tabbar_focus_right.png b/res/images/00_winset_tabbar_focus_right.png
new file mode 100755 (executable)
index 0000000..d9400e6
Binary files /dev/null and b/res/images/00_winset_tabbar_focus_right.png differ
diff --git a/res/images/00_winset_tabbar_press.png b/res/images/00_winset_tabbar_press.png
new file mode 100755 (executable)
index 0000000..002b02c
Binary files /dev/null and b/res/images/00_winset_tabbar_press.png differ
diff --git a/res/images/00_winset_tabbar_press_left.png b/res/images/00_winset_tabbar_press_left.png
new file mode 100755 (executable)
index 0000000..bc0b2f0
Binary files /dev/null and b/res/images/00_winset_tabbar_press_left.png differ
diff --git a/res/images/00_winset_tabbar_press_right.png b/res/images/00_winset_tabbar_press_right.png
new file mode 100755 (executable)
index 0000000..ee617ce
Binary files /dev/null and b/res/images/00_winset_tabbar_press_right.png differ
diff --git a/res/images/00_winset_tabbar_press_top.png b/res/images/00_winset_tabbar_press_top.png
new file mode 100644 (file)
index 0000000..28d74b6
Binary files /dev/null and b/res/images/00_winset_tabbar_press_top.png differ
diff --git a/res/images/T01_EditField_clear.png b/res/images/T01_EditField_clear.png
new file mode 100644 (file)
index 0000000..8335151
Binary files /dev/null and b/res/images/T01_EditField_clear.png differ
diff --git a/res/images/T01_Nocontents_broken.png b/res/images/T01_Nocontents_broken.png
new file mode 100644 (file)
index 0000000..c200d0c
Binary files /dev/null and b/res/images/T01_Nocontents_broken.png differ
diff --git a/res/images/T01_Nocontents_picture.png b/res/images/T01_Nocontents_picture.png
new file mode 100644 (file)
index 0000000..0f98480
Binary files /dev/null and b/res/images/T01_Nocontents_picture.png differ
diff --git a/res/images/T01_Option_header_bt.png b/res/images/T01_Option_header_bt.png
new file mode 100644 (file)
index 0000000..fedede6
Binary files /dev/null and b/res/images/T01_Option_header_bt.png differ
diff --git a/res/images/T01_Option_header_bt_dim.png b/res/images/T01_Option_header_bt_dim.png
new file mode 100644 (file)
index 0000000..501d9e8
Binary files /dev/null and b/res/images/T01_Option_header_bt_dim.png differ
diff --git a/res/images/T01_Option_header_bt_press.png b/res/images/T01_Option_header_bt_press.png
new file mode 100644 (file)
index 0000000..978107c
Binary files /dev/null and b/res/images/T01_Option_header_bt_press.png differ
diff --git a/res/images/T01_album_checkbox.png b/res/images/T01_album_checkbox.png
new file mode 100644 (file)
index 0000000..10b692d
Binary files /dev/null and b/res/images/T01_album_checkbox.png differ
diff --git a/res/images/T01_album_checkbox_check.png b/res/images/T01_album_checkbox_check.png
new file mode 100644 (file)
index 0000000..95ef8fa
Binary files /dev/null and b/res/images/T01_album_checkbox_check.png differ
diff --git a/res/images/T01_btn_gridview.png b/res/images/T01_btn_gridview.png
new file mode 100644 (file)
index 0000000..86784bc
Binary files /dev/null and b/res/images/T01_btn_gridview.png differ
diff --git a/res/images/T01_btn_gridview_press.png b/res/images/T01_btn_gridview_press.png
new file mode 100644 (file)
index 0000000..c94ae7c
Binary files /dev/null and b/res/images/T01_btn_gridview_press.png differ
diff --git a/res/images/T01_btn_play.png b/res/images/T01_btn_play.png
new file mode 100755 (executable)
index 0000000..b25d19c
Binary files /dev/null and b/res/images/T01_btn_play.png differ
diff --git a/res/images/T01_btn_thumbnail_play.png b/res/images/T01_btn_thumbnail_play.png
new file mode 100644 (file)
index 0000000..2ea3599
Binary files /dev/null and b/res/images/T01_btn_thumbnail_play.png differ
diff --git a/res/images/T01_button_circle_bg_normal.png b/res/images/T01_button_circle_bg_normal.png
new file mode 100644 (file)
index 0000000..b5c5c6c
Binary files /dev/null and b/res/images/T01_button_circle_bg_normal.png differ
diff --git a/res/images/T01_button_circle_bg_normal_press.png b/res/images/T01_button_circle_bg_normal_press.png
new file mode 100644 (file)
index 0000000..9ffa194
Binary files /dev/null and b/res/images/T01_button_circle_bg_normal_press.png differ
diff --git a/res/images/T01_button_rename.png b/res/images/T01_button_rename.png
new file mode 100644 (file)
index 0000000..a30b486
Binary files /dev/null and b/res/images/T01_button_rename.png differ
diff --git a/res/images/T01_check.png b/res/images/T01_check.png
new file mode 100644 (file)
index 0000000..d5057e4
Binary files /dev/null and b/res/images/T01_check.png differ
diff --git a/res/images/T01_checkbox.png b/res/images/T01_checkbox.png
new file mode 100644 (file)
index 0000000..61dc76a
Binary files /dev/null and b/res/images/T01_checkbox.png differ
diff --git a/res/images/T01_control_tabbar_bg.png b/res/images/T01_control_tabbar_bg.png
new file mode 100644 (file)
index 0000000..502d4b7
Binary files /dev/null and b/res/images/T01_control_tabbar_bg.png differ
diff --git a/res/images/T01_control_tabbar_bg_h.png b/res/images/T01_control_tabbar_bg_h.png
new file mode 100644 (file)
index 0000000..b20ca53
Binary files /dev/null and b/res/images/T01_control_tabbar_bg_h.png differ
diff --git a/res/images/T01_controlbar_icon_cancel.png b/res/images/T01_controlbar_icon_cancel.png
new file mode 100644 (file)
index 0000000..cef573e
Binary files /dev/null and b/res/images/T01_controlbar_icon_cancel.png differ
diff --git a/res/images/T01_controlbar_icon_delete.png b/res/images/T01_controlbar_icon_delete.png
new file mode 100644 (file)
index 0000000..2b0f808
Binary files /dev/null and b/res/images/T01_controlbar_icon_delete.png differ
diff --git a/res/images/T01_controlbar_icon_edit.png b/res/images/T01_controlbar_icon_edit.png
new file mode 100644 (file)
index 0000000..0c59cb7
Binary files /dev/null and b/res/images/T01_controlbar_icon_edit.png differ
diff --git a/res/images/T01_controlbar_icon_move.png b/res/images/T01_controlbar_icon_move.png
new file mode 100644 (file)
index 0000000..0731410
Binary files /dev/null and b/res/images/T01_controlbar_icon_move.png differ
diff --git a/res/images/T01_grid_select_check.png b/res/images/T01_grid_select_check.png
new file mode 100644 (file)
index 0000000..f131f47
Binary files /dev/null and b/res/images/T01_grid_select_check.png differ
diff --git a/res/images/T01_icon_thumbnail_bookmark.png b/res/images/T01_icon_thumbnail_bookmark.png
new file mode 100755 (executable)
index 0000000..bdb690a
Binary files /dev/null and b/res/images/T01_icon_thumbnail_bookmark.png differ
diff --git a/res/images/T01_list_icon_bookmark.png b/res/images/T01_list_icon_bookmark.png
new file mode 100755 (executable)
index 0000000..4a85437
Binary files /dev/null and b/res/images/T01_list_icon_bookmark.png differ
diff --git a/res/images/T01_main_folder_bg.png b/res/images/T01_main_folder_bg.png
new file mode 100644 (file)
index 0000000..16d1d59
Binary files /dev/null and b/res/images/T01_main_folder_bg.png differ
diff --git a/res/images/T01_tabbar_focus.png b/res/images/T01_tabbar_focus.png
new file mode 100644 (file)
index 0000000..6c46e25
Binary files /dev/null and b/res/images/T01_tabbar_focus.png differ
diff --git a/res/images/T01_thumbs_bg.png b/res/images/T01_thumbs_bg.png
new file mode 100644 (file)
index 0000000..c71e2d3
Binary files /dev/null and b/res/images/T01_thumbs_bg.png differ
diff --git a/res/images/T01_title_btn.png b/res/images/T01_title_btn.png
new file mode 100644 (file)
index 0000000..20c31f1
Binary files /dev/null and b/res/images/T01_title_btn.png differ
diff --git a/res/images/T01_title_btn_press.png b/res/images/T01_title_btn_press.png
new file mode 100644 (file)
index 0000000..49861ed
Binary files /dev/null and b/res/images/T01_title_btn_press.png differ
diff --git a/res/images/T01_toolbar_bg.png b/res/images/T01_toolbar_bg.png
new file mode 100644 (file)
index 0000000..63cad45
Binary files /dev/null and b/res/images/T01_toolbar_bg.png differ
diff --git a/res/images/T01_toolbar_press.png b/res/images/T01_toolbar_press.png
new file mode 100644 (file)
index 0000000..825785c
Binary files /dev/null and b/res/images/T01_toolbar_press.png differ
diff --git a/res/images/T01_video_list_progress_bar.png b/res/images/T01_video_list_progress_bar.png
new file mode 100644 (file)
index 0000000..cc9c1bc
Binary files /dev/null and b/res/images/T01_video_list_progress_bar.png differ
diff --git a/res/images/T01_video_list_progress_bg.png b/res/images/T01_video_list_progress_bg.png
new file mode 100644 (file)
index 0000000..ce1f37a
Binary files /dev/null and b/res/images/T01_video_list_progress_bg.png differ
diff --git a/res/images/bt_sm_base2.png b/res/images/bt_sm_base2.png
new file mode 100644 (file)
index 0000000..f159648
Binary files /dev/null and b/res/images/bt_sm_base2.png differ
diff --git a/res/images/copy&paste_Icon_left.png b/res/images/copy&paste_Icon_left.png
new file mode 100755 (executable)
index 0000000..ccb6b09
Binary files /dev/null and b/res/images/copy&paste_Icon_left.png differ
diff --git a/res/images/copy&paste_Icon_left_press.png b/res/images/copy&paste_Icon_left_press.png
new file mode 100755 (executable)
index 0000000..0661a0b
Binary files /dev/null and b/res/images/copy&paste_Icon_left_press.png differ
diff --git a/res/images/copy&paste_Icon_left_top.png b/res/images/copy&paste_Icon_left_top.png
new file mode 100755 (executable)
index 0000000..ebe24a4
Binary files /dev/null and b/res/images/copy&paste_Icon_left_top.png differ
diff --git a/res/images/copy&paste_Icon_left_top_press.png b/res/images/copy&paste_Icon_left_top_press.png
new file mode 100755 (executable)
index 0000000..b715059
Binary files /dev/null and b/res/images/copy&paste_Icon_left_top_press.png differ
diff --git a/res/images/copy&paste_Icon_right.png b/res/images/copy&paste_Icon_right.png
new file mode 100755 (executable)
index 0000000..c658e9e
Binary files /dev/null and b/res/images/copy&paste_Icon_right.png differ
diff --git a/res/images/copy&paste_Icon_right_press.png b/res/images/copy&paste_Icon_right_press.png
new file mode 100755 (executable)
index 0000000..3e33af7
Binary files /dev/null and b/res/images/copy&paste_Icon_right_press.png differ
diff --git a/res/images/copy&paste_Icon_right_top.png b/res/images/copy&paste_Icon_right_top.png
new file mode 100755 (executable)
index 0000000..300eebc
Binary files /dev/null and b/res/images/copy&paste_Icon_right_top.png differ
diff --git a/res/images/copy&paste_Icon_right_top_press.png b/res/images/copy&paste_Icon_right_top_press.png
new file mode 100755 (executable)
index 0000000..1dc1ad1
Binary files /dev/null and b/res/images/copy&paste_Icon_right_top_press.png differ
diff --git a/res/images/gallery_btn_sge_normal.png b/res/images/gallery_btn_sge_normal.png
new file mode 100644 (file)
index 0000000..1aaa327
Binary files /dev/null and b/res/images/gallery_btn_sge_normal.png differ
diff --git a/res/images/gallery_list_icon_bookmark.png b/res/images/gallery_list_icon_bookmark.png
new file mode 100755 (executable)
index 0000000..4a199bf
Binary files /dev/null and b/res/images/gallery_list_icon_bookmark.png differ
diff --git a/res/images/magnifier.png b/res/images/magnifier.png
new file mode 100644 (file)
index 0000000..0547496
Binary files /dev/null and b/res/images/magnifier.png differ
diff --git a/res/images/magnifier_line.png b/res/images/magnifier_line.png
new file mode 100644 (file)
index 0000000..14ba52c
Binary files /dev/null and b/res/images/magnifier_line.png differ
diff --git a/res/images/magnifier_noarrow.png b/res/images/magnifier_noarrow.png
new file mode 100644 (file)
index 0000000..7cbd2a7
Binary files /dev/null and b/res/images/magnifier_noarrow.png differ
diff --git a/res/images/magnifier_noarrow_line.png b/res/images/magnifier_noarrow_line.png
new file mode 100644 (file)
index 0000000..fcfdb10
Binary files /dev/null and b/res/images/magnifier_noarrow_line.png differ
diff --git a/res/images/naviframe_optionheader.png b/res/images/naviframe_optionheader.png
new file mode 100644 (file)
index 0000000..79a20ff
Binary files /dev/null and b/res/images/naviframe_optionheader.png differ
diff --git a/res/images/naviframe_optionheader_arrow.png b/res/images/naviframe_optionheader_arrow.png
new file mode 100644 (file)
index 0000000..5b39fe1
Binary files /dev/null and b/res/images/naviframe_optionheader_arrow.png differ
diff --git a/res/images/reader_handler_down.png b/res/images/reader_handler_down.png
new file mode 100644 (file)
index 0000000..8e95761
Binary files /dev/null and b/res/images/reader_handler_down.png differ
diff --git a/res/images/reader_handler_up.png b/res/images/reader_handler_up.png
new file mode 100644 (file)
index 0000000..172e2a3
Binary files /dev/null and b/res/images/reader_handler_up.png differ
diff --git a/res/images/reader_longtap_blue.png b/res/images/reader_longtap_blue.png
new file mode 100644 (file)
index 0000000..16df225
Binary files /dev/null and b/res/images/reader_longtap_blue.png differ
diff --git a/res/images/separator_v.png b/res/images/separator_v.png
new file mode 100755 (executable)
index 0000000..cd1b018
Binary files /dev/null and b/res/images/separator_v.png differ
diff --git a/res/po/CMakeLists.txt b/res/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..2e5ef6d
--- /dev/null
@@ -0,0 +1,30 @@
+# for i18n
+
+#SET(POFILES en_US.po en_GB.po ja.po ko.po zh_CN.po)
+#SET(POFILES en_US.po nl.po de.po zh_HK.po zh_CN.po ru.po ko.po
+#      zh_TW.po ja.po es.po el.po it.po tr.po pt.po fr.po)
+SET(POFILES en.po nl_NL.po de_DE.po zh_HK.po zh_CN.po ru_RU.po ko_KR.po zh_TW.po ja_JP.po es_ES.po el_GR.po it_IT.po tr_TR.po pt_PT.po fr_FR.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 res/locale/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+#Share mo files with Gallery UG.
+       INSTALL(FILES ${moFile}
+                       DESTINATION /opt/ug/res/locale/${lang}/LC_MESSAGES RENAME ${GALLERY_UG_PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/res/po/POTFILES.in b/res/po/POTFILES.in
new file mode 100755 (executable)
index 0000000..8af85a8
--- /dev/null
@@ -0,0 +1,13 @@
+# List of source files containing translatable strings.
+../src/gallery.c
+../src/features/gl-albums.c
+../src/features/gl-gridview.c
+../src/features/gl-listview.c
+../src/features/gl-controlbar.c
+../src/features/gl-button.c
+../src/util/gl-debug.c
+../src/util/gl-ui-util.c
+../src/util/gl-ext-exec.c
+../src/util/gl-ext-ug-load.c
+../src/util/gl-util.c
+../src/util/gl-ta.c src/util/gl-db-handler.c
diff --git a/res/po/de_DE.po b/res/po/de_DE.po
new file mode 100755 (executable)
index 0000000..63585ec
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Neues Album"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Keine Alben"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Während der USB-Speichermodus aktiv ist, kann nicht gestartet werden."
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Umbenennen nicht möglich"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Kein Name"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Keine Alben ausgewählt."
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Element auswählen"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Album auswählen"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Alle Alben"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Erneut versuchen?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Derselbe Name wird bereits verwendet"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Eintrag ist leer"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Ungültiger Eingabeparameter"
+
diff --git a/res/po/el_GR.po b/res/po/el_GR.po
new file mode 100755 (executable)
index 0000000..41a630c
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Νέο άλμπουμ"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Δεν υπάρχουν άλμπουμ"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Δεν είναι δυνατή η εκκίνηση όταν η λειτουργία αποθήκευσης USB είναι ενεργή"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Δεν είναι δυνατή η μετονομασία"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Κανένα όνομα"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Δεν έχουν επιλεγεί άλμπουμ"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Επιλογή στοιχείου"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Επιλογή άλμπουμ"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Όλα τα άλμπουμ"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Επανάληψη;"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Το όνομα χρησιμοποιείται ήδη"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Κενή καταχώρηση"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Μη έγκυρη παράμετρος δεδομένων εισόδου"
+
diff --git a/res/po/en.po b/res/po/en.po
new file mode 100755 (executable)
index 0000000..4648c34
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "New album"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "No albums"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Unable to start while USB storage mode active"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Unable to rename"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "No name"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "No albums selected"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Select item"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Select album"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "All albums"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Retry?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Same name already in use"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Entry is empty"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Invalid input parameter"
+
diff --git a/res/po/es_ES.po b/res/po/es_ES.po
new file mode 100755 (executable)
index 0000000..4019ae0
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Nuevo álbum"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "No hay álbumes"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "No se puede iniciar cuando está activo el modo de almacenamiento USB"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Imposible cambiar el nombre"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Sin nombre"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "No hay álbumes seleccionados"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Seleccionar elemento"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Seleccionar álbum"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Todos los álbumes"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "¿Volver a intentar?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "El mismo nombre ya está en uso"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Entrada vacía"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Parámetro de entrada no válido"
+
diff --git a/res/po/fr_FR.po b/res/po/fr_FR.po
new file mode 100755 (executable)
index 0000000..2368662
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Nouvel album"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Aucun album"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Impossible de démarrer tant que le mode de stockage USB est activé"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Impossible de renommer l'élément"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Aucun nom"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Aucun album sélectionné"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Sélectionner un élément"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Sélectionner un album"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Tous les albums"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Réessayer ?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Nom déjà utilisé"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Entrée vide"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Paramètre d'entrée non valide"
+
diff --git a/res/po/it_IT.po b/res/po/it_IT.po
new file mode 100755 (executable)
index 0000000..88bfe65
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Nuovo album"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Nessun album"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Impossibile avviare se la modalità archiviazione USB è attiva"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Impossibile rinominare"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Nessun nome"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Nessun album selezionato"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Seleziona elemento"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Seleziona album"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Tutti gli album"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Riprovare?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Stesso nome già in uso"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Voce vuota"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Parametro inserimento non valido"
+
diff --git a/res/po/ja_JP.po b/res/po/ja_JP.po
new file mode 100755 (executable)
index 0000000..32bd2d6
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "新規​アルバム"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "アルバム​が​ありません。"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "ユーザーメモリ(本体)起動中は、開始できません"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "名前を変更​できません"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "名前なし"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "アルバムが選択されていません。"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "アイテムを選択してください。"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr " アルバム​を​選択"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "全アルバム"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "やり直し​ます​か?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "同じ​名前​が​既に​使用​されて​います"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "未入力​です"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "入力​パラメーター​が​無効​です"
+
diff --git a/res/po/ko_KR.po b/res/po/ko_KR.po
new file mode 100755 (executable)
index 0000000..867aa68
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "새 앨범"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "앨범이 없습니다"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "내장 메모리 모드가 실행되어 있을 때는 시작할 수 없습니다"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "이름을 변경할 수 없습니다"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "이름이 없습니다"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "선택된 앨범이 없습니다"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "항목을 선택하세요"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "앨범 선택"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "모든 앨범"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "다시 시도할까요?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "사용 중인 이름입니다"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "입력된 내용이 없습니다"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "사용할 수 없는 입력값입니다"
+
diff --git a/res/po/nl_NL.po b/res/po/nl_NL.po
new file mode 100755 (executable)
index 0000000..840a5a6
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Nieuw album"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Geen albums"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Kan niet starten als USB-opslag actief is"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Kan de naam niet wijzigen"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Geen naam"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Geen albums geselecteerd"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Item selecteren"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Album selecteren"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Alle albums"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Opnieuw?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Naam is al in gebruik"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Geen gegevens"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Ongeldige invoerparameter"
+
diff --git a/res/po/pt_PT.po b/res/po/pt_PT.po
new file mode 100755 (executable)
index 0000000..f0981a6
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Álbum novo"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Nenhuns álbuns"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Impossível iniciar enquanto o modo de armazenamento USB estiver ativo"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Impossível mudar nome"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Sem nome"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Nenhuns álbuns seleccionados"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Seleccionar item"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Seleccionar álbum"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Todos os álbuns"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Tentar novamente?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Já está a ser utilizado o mesmo nome"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Entrada vazia"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Parâmetro de entrada inválido"
+
diff --git a/res/po/ru_RU.po b/res/po/ru_RU.po
new file mode 100755 (executable)
index 0000000..74ba342
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Новый альбом"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Нет альбомов"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "Невозможно начать при включенном режиме съемного диска USB"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Невозможно переименовать"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "Нет имени"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Альбомы не выбраны"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Выберите элемент"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Выберите альбом"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Все альбомы"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Повторить?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Имя уже используется"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Пустая запись"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Неверные параметры ввода"
+
diff --git a/res/po/tr_TR.po b/res/po/tr_TR.po
new file mode 100755 (executable)
index 0000000..935294b
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "Yeni albüm"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "Albüm yok"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "USB depolama modu etkinken başlatılamıyor"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "Yeniden adlandırılamıyor. Dosya kullanımda."
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "İsim yok"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "Albüm seçilmedi"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "Öğe seç"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "Albüm seç"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "Tüm albümler"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "Tekrar denensin mi?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "İsim zaten kullanımda"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "Girdi yok"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "Geçersiz giriş parametresi"
+
diff --git a/res/po/zh_CN.po b/res/po/zh_CN.po
new file mode 100755 (executable)
index 0000000..10e11da
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "新相册"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "无专辑"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "当USB存储模式启动时,无法启动"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "无法重命名"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "无名称"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "未选择音乐库"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "选择项目"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "选择音乐库"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "所有相册"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "重试?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名字已使用"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "空记录"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "输入参数无效"
+
diff --git a/res/po/zh_HK.po b/res/po/zh_HK.po
new file mode 100755 (executable)
index 0000000..5a88279
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "新相簿"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "沒有專輯"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "當 USB 儲存裝置模式啟動時無法開始"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "無法重新命名"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "沒有姓名"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "未選擇專輯"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "選擇項目"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "選擇專輯"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "全部專輯"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "要重試嗎?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名稱已被使用"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "空白記錄"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "輸入參數無效"
+
diff --git a/res/po/zh_TW.po b/res/po/zh_TW.po
new file mode 100755 (executable)
index 0000000..d1aa4f1
--- /dev/null
@@ -0,0 +1,39 @@
+msgid "IDS_MEDIABR_TAB4_NEW_ALBUM"
+msgstr "新專輯"
+
+msgid "IDS_MEDIABR_BODY_NO_ALBUMS"
+msgstr "無相簿"
+
+msgid "IDS_MEDIABR_BODY_UNABLE_TO_START_WHILE_USB_STORAGE_MODE_ACTIVE"
+msgstr "當 USB 儲存模式啟用時無法開始"
+
+msgid "IDS_MEDIABR_POP_UNABLE_TO_RENAME"
+msgstr "無法重新命名"
+
+msgid "IDS_MEDIABR_POP_NO_NAME"
+msgstr "無姓名"
+
+msgid "IDS_MEDIABR_POP_NO_ALBUMS_SELECTED"
+msgstr "未選擇專輯"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ITEM"
+msgstr "選擇項目"
+
+msgid "IDS_MEDIABR_HEADER_SELECT_ALBUM"
+msgstr "選擇專輯"
+
+msgid "IDS_MEDIABR_BODY_ALL_ALBUMS"
+msgstr "所有專輯"
+
+msgid "IDS_MEDIABR_POP_RETRY_Q"
+msgstr "要重試嗎?"
+
+msgid "IDS_MEDIABR_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名稱已在使用中"
+
+msgid "IDS_MEDIABR_POP_ENTRY_IS_EMPTY"
+msgstr "項目為空"
+
+msgid "IDS_MEDIABR_POP_INVALID_INPUT_PARAMETER"
+msgstr "輸入參數無效"
+
diff --git a/src/features/gl-albums.c b/src/features/gl-albums.c
new file mode 100755 (executable)
index 0000000..b923ea8
--- /dev/null
@@ -0,0 +1,1346 @@
+/*
+  * 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://www.tizenopensource.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 <vconf.h>
+#include <vconf-keys.h>
+#include "gl-debug.h"
+#include "gl-albums.h"
+#include "gl-gridview.h"
+#include "gl-listview.h"
+#include "gl-controlbar.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-button.h"
+#include "gl-db-handler.h"
+#include "gl-popup.h"
+#include "gl-progressbar.h"
+#include "gl-strings.h"
+
+/* Width and height of album item */
+#define GL_ALBUM_ITEM_WIDTH 358
+#define GL_ALBUM_ITEM_HEIGHT 360
+
+#define GL_ALBUM_COVER_THUMB_1 1
+#define GL_ALBUM_COVER_THUMB_2 2
+#define GL_ALBUM_COVER_THUMB_3 3
+
+/* Size of album icon */
+#define GL_COVER_SIZE 318
+/* Size of table padding */
+#define GL_COVER_PAD 3
+#define GL_COVER_PAD_1 2
+/* Pure size of album icon; value: 196 */
+#define GL_COVER_ICON_S (GL_COVER_SIZE - 2 * GL_COVER_PAD)
+/**
+* Album icon is set by elm_table,
+* it's divided into 3x3, 9 grids, each grid size is 64
+*/
+#define GL_COVER_GRID_S 102
+/* value: 130 */
+#define GL_COVER_2X_GRID_S (GL_COVER_ICON_S - GL_COVER_GRID_S - GL_COVER_PAD)
+
+/* Album color level and alpha value */
+#define GL_ALBUM_TEXT_COLOR_CNT 6
+#define GL_ALBUM_TEXT_COLOR_ALPHA 255
+
+#define GL_CHECKBOX_STYLE_ALBUM "gallery/album"
+#define GL_CHECKBOX_STYLE_ALBUM_GRID "gallery/album/grid"
+#define GL_GENGRID_STYLE_ALBUM "unclipped"
+#define GL_ALBUM_CHECKBOX "elm.swallow.end"
+#define GL_ALBUM_CHECKBOX_GRID "elm.swallow.check_grid"
+#define GL_ALBUM_RENAME "elm.swallow.rename"
+#define GL_GENGRID_STYLE_ALBUM_VIEW  "gallery/albums_view"
+#define GL_GENGRID_STYLE_ALBUM_VIEW_BLUE  "gallery/albums_view_blue"
+
+
+struct gl_color {
+       int r;
+       int g;
+       int b;
+};
+
+/**
+*  Album "All albums", "Camera shots"
+*  bg color is 25:25:25
+*/
+static struct gl_color bg_color[] = {
+       {50, 50, 50},
+       {78, 74, 64},
+       {206, 108, 1},
+       {157, 35, 39},
+       {20, 60, 128},
+       {84, 109, 49},
+       {25, 25, 25},
+};
+
+static void _gl_albums_drag_up(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_drag_right(void *data, Evas_Object *obj,
+                                 void *event_info)
+{
+}
+
+static void _gl_albums_drag_down(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_drag_left(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_drag_stop(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+void _gl_albums_realized(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_selected(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_unselected(void *data, Evas_Object *obj,
+                                 void *event_info)
+{
+}
+
+static void _gl_albums_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+}
+
+static void _gl_albums_comeback_from_view_cb(void *data,
+                                            Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       /* Reset aul launch flag if change to albums view */
+       ad->albuminfo.aul_launch_by_mime = false;
+       ad->albuminfo.aul_launch_type = GL_AUL_T_NONE;
+
+       gl_albums_del_grid_append_idler(ad);
+       gl_albums_comeback_from_view(ad);
+
+       gl_ui_disable_toolbar_item(ad, false, GL_NAVI_ALBUMS, false);
+}
+
+static Eina_Bool _gl_albums_append_grid_idler(void *data)
+{
+       GL_CHECK_CANCEL(data);
+
+       /* Try to get other medias from DB and append them to gridview */
+       int ret = gl_grid_idler_append_items(data);
+       if (ret < 0) {
+               gl_dbg("Failed to append grid items!");
+               /* Maybe all medias were already showed */
+               if (ret == MB_SVC_ERROR_DB_NO_RECORD)
+                       gl_dbg("No any more records!");
+       } else {
+               gl_dbg("Successful to append grid items!");
+       }
+
+       /* Remove idler after all items appended */
+       gl_albums_del_grid_append_idler(data);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/**
+* @Brif Update checkbox state and album cover and update selectioninfo.
+*
+* @Param data  gl_appdata.
+* @Param album_item  album item.
+* @Param check_obj  object of checkbox.
+* @Param b_ck_box  true: Checkbox selection, false: album cover selection.
+*/
+static int _gl_albums_update_check_state(void *data,
+                                        gl_cluster *album_item,
+                                        Evas_Object *check_obj, bool b_ck_box)
+{
+       GL_CHECK_VAL(album_item, -1);
+       GL_CHECK_VAL(album_item->cluster, -1);
+       GL_CHECK_VAL(album_item->cluster->uuid, -1);
+       GL_CHECK_VAL(check_obj, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("Select checkbox[1]/album_cover[0]: %d.", b_ck_box);
+
+       /* Update state of checkbox */
+       album_item->checked = !album_item->checked;
+       gl_dbg("album (%s) check state: %d", album_item->cluster->display_name,
+              album_item->checked);
+
+       /**
+       * If album cover selected, update checkbox icon manually,
+       * If checkbox selected, its icon is updated by system automatically.
+       */
+       Evas_Object *ck = NULL;
+       if (b_ck_box == false)
+               ck = elm_object_item_part_content_get(album_item->item,
+                                                     GL_ALBUM_CHECKBOX);
+       else
+               ck = elm_object_item_part_content_get(album_item->item,
+                                                     GL_ALBUM_CHECKBOX_GRID);
+       elm_check_state_set(ck, album_item->checked);
+
+       if (album_item->checked) {
+               gl_dbg("Append:%s, id:%s", album_item->cluster->display_name,
+                      album_item->cluster->uuid);
+               gl_db_albums_selected_list_append(ad, album_item);
+       } else {
+               gl_dbg("Remove:%s, id:%s", album_item->cluster->display_name,
+                      album_item->cluster->uuid);
+               gl_db_albums_selected_list_remove(ad, album_item);
+       }
+
+       /* Display selectioninfo */
+       int cnt = gl_db_get_albums_selected_cnt(ad);
+       gl_ui_create_selinfo(ad, ad->albuminfo.edit_layout,
+                            ad->albuminfo.nf_it_edit, ad->albuminfo.albums_cnt,
+                            cnt, false);
+
+       return 0;
+}
+
+static void _gl_albums_check_changed(void *data, Evas_Object *obj,
+                                    void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       GL_CHECK(album_item->ad);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       gl_dbg("");
+
+       if (gl_get_view_mode(ad) != GL_VIEW_ALBUMS_EDIT) {
+               gl_dbgE("Wrong view mode!");
+               return;
+       }
+
+       /* Checkbox selected, b_ck_box=true */
+       _gl_albums_update_check_state(ad, album_item, obj, true);
+}
+
+static void _gl_albums_check_grid_changed(void *data, Evas_Object *obj,
+                                          void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       GL_CHECK(album_item->ad);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       gl_dbg("");
+
+       if (gl_get_view_mode(ad) != GL_VIEW_ALBUMS_EDIT) {
+               gl_dbgE("Wrong view mode!");
+               return;
+       } else {
+               /* gl_dbg("EditMode"); */
+       }
+
+       /* Grid checkbox selected, b_ck_box=false */
+       _gl_albums_update_check_state(ad, album_item, obj, false);
+}
+
+/* Callback of normal icon */
+static void __gl_albums_sel_cb(void *data,Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(event_info);
+       GL_CHECK(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       GL_CHECK(album_item->cluster);
+       GL_CHECK(album_item->ad);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
+
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+               return;
+
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view mode: %d.", view_mode);
+       if (view_mode != GL_VIEW_ALBUMS_EDIT) {
+               if (album_item->cluster->count == 0) {
+                       gl_dbgW("Empty album, return;");
+                       return;
+               }
+               gl_albums_sel_album(album_item);
+       }
+}
+
+static void __gl_rename_album_job_cb(void *userdata)
+{
+       GL_CHECK(userdata);
+       gl_cluster *album_item = (gl_cluster *)userdata;
+       gl_ui_rename_album(album_item);
+       return;
+}
+
+static void _gl_albums_rename_btn_cb(void *data, Evas_Object *obj,
+                                    void *event_info)
+{
+       gl_dbg("");
+       GL_CHECK(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+
+       /* Return if album selected */
+       if (!album_item->checked) {
+               gl_dbgW("Album checked!");
+               return;
+       }
+
+       /* Album cover selected, b_ck_box=false, deselect checkbox */
+       Evas_Object *ck = NULL;
+       ck = elm_object_item_part_content_get(album_item->item,
+                                             GL_ALBUM_CHECKBOX);
+       _gl_albums_update_check_state(ad, album_item, ck, false);
+
+       if(ad->maininfo.rename_album_job) {
+               ecore_job_del(ad->maininfo.rename_album_job);
+               ad->maininfo.rename_album_job = NULL;
+       }
+       ad->maininfo.rename_album_job = ecore_job_add(__gl_rename_album_job_cb,album_item);
+}
+
+char *_gl_albums_get_text(void *data, Evas_Object *obj, const char *part)
+{
+       GL_CHECK_NULL(part);
+       GL_CHECK_NULL(strlen(part));
+       GL_CHECK_NULL(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       GL_CHECK_NULL(album_item->cluster);
+       GL_CHECK_NULL(album_item->cluster->display_name);
+       GL_CHECK_NULL(album_item->cluster->uuid);
+       GL_CHECK_NULL(album_item->ad);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       char buf[GL_ALBUM_NAME_LEN_MAX] = { 0, };
+
+       if (!strcmp(part, "elm.text.name")) {
+               gl_dbg("text.name");
+               if (album_item->cluster->display_name &&
+                   strlen(album_item->cluster->display_name))
+                       snprintf(buf, sizeof(buf), "%s",
+                                (char *)(album_item->cluster->display_name));
+               else if (gl_db_is_root_path(ad, album_item->cluster->uuid, NULL))
+                       snprintf(buf, sizeof(buf), GL_ALBUM_PHOME_ROOT_NAME);
+               else
+                       gl_dbgE("Album name[%s] is wrong!",
+                               album_item->cluster->display_name);
+       } else if (!strcmp(part, "elm.text.date")) {
+               struct tm t1;
+               struct tm t2;
+               char date1[GL_DATE_INFO_LEN_MAX] = { 0, };
+               char date2[GL_DATE_INFO_LEN_MAX] = { 0, };
+               char date3[GL_DATE_INFO_LEN_MAX] = { 0, };
+               int i = 0;
+               int item_count = GL_ALBUM_COVER_THUMB_NUM;
+               gl_item **items1 = ad->albuminfo.cover_thumbs;
+               gl_albums_free_cover_thumbs(ad);
+
+               gl_db_get_first_several_items(album_item,
+                                             items1, &item_count,
+                                             MINFO_MEDIA_SORT_BY_DATE_DESC);
+
+
+               if (item_count <= 0) {
+                       gl_dbg("Empty album...");
+                       ad->albuminfo.album_medias_cnt = 0;
+                       return NULL;
+               }
+
+               ad->albuminfo.album_medias_cnt = item_count;
+               if (items1[0] == NULL || items1[0]->item == NULL) {
+                       gl_dbgE("[Error] Invalid item!");
+                       ad->albuminfo.album_medias_cnt = 0;
+                       return NULL;
+               }
+               memcpy(&album_item->item_mtime,
+                      &(items1[0]->item->mtime), sizeof(time_t));
+
+               item_count = 1;
+               gl_item *items2[1];
+               int sort_t = MINFO_MEDIA_SORT_BY_DATE_ASC;
+               memset(items2, 0x00, item_count * sizeof(int));
+               gl_db_get_first_several_items(album_item,
+                                             items2, &item_count,
+                                             sort_t);
+
+               if (item_count <= 0) {
+                       gl_dbg("Empty album...");
+                       return NULL;
+               } else {
+                       memset(&t1, 0x00, sizeof(struct tm));
+                       localtime_r((time_t *)&(album_item->item_mtime),
+                                   &t1);
+                       strftime(date1, sizeof(date1), "%Y.%m.%d", &t1);
+                       strftime(date3, sizeof(date3), "%Y.%m", &t1);
+
+                       if (items2[0] == NULL
+                           || items2[0]->item == NULL) {
+                               gl_dbgE("Invalid items2[0].");
+                               ad->albuminfo.album_medias_cnt = 0;
+                               return NULL;
+                       }
+                       memset(&t2, 0x00, sizeof(struct tm));
+                       localtime_r((time_t *)&(items2[0]->item->mtime),
+                                   &t2);
+                       strftime(date2, sizeof(date2), "%Y.%m.%d", &t2);
+
+                       if (!strcmp(date1, date2)) {
+                               g_strlcpy(buf, date1, sizeof(buf));
+                       } else {
+                               strftime(date2, sizeof(date2), "%Y.%m",
+                                        &t2);
+                               snprintf(buf, sizeof(buf), "%s - %s",
+                                        date2, date3);
+                       }
+               }
+
+               for (i = 0; i < item_count; i++) {
+                       gl_db_destroy_item(items2[i]);
+                       items2[i] = NULL;
+               }
+       } else if (!strcmp(part, "elm.text.count")) {
+               gl_db_update_item_cnt(album_item);
+               snprintf(buf, sizeof(buf), "%d",
+                        (int)(album_item->cluster->count));
+       }
+
+       return strdup(buf);
+
+}
+
+static Evas_Object *_gl_albums_add_1_icon_bg(Evas_Object *obj, gl_item *git,
+                                            int wid, int hei)
+{
+       GL_CHECK_NULL(obj);
+       Evas_Object *bg = elm_bg_add(obj);
+       GL_CHECK_NULL(bg);
+       elm_bg_load_size_set(bg, wid, hei);
+
+       _gl_ui_elm_bg_file_set(bg, git);
+
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bg, 0.5, 0.5);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static Evas_Object *_gl_albums_add_1st_icon_bg(Evas_Object *obj, gl_item *git,
+                                              int wid, int hei)
+{
+       GL_CHECK_NULL(obj);
+       Evas_Object *bg = elm_bg_add(obj);
+       GL_CHECK_NULL(bg);
+       elm_bg_load_size_set(bg, wid, hei);
+
+       _gl_ui_elm_bg_file_set(bg, git);
+
+       evas_object_size_hint_min_set(bg, wid, hei);
+       evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL,
+                                        1, 1);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(bg);
+       return bg;
+}
+
+static Evas_Object *_gl_albums_add_3_icon_bg(Evas_Object *obj, gl_item **items,
+                                            int length, double scale)
+{
+       GL_CHECK_NULL(obj);
+       gl_item *git = NULL;
+       int i = 0;
+       int r1 = 0;
+       int wid = 0;
+       int hei = 0;
+       Evas_Object *bg = NULL;
+       int tp_val = 0;
+       Evas_Object *tb = elm_table_add(obj);
+       GL_CHECK_NULL(tb);
+       elm_table_padding_set(tb, GL_COVER_PAD * scale, GL_COVER_PAD * scale);
+
+       r1 = 1;
+       for (i = 1; i < length; i++) {
+               git = items[i];
+               bg = elm_bg_add(tb);
+               GL_CHECK_NULL(bg);
+               if (i == 1) {
+                       wid = (int)(GL_COVER_2X_GRID_S * scale);
+                       hei = wid;
+               } else {
+                       wid = (int)(GL_COVER_GRID_S * scale);
+                       hei = (int)(GL_COVER_2X_GRID_S * scale);
+               }
+               elm_bg_load_size_set(bg, wid, hei);
+               evas_object_size_hint_min_set(bg, wid, hei);
+               elm_table_padding_set(tb, GL_COVER_PAD_1 * scale,
+                                     GL_COVER_PAD_1 * scale);
+
+               _gl_ui_elm_bg_file_set(bg, git);
+
+               evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL,
+                                                1, 1);
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL,
+                                               EVAS_HINT_FILL);
+               if (i == 1) {
+                       elm_table_pack(tb, bg, 0, 0, 2, 2);
+               } else {
+                       tp_val = EVAS_ASPECT_CONTROL_VERTICAL;
+                       evas_object_size_hint_aspect_set(bg, tp_val, 1, 1);
+                       elm_table_pack(tb, bg, 2, 0, 1, 2);
+               }
+               evas_object_show(bg);
+       }
+
+       return tb;
+}
+
+static Evas_Object *_gl_albums_add_4_icon_bg(Evas_Object *obj, gl_item **items,
+                                            int length, double scale)
+{
+       GL_CHECK_NULL(obj);
+       gl_item *git = NULL;
+       int i = 0;
+       int r1 = 0;
+       int wid = 0;
+       int hei = 0;
+       Evas_Object *bg = NULL;
+
+       Evas_Object *tb = elm_table_add(obj);
+       GL_CHECK_NULL(tb);
+       elm_table_padding_set(tb, GL_COVER_PAD * scale, GL_COVER_PAD * scale);
+       elm_table_padding_set(tb, GL_COVER_PAD_1 * scale,
+                             GL_COVER_PAD_1 * scale);
+       r1 = 1;
+       for (i = 1; i < length; i++) {
+               git = items[i];
+               bg = elm_bg_add(tb);
+               GL_CHECK_NULL(bg);
+               if (i == 1) {
+                       wid = (int)(GL_COVER_2X_GRID_S * scale);
+                       hei = wid;
+               } else {
+                       wid = (int)(GL_COVER_GRID_S * scale);
+                       hei = wid;
+               }
+               elm_bg_load_size_set(bg, wid, hei);
+               evas_object_size_hint_min_set(bg, wid, hei);
+
+               _gl_ui_elm_bg_file_set(bg, git);
+
+               evas_object_size_hint_aspect_set(bg,
+                                                EVAS_ASPECT_CONTROL_VERTICAL,
+                                                1, 1);
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL,
+                                               EVAS_HINT_FILL);
+               if (i == 1)
+                       elm_table_pack(tb, bg, 0, 0, 2, 2);
+               else if (i == 2)
+                       elm_table_pack(tb, bg, 2, 0, 1, 1);
+               else if (i == 3)
+                       elm_table_pack(tb, bg, 2, 1, 1, 1);
+               evas_object_show(bg);
+       }
+
+       return tb;
+}
+
+static Evas_Object *_gl_albums_add_7_icon_bg(Evas_Object *obj, gl_cluster *album,
+                                            gl_item **items, int length, int idx,
+                                            double scale)
+{
+       GL_CHECK_NULL(album);
+       GL_CHECK_NULL(album->cluster);
+       GL_CHECK_NULL(album->cluster->uuid);
+       GL_CHECK_NULL(obj);
+       gl_item *git = NULL;
+       int i = 0;
+       int j = 0;
+       int wid = 0;
+       int hei = 0;
+       Evas_Object *bg = NULL;
+
+       Evas_Object *tb = elm_table_add(obj);
+       GL_CHECK_NULL(tb);
+       elm_table_padding_set(tb, GL_COVER_PAD * scale, GL_COVER_PAD * scale);
+
+       wid = (int)(GL_COVER_GRID_S * scale);
+       hei = wid;
+
+       for (i = 1; i < GL_ALBUM_COVER_THUMB_NUM; i++) {
+               if (i < length) {
+                       git = items[i];
+                       bg = elm_bg_add(tb);
+                       GL_CHECK_NULL(bg);
+                       elm_bg_load_size_set(bg, wid, hei);
+                       _gl_ui_elm_bg_file_set(bg, git);
+               } else {
+                       Evas *evas = evas_object_evas_get(obj);
+                       GL_CHECK_NULL(evas);
+                       bg = evas_object_rectangle_add(evas);
+                       GL_CHECK_NULL(bg);
+                       if (!g_strcmp0(album->cluster->uuid, GL_ALBUM_ALL_ID) ||
+                           gl_db_is_default_album(album->ad, album->cluster))
+                               j = GL_ALBUM_TEXT_COLOR_CNT;
+                       else
+                               j = idx % GL_ALBUM_TEXT_COLOR_CNT;
+                       evas_object_color_set(bg, bg_color[j].r, bg_color[j].g,
+                                             bg_color[j].b,
+                                             GL_ALBUM_TEXT_COLOR_ALPHA);
+               }
+
+               evas_object_size_hint_aspect_set(bg,
+                                                EVAS_ASPECT_CONTROL_VERTICAL,
+                                                1, 1);
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL,
+                                               EVAS_HINT_FILL);
+               elm_table_pack(tb, bg, (int)((i - 1) % 3), (int)((i - 1) / 3),
+                              1, 1);
+               evas_object_show(bg);
+       }
+
+       return tb;
+}
+
+Evas_Object *_gl_albums_get_content(void *data, Evas_Object *obj, const char *part)
+{
+       GL_CHECK_NULL(part);
+       GL_CHECK_NULL(strlen(part));
+       GL_CHECK_NULL(data);
+       gl_cluster *album_item = (gl_cluster *)data;
+       GL_CHECK_NULL(album_item->cluster);
+       GL_CHECK_NULL(album_item->ad);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       double scale = ad->maininfo.win_scale;
+       GL_CHECK_NULL(album_item->cluster->uuid);
+       const char *al_id = album_item->cluster->uuid;
+       int view_mode = gl_get_view_mode(ad);
+       int idx = album_item->index;
+       int j = 0;
+
+       if ((!strcmp(part, "elm.swallow.firsticon")) ||
+           (!strcmp(part, "elm.swallow.icon")) ||
+           (!strcmp(part, "elm.swallow.onlyicon"))) {
+               if (view_mode != GL_VIEW_ALBUMS &&
+                   view_mode != GL_VIEW_ALBUMS_EDIT)
+                       return NULL;
+
+               gl_item **items = ad->albuminfo.cover_thumbs;
+               int len = ad->albuminfo.album_medias_cnt;
+               if (len <= 0) {
+                       gl_dbg("Empty local album.");
+                       return NULL;
+               }
+
+               Evas_Object *bg = NULL;
+               int wid = 0;
+               int hei = 0;
+               gl_item *gl_it = NULL;
+
+               if (!strcmp(part, "elm.swallow.onlyicon")) {
+                       if (len != GL_ALBUM_COVER_THUMB_1) {
+                               return NULL;
+                       } else {
+                               wid = (int)(GL_COVER_ICON_S * scale);
+                               hei = wid;
+                               gl_it = items[0];
+                               bg = _gl_albums_add_1_icon_bg(obj, gl_it, wid,
+                                                             hei);
+                               return bg;
+                       }
+               }
+
+               if (!strcmp(part, "elm.swallow.firsticon")) {
+                       gl_dbg("firsticon");
+                       if (len <= GL_ALBUM_COVER_THUMB_1) {
+                               return NULL;
+                       } else {
+                               wid = (int)(GL_COVER_GRID_S * scale);
+                               hei = wid;
+                               gl_it = items[0];
+                               bg = _gl_albums_add_1st_icon_bg(obj, gl_it, wid,
+                                                               hei);
+
+                               return bg;
+                       }
+               }
+
+               if (!strcmp(part, "elm.swallow.icon")) {
+                       gl_dbg("icon");
+                       Evas_Object *tb = NULL;
+                       if (len == GL_ALBUM_COVER_THUMB_1) {
+                               return NULL;
+                       } else if (len == GL_ALBUM_COVER_THUMB_2) {
+                               wid = (int)(GL_COVER_ICON_S * scale);
+                               hei = (int)(GL_COVER_2X_GRID_S * scale);
+                               gl_it = items[1];
+                               bg = _gl_albums_add_1_icon_bg(obj, gl_it, wid,
+                                                             hei);
+                               return bg;
+                       } else if (len == GL_ALBUM_COVER_THUMB_3) {
+                               tb = _gl_albums_add_3_icon_bg(obj, items, len,
+                                                             scale);
+                       } else if (len < GL_ALBUM_COVER_THUMB_NUM) {
+                               len = GL_ALBUM_COVER_THUMB_NUM_SEC;
+                               tb = _gl_albums_add_4_icon_bg(obj, items, len,
+                                                             scale);
+                       } else {
+                               /**
+                               * Set 7 grid for 'All' album
+                               * and 'Camera shots'.
+                               */
+                               Mcluster *mclu = album_item->cluster;
+                               bool is_def = false;
+                               is_def = gl_db_is_default_album(ad, mclu);
+
+                               if (!g_strcmp0(al_id, GL_ALBUM_ALL_ID) ||
+                                   is_def) {
+                                       tb = _gl_albums_add_7_icon_bg(obj,
+                                                                     album_item,
+                                                                     items,
+                                                                     len,
+                                                                     idx,
+                                                                     scale);
+                               } else {
+                                       int al_len = 0;
+                                       al_len = GL_ALBUM_COVER_THUMB_NUM_SEC;
+                                       tb = _gl_albums_add_4_icon_bg(obj,
+                                                                     items,
+                                                                     al_len,
+                                                                     scale);
+                               }
+                       }
+                       evas_object_show(tb);
+                       return tb;
+               }
+       } else if (!strcmp(part, "label_bg")) {
+               Evas *evas = evas_object_evas_get(obj);
+               GL_CHECK_NULL(evas);
+               Evas_Object *bg = NULL;
+               bg = evas_object_rectangle_add(evas);
+               GL_CHECK_NULL(bg);
+               /**
+               *  for "All albums", and "Camera shots", their colors should be
+               *  25:25:25 by new gui
+               */
+               if (!g_strcmp0(al_id, GL_ALBUM_ALL_ID) ||
+                   gl_db_is_default_album(ad, album_item->cluster))
+                       j = GL_ALBUM_TEXT_COLOR_CNT;
+               else
+                       j = idx % GL_ALBUM_TEXT_COLOR_CNT;
+               evas_object_color_set(bg, bg_color[j].r, bg_color[j].g,
+                                     bg_color[j].b,
+                                     GL_ALBUM_TEXT_COLOR_ALPHA);
+
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL,
+                                               EVAS_HINT_FILL);
+               evas_object_show(bg);
+               return bg;
+       } else if (!strcmp(part, GL_ALBUM_CHECKBOX_GRID) &&
+                  view_mode == GL_VIEW_ALBUMS_EDIT) {
+               Evas_Object *ck = NULL;
+               ck = elm_check_add(obj);
+               GL_CHECK_NULL(ck);
+               elm_object_style_set(ck, GL_CHECKBOX_STYLE_ALBUM_GRID);
+               evas_object_repeat_events_set(ck, EINA_TRUE);
+               elm_check_state_set(ck, album_item->checked);
+               evas_object_smart_callback_add(ck, "changed",
+                                              _gl_albums_check_grid_changed,
+                                              data);
+               evas_object_show(ck);
+               return ck;
+       } else if (!strcmp(part, GL_ALBUM_CHECKBOX) &&
+                  view_mode == GL_VIEW_ALBUMS_EDIT) {
+               Evas_Object *ck = NULL;
+               ck = elm_check_add(obj);
+               GL_CHECK_NULL(ck);
+               elm_object_style_set(ck, GL_CHECKBOX_STYLE_ALBUM);
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+               elm_check_state_set(ck, album_item->checked);
+               evas_object_smart_callback_add(ck, "changed",
+                                              _gl_albums_check_changed,
+                                              data);
+               evas_object_show(ck);
+               return ck;
+       } else if (!strcmp(part, GL_ALBUM_RENAME) &&
+                  view_mode == GL_VIEW_ALBUMS_EDIT) {
+               /**
+               * Fixme: In My Files app, it's unable to rename
+               * 'My video clips', 'Wallpapers' and 'My photo clips'.
+               * Maybe we need to remove rename button
+               * from these three albums cover.
+               */
+
+               /**
+               * Don't add rename button to 'All albums',
+               * and 'Camera shot'[default album]
+               */
+               if (!g_strcmp0(al_id, GL_ALBUM_ALL_ID) ||
+                   gl_db_is_default_album(ad, album_item->cluster))
+                       return NULL;
+
+               Evas_Object *btn = NULL;
+               btn = _gl_but_create_but(obj, GL_BUT_NONE,
+                                        GL_BUTTON_STYLE_RENAME);
+               GL_CHECK_NULL(btn);
+               evas_object_propagate_events_set(btn, EINA_FALSE);
+               evas_object_smart_callback_add(btn, "clicked",
+                                              _gl_albums_rename_btn_cb, data);
+               return btn;
+       }
+       return NULL;
+}
+
+static int _gl_albums_create_items(void *data, Evas_Object *parent)
+{
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       gl_cluster *album_item = NULL;
+       int length = 0;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       /* Clear albums view */
+       elm_gengrid_clear(parent);
+
+       ad->albuminfo.albumgic.item_style = GL_GENGRID_STYLE_ALBUM_VIEW;
+       ad->albuminfo.albumgic.func.text_get = _gl_albums_get_text;
+       ad->albuminfo.albumgic.func.content_get = _gl_albums_get_content;
+       /* Show blue folder name */
+       ad->albuminfo.albumgic_blue.item_style = GL_GENGRID_STYLE_ALBUM_VIEW_BLUE;
+       ad->albuminfo.albumgic_blue.func.text_get = _gl_albums_get_text;
+       ad->albuminfo.albumgic_blue.func.content_get = _gl_albums_get_content;
+
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+       GL_CHECK_VAL(ad->albuminfo.cluster_list->clist, -1);
+       Eina_List *clist = ad->albuminfo.cluster_list->clist;
+       length = eina_list_count(clist);
+       gl_dbg("Albums length: %d", length);
+       const char *al_id = NULL;
+       Elm_Gengrid_Item_Class *pgic = &(ad->albuminfo.albumgic);
+       Elm_Gengrid_Item_Class *pgic_blue = &(ad->albuminfo.albumgic_blue);
+       int item_cnt = 0;
+
+       for (i = 0; i < length; i++) {
+               album_item = eina_list_nth(clist, i);
+               GL_CHECK_VAL(album_item, -1);
+               GL_CHECK_VAL(album_item->cluster, -1);
+               GL_CHECK_VAL(album_item->cluster->display_name, -1);
+               GL_CHECK_VAL(album_item->cluster->uuid, -1);
+               al_id = album_item->cluster->uuid;
+
+
+               if (view_mode == GL_VIEW_ALBUMS_EDIT) {
+                       if (!g_strcmp0(al_id, GL_ALBUM_ALL_ID) )
+                               continue;
+               }
+
+               /* Show blue folder name */
+               if (!g_strcmp0(album_item->cluster->uuid, GL_ALBUM_ALL_ID) ||
+                   gl_db_is_default_album(ad, album_item->cluster))
+                       album_item->item = elm_gengrid_item_append(parent,
+                                                                  pgic_blue,
+                                                                  album_item,
+                                                                  __gl_albums_sel_cb,
+                                                                  album_item);
+               else
+                       album_item->item = elm_gengrid_item_append(parent, pgic,
+                                                                  album_item,
+                                                                  __gl_albums_sel_cb,
+                                                                  album_item);
+               album_item->index = item_cnt;
+               item_cnt++;
+               gl_dbg("Append[%s], id=%s.", album_item->cluster->display_name,
+                      al_id);
+       }
+
+       ad->albuminfo.albums_cnt = item_cnt;
+
+       return 0;
+}
+
+int gl_albums_sel_album(gl_cluster *album_item)
+{
+       GL_CHECK_VAL(album_item, -1);
+       GL_CHECK_VAL(album_item->cluster, -1);
+       GL_CHECK_VAL(album_item->cluster->uuid, -1);
+       GL_CHECK_VAL(album_item->ad, -1);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+       GL_CHECK_VAL(ad->albuminfo.cluster_list->clist, -1);
+       int view_mode = gl_get_view_mode(ad);
+
+       if (view_mode != GL_VIEW_ALBUMS) {
+               gl_dbgE("Wrong view mode!");
+               return -1;
+       } else {
+               gl_dbg("ViewMode");
+       }
+
+       Evas_Object *layout = NULL;
+       char *al_na = album_item->cluster->display_name;
+       Evas_Object *navi = ad->maininfo.navi_bar;
+       gl_dbg("current %s album, id=%s, cluster_index=%d",
+              al_na, album_item->cluster->uuid, album_item->index);
+       ad->albuminfo.current_album = album_item;
+       /* Remove idler */
+       gl_albums_del_grid_append_idler(ad);
+
+       gl_db_get_item_list(ad, album_item, GL_FIRST_VIEW_START_POS,
+                           GL_FIRST_VIEW_END_POS);
+
+       gl_set_view_mode(ad, GL_VIEW_THUMBS);
+       /* Save the index of current selected album */
+       ad->albuminfo.cluster_list->cur_pos = album_item->index;
+       gl_dbg("Album index: %d", album_item->index);
+       layout = gl_ui_create_view_ly(navi);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       Evas_Object *gv = gl_grid_create_view(ad, navi, GL_GRID_ALL);
+       elm_object_part_content_set(layout, "elm.swallow.view", gv);
+       ad->gridinfo.all_view = gv;
+       ad->gridinfo.layout = layout;
+
+       /* View mode reset, Update view mode */
+       view_mode = gl_get_view_mode(ad);
+       if (view_mode != GL_VIEW_THUMBS) {
+               gl_dbgE("View mode is wrong!");
+               return -1;
+       }
+
+       gl_navi_mode mode = GL_NAVI_THUMBS;
+       /* check root case */
+       if (gl_db_is_root_path(ad, album_item->cluster->uuid, NULL))
+               al_na = GL_ALBUM_PHOME_ROOT_NAME;
+
+       /* Clear view */
+       elm_gengrid_clear(ad->albuminfo.view);
+
+       gl_ui_create_title_and_push(ad, navi, layout, mode, al_na);
+
+       gl_dbg("albums_view 0x%x cleared", ad->albuminfo.view);
+
+       Evas_Object *bk_btn = NULL;
+       bk_btn = elm_object_item_part_content_get(ad->gridinfo.nf_it,
+                                                 GE_NAVIFRAME_PREB_BTN);
+       elm_object_style_set(bk_btn, GL_BUTTON_STYLE_NAVI_PRE);
+       evas_object_smart_callback_add(bk_btn, "clicked",
+                                      _gl_albums_comeback_from_view_cb, ad);
+
+       edje_object_signal_emit(_EDJ(layout), "elm,swallow_view,state,default",
+                               "elm");
+       gl_dbg("Done albums selected");
+
+       if (ad->maininfo.medias_cnt == (GL_FIRST_VIEW_END_POS + 1)) {
+               gl_dbg("\n\n\tIdler to append other medias--Start\n");
+               Ecore_Idler *ap_idl = NULL;
+               ap_idl = ecore_idler_add(_gl_albums_append_grid_idler, ad);
+               ad->gridinfo.append_idler = ap_idl;
+       }
+
+       return 0;
+}
+
+Evas_Object *gl_albums_create_view(void *data, Evas_Object *parent)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_NULL(ad->albuminfo.cluster_list);
+       gl_dbg("");
+
+       gl_albums_free_cover_thumbs(ad);
+       memset(ad->albuminfo.cover_thumbs, 0x00,
+              GL_ALBUM_COVER_THUMB_NUM * sizeof(int));
+       ad->albuminfo.album_medias_cnt = 0;
+
+       Evas_Object *grid = elm_gengrid_add(parent);
+       elm_object_style_set(grid, GL_GENGRID_STYLE_ALBUM);
+
+       double scale_factor = ad->maininfo.win_scale;
+       gl_dbg("Own scale: %f, elm_config_scale_get =%f", scale_factor,
+              elm_config_scale_get());
+       elm_gengrid_item_size_set(grid,
+                                 (int)(GL_ALBUM_ITEM_WIDTH * scale_factor),
+                                 (int)(GL_ALBUM_ITEM_HEIGHT * scale_factor));
+
+       elm_gengrid_align_set(grid, 0.5, 0.0);
+
+       /* Vertical scrolling. */
+       elm_gengrid_horizontal_set(grid, EINA_FALSE);
+       elm_gengrid_bounce_set(grid, EINA_FALSE, EINA_TRUE);
+       elm_gengrid_multi_select_set(grid, EINA_TRUE);
+
+       evas_object_smart_callback_add(grid, "selected", _gl_albums_selected,
+                                      NULL);
+       evas_object_smart_callback_add(grid, "unselected",
+                                      _gl_albums_unselected, NULL);
+       evas_object_smart_callback_add(grid, "clicked", _gl_albums_clicked,
+                                      NULL);
+       evas_object_smart_callback_add(grid, "longpressed",
+                                      _gl_albums_longpress, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,up",
+                                      _gl_albums_drag_up, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,right",
+                                      _gl_albums_drag_right, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,down",
+                                      _gl_albums_drag_down, NULL);
+       evas_object_smart_callback_add(grid, "drag,start,left",
+                                      _gl_albums_drag_left, NULL);
+       evas_object_smart_callback_add(grid, "drag,stop", _gl_albums_drag_stop,
+                                      NULL);
+       evas_object_smart_callback_add(grid, "realized", _gl_albums_realized,
+                                      NULL);
+
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+
+       gl_get_mass_storage_state(ad);
+       if (ad->maininfo.app_exit_mode == GL_APP_EXIT_NONE) {
+               if (ad->maininfo.view_mode != GL_VIEW_THUMBS)
+                       _gl_albums_create_items(ad, grid);
+       }
+       /* show no contents none album exists */
+       if (ad->maininfo.app_exit_mode ||
+           gl_check_gallery_empty(ad)) {
+               evas_object_del(grid);
+               grid = NULL;
+
+               /* Set the grid view mode for creating nocontents view */
+               ad->gridinfo.grid_view_mode = GL_GRID_ALBUMS;
+               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+               evas_object_show(noc);
+               ad->albuminfo.nocontents = noc;
+
+               return noc;
+       } else {
+               ad->albuminfo.nocontents = NULL;
+               evas_object_show(grid);
+       }
+
+       gl_dbg("gl_albums_create_view:done");
+
+       return grid;
+}
+
+/* From thumbnails view to albums view */
+int gl_albums_comeback_from_view(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gl_ui_destroy_notiinfo(ad);
+
+       gl_grid_clear_view(ad);
+       gl_list_clear_view(ad);
+
+       ad->albuminfo.current_album = NULL;
+       gl_albums_update_items(ad);
+
+       evas_object_show(ad->albuminfo.view);
+
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS);
+       ad->albuminfo.seg_mode = GL_CTRL_SEG_ALL;
+
+       return 0;
+}
+
+/* From albums edit view to albums view */
+int gl_albums_change_to_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+       gl_dbg("");
+
+       GL_CHECK_VAL(ad->albuminfo.view, -1);
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS);
+       /* changed to show no contents if needed */
+       if (gl_check_gallery_empty(ad)) {
+               if (ad->albuminfo.view)
+                       evas_object_del(ad->albuminfo.view);
+
+               /* Set the grid view mode for creating nocontents view */
+               ad->gridinfo.grid_view_mode = GL_GRID_ALBUMS;
+               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+               ad->albuminfo.nocontents = noc;
+               ad->albuminfo.view = noc;
+               evas_object_show(noc);
+
+               Evas_Object *old_view = NULL;
+               old_view = elm_object_part_content_unset(ad->albuminfo.layout,
+                                                   "elm.swallow.view");
+               evas_object_del(old_view);
+               elm_object_part_content_set(ad->albuminfo.layout,
+                                      "elm.swallow.view", noc);
+       } else {
+               _gl_albums_create_items(ad, ad->albuminfo.view);
+       }
+
+       return 0;
+}
+
+/* Update albums view */
+int gl_albums_update_items(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+       /* Changed to show no contents if needed */
+       if (gl_check_gallery_empty(ad)) {
+               /* Set the grid view mode for creating nocontents view */
+               ad->gridinfo.grid_view_mode = GL_GRID_ALBUMS;
+
+               evas_object_del(ad->albuminfo.view);
+
+               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+               ad->albuminfo.nocontents = noc;
+               ad->albuminfo.view = noc;
+               evas_object_show(noc);
+
+               Evas_Object *old_view = NULL;
+               old_view = elm_object_part_content_unset(ad->albuminfo.layout,
+                                                   "elm.swallow.view");
+               evas_object_del(old_view);
+               elm_object_part_content_set(ad->albuminfo.layout, "elm.swallow.view",
+                                      noc);
+       } else {
+               if (view_mode == GL_VIEW_ALBUMS_EDIT) {
+                       _gl_albums_create_items(ad, ad->albuminfo.edit_view);
+               } else {
+                       if (ad->albuminfo.nocontents) {
+                               /**
+                               * current view is nocontents,
+                               * unset it first then create albums view.
+                               */
+                               gl_albums_remove_nocontents(ad);
+                       } else {
+                               Evas_Object *al_view = NULL;
+                               al_view = ad->albuminfo.view;
+                               _gl_albums_create_items(ad, al_view);
+                       }
+               }
+       }
+
+       return 0;
+}
+
+/* Update albums list and refresh albums view, remove invalid widgets */
+int gl_albums_update_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d.", view_mode);
+
+       gl_albums_free_cover_thumbs(ad);
+       memset(ad->albuminfo.cover_thumbs, 0x00,
+              GL_ALBUM_COVER_THUMB_NUM * sizeof(int));
+
+       if (view_mode == GL_VIEW_ALBUMS) {
+               /* Update mass storage state */
+               gl_get_mass_storage_state(ad);
+               /* Update albums list*/
+               gl_refresh_albums_list(ad);
+
+               if (ad->albuminfo.nocontents) {
+                       gl_albums_remove_nocontents(ad);
+               } else if (!gl_check_gallery_empty(ad)) {
+                       _gl_albums_create_items(ad, ad->albuminfo.view);
+                       if (ad->albuminfo.cluster_list->edit_cnt)
+                               gl_ui_disable_toolbar_item(ad, false,
+                                                          GL_NAVI_ALBUMS,
+                                                          false);
+                       else
+                               gl_ui_disable_toolbar_item(ad, true,
+                                                          GL_NAVI_ALBUMS,
+                                                          true);
+               } else {
+                       gl_dbg("View is empty.");
+                       gl_albums_update_items(ad);
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               }
+       } else if (view_mode == GL_VIEW_ALBUMS_EDIT ||
+           view_mode == GL_VIEW_ALBUMS_RENAME) {
+               if (gl_db_update_cluster_list(ad) != GL_DB_SUCCESS) {
+                       gl_dbgE("gl_db_update_cluster_list failed!");
+                       return -1;
+               }
+
+               if (gl_check_gallery_empty(ad) ||
+                   ad->albuminfo.cluster_list->edit_cnt == 0) {
+                       /* Remove invalid widgets */
+                       gl_del_invalid_widgets(ad, GL_INVALID_NONE);
+
+                       gl_dbg("Edit view is empty, back to albums view");
+                       gl_ui_edit_cancel(ad);
+
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               } else {
+                       int sel_cnt = gl_db_get_albums_selected_cnt(ad);
+                       int invalid_m = GL_INVALID_NONE;
+                       /* Album selected for rename was deleted */
+                       if (view_mode == GL_VIEW_ALBUMS_RENAME) {
+                               if (ad->albuminfo.selected_album == NULL) {
+                                       gl_dbgW("Rename invalid album!");
+                                       invalid_m = GL_INVALID_RENAME_ALBUM;
+                                       /* Remove invalid widgets */
+                                       gl_del_invalid_widgets(ad, invalid_m);
+                                       /* Disable control bar buttons */
+                                       gl_ui_disable_toolbar_items(ad,
+                                                                   ad->albuminfo.nf_it_edit);
+                                       if (sel_cnt == 0)
+                                       /* Reset view mode */
+                                       gl_set_view_mode(ad,
+                                                        GL_VIEW_ALBUMS_EDIT);
+                               }
+                       } else if (sel_cnt == 0) {
+                               /* If none albums selected */
+                               gl_dbgW("None albums selected!");
+                               /* Disable control bar buttons */
+                               gl_ui_disable_toolbar_items(ad,
+                                                           ad->albuminfo.nf_it_edit);
+                               /* Remove invalid widgets */
+                               gl_del_invalid_widgets(ad, invalid_m);
+                               /* Reset view mode */
+                               gl_set_view_mode(ad, GL_VIEW_ALBUMS_EDIT);
+                       }
+
+                       /* Update edit view, other update view in cancel callback */
+                       Evas_Object *edit_view = ad->albuminfo.edit_view;
+                       if (gl_get_view_mode(ad) == GL_VIEW_ALBUMS_EDIT) {
+                               _gl_albums_create_items(ad, edit_view);
+                       } else {
+                               /* Cluster list updated, clear view */
+                               elm_gengrid_clear(edit_view);
+                       }
+               }
+       }
+       return 0;
+}
+
+/**
+* Remove nocontents view and show albums view.
+* gallery is empty->home key tapped
+*      ->take photos with camera->back to gallery;
+*/
+int gl_albums_remove_nocontents(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *layout_inner = NULL;
+       gl_dbg("");
+
+       if (ad->albuminfo.nocontents && !gl_check_gallery_empty(ad)) {
+               gl_dbg("Remove nocontents view then create albums view.");
+
+               evas_object_del(ad->albuminfo.nocontents);
+               ad->albuminfo.nocontents = NULL;
+
+               layout_inner = gl_albums_create_view(ad, ad->maininfo.navi_bar);
+
+               Evas_Object *old_view = NULL;
+               old_view = elm_object_part_content_unset(ad->albuminfo.layout,
+                                                   "elm.swallow.view");
+               evas_object_del(old_view);
+               elm_object_part_content_set(ad->albuminfo.layout, "elm.swallow.view",
+                                      layout_inner);
+               evas_object_show(layout_inner);
+               ad->albuminfo.view = layout_inner;
+
+               gl_ui_disable_toolbar_item(ad, false, GL_NAVI_ALBUMS, false);
+       } else {
+               gl_dbg("Nocontents was removed or Gallery is empty!");
+       }
+
+       return 0;
+}
+
+int gl_albums_del_grid_append_idler(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->gridinfo.append_idler) {
+               ecore_idler_del(ad->gridinfo.append_idler);
+               ad->gridinfo.append_idler = NULL;
+       }
+
+       return 0;
+}
+
+int gl_albums_free_cover_thumbs(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+
+       for (i = 0; i < GL_ALBUM_COVER_THUMB_NUM; i++) {
+               if (ad->albuminfo.cover_thumbs[i]) {
+                       gl_db_destroy_item(ad->albuminfo.cover_thumbs[i]);
+                       ad->albuminfo.cover_thumbs[i] = NULL;
+               }
+       }
+
+       return 0;
+}
+
+/* Free resources allocated for albums view */
+int gl_albums_free_data(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gl_albums_del_grid_append_idler(data);
+
+       gl_albums_free_cover_thumbs(data);
+
+       if (ad->albuminfo.move_album_id) {
+               free(ad->albuminfo.move_album_id);
+               ad->albuminfo.move_album_id = NULL;
+       }
+       return 0;
+}
+
diff --git a/src/features/gl-button.c b/src/features/gl-button.c
new file mode 100755 (executable)
index 0000000..ae177da
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+  * 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://www.tizenopensource.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 "gl-debug.h"
+#include "gl-ui-util.h"
+#include "gl-button.h"
+#include "gl-strings.h"
+
+#define GL_BUT_NAME_DELETE GL_STR_DELETE
+#define GL_BUT_NAME_CANCEL GL_STR_CANCEL
+#define GL_BUT_NAME_DONE GL_STR_DONE
+
+/*******************************************************
+** Prototype           : _gl_but_create_but
+** Description         : Create button
+** Input               : Evas_Object *parent
+** Input               : gl_but_mode mode
+** Input               : const char *style
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+Evas_Object *_gl_but_create_but(Evas_Object *parent, gl_but_mode mode, const char *style)
+{
+       gl_dbg("button mode: %d", mode);
+       Evas_Object *btn = NULL;
+
+       btn = elm_button_add(parent);
+       GL_CHECK_NULL(btn);
+       elm_object_focus_allow_set(btn, EINA_FALSE);
+       elm_object_style_set(btn, style);
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0.5);
+
+       if (mode == GL_BUT_DEL)
+               elm_object_text_set(btn, GL_BUT_NAME_DELETE);
+       else if (mode == GL_BUT_CANCEL)
+               elm_object_text_set(btn, GL_BUT_NAME_CANCEL);
+       else if (mode == GL_BUT_DONE)
+               elm_object_text_set(btn, GL_BUT_NAME_DONE);
+       else if (mode == GL_BUT_RENAME)
+               elm_object_text_set(btn, GL_BUT_NAME_RENAME);
+
+       evas_object_show(btn);
+       return btn;
+}
+
+Evas_Object *_gl_but_create_but_popup(Evas_Object *parent, const char *text, But_Smart_Cb cb_func, const void *data)
+{
+       Evas_Object *btn = NULL;
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(text);
+       gl_dbg("Button text: %s", text);
+
+       btn = elm_button_add(parent);
+       GL_CHECK_NULL(btn);
+       elm_object_text_set(btn, text);
+
+       if (cb_func)
+               evas_object_smart_callback_add(btn, "clicked", cb_func, data);
+
+       return btn;
+}
\ No newline at end of file
diff --git a/src/features/gl-controlbar.c b/src/features/gl-controlbar.c
new file mode 100755 (executable)
index 0000000..d9728d1
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+  * 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://www.tizenopensource.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 "gl-debug.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-controlbar.h"
+#include "gl-albums.h"
+#include "gl-gridview.h"
+#include "gl-listview.h"
+#include "gl-db-handler.h"
+#include "gl-strings.h"
+
+#define GL_CTRL_STYLE_TOOLBAR "gallery/default"
+#define GL_CTRL_SEG_STYLE "gallery/default"
+#define GL_SEGMENT_WIDTH_MIN_INC (433*elm_config_scale_get()) //(143+2+143+2+143)
+
+static void
+_gl_ctrl_segment_change_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *seg_it = NULL;
+       gl_dbg("");
+
+       if (ad->uginfo.ug_called_by_me ||
+               ad->gridinfo.append_idler)
+       {
+               gl_dbg("UG invoked or appending gridview.");
+               seg_it = elm_segment_control_item_get(obj, ad->albuminfo.seg_mode);
+               GL_CHECK(seg_it);
+               elm_segment_control_item_selected_set(seg_it, EINA_TRUE);
+               return;
+       }
+
+       int idx = 0;
+       seg_it = elm_segment_control_item_selected_get(obj);
+       GL_CHECK(seg_it);
+       idx = elm_segment_control_item_index_get(seg_it);
+       if (idx == 0)
+       {
+               gl_dbg("Creating all-media view");
+               ad->albuminfo.seg_mode = GL_CTRL_SEG_ALL;
+               gl_ui_reset_toolbar_item(ad, GL_CTRL_SEG_ALL, false);
+
+               if (ad->gridinfo.all_view == NULL)
+               {
+                       Evas_Object *grid = gl_grid_create_view(ad,
+                               ad->maininfo.navi_bar, GL_GRID_ALL);
+                       ad->gridinfo.all_view = grid;
+               } else {
+                       /* just update the data */
+                       ad->gridinfo.grid_view_mode = GL_GRID_ALL;
+                       gl_grid_update_items(ad);
+               }
+
+               elm_object_part_content_unset(ad->gridinfo.layout,
+                       "elm.swallow.view");
+               evas_object_hide(ad->listinfo.video_view);
+               evas_object_hide(ad->gridinfo.image_view);
+
+               evas_object_show(ad->gridinfo.all_view);
+               elm_object_part_content_set(ad->gridinfo.layout,
+                       "elm.swallow.view", ad->gridinfo.all_view);
+               gl_set_view_mode(ad, GL_VIEW_THUMBS);
+       }
+       else if (idx == 1)
+       {
+               gl_dbg("Creating image view");
+               ad->albuminfo.seg_mode = GL_CTRL_SEG_IMAGES;
+               gl_ui_reset_toolbar_item(ad, GL_CTRL_SEG_IMAGES, false);
+
+               if(ad->listinfo.video_nocontents)
+                       gl_list_clear_view(ad);
+
+               if (ad->gridinfo.image_view == NULL)
+               {
+                       Evas_Object *grid = gl_grid_create_view(ad,
+                               ad->maininfo.navi_bar, GL_GRID_IMAGES);
+                       ad->gridinfo.image_view = grid;
+               } else {
+                       /* just update the data */
+                       ad->gridinfo.grid_view_mode = GL_GRID_IMAGES;
+                       gl_grid_update_items(ad);
+               }
+
+               elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+               evas_object_hide(ad->listinfo.video_view);
+               evas_object_hide(ad->gridinfo.all_view);
+
+               evas_object_show(ad->gridinfo.image_view);
+               elm_object_part_content_set(ad->gridinfo.layout,
+                       "elm.swallow.view", ad->gridinfo.image_view);
+               gl_set_view_mode(ad, GL_VIEW_THUMBS);
+       }
+       else if (idx == 2)
+       {
+               ad->albuminfo.seg_mode = GL_CTRL_SEG_VIDEOS;
+               gl_ui_reset_toolbar_item(ad, GL_CTRL_SEG_VIDEOS, false);
+
+               gl_dbg("Creating video list");
+
+               /* Set the grid view mode for creating nocontents view */
+               ad->gridinfo.grid_view_mode = GL_GRID_VIDEOS;
+               gl_set_view_mode(ad, GL_VIEW_VIDEOLIST);
+
+               if(ad->gridinfo.image_nocontents)
+               {
+                       evas_object_del(ad->gridinfo.image_view);
+                       ad->gridinfo.image_nocontents = NULL;
+                       ad->gridinfo.image_view = NULL;
+               }
+
+               if (ad->listinfo.video_view == NULL) {
+                       Evas_Object *list_view = gl_list_create_view(ad, ad->maininfo.navi_bar);
+                       ad->listinfo.video_view = list_view;
+               } else {
+                       /* just update the data */
+                       gl_list_update_view(ad);
+               }
+
+               elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+               evas_object_hide(ad->gridinfo.all_view);
+               evas_object_hide(ad->gridinfo.image_view);
+
+               evas_object_show(ad->listinfo.video_view);
+               elm_object_part_content_set(ad->gridinfo.layout,
+                       "elm.swallow.view", ad->listinfo.video_view);
+       }
+
+}
+
+Evas_Object *_gl_ctrl_get_toolbar(Elm_Object_Item *nf_it)
+{
+       GL_CHECK_NULL(nf_it);
+       gl_dbg("");
+       Evas_Object *obj = NULL;
+
+       obj = elm_object_item_part_content_get(nf_it, GE_NAVIFRAME_CONTROLBAR);
+       if (obj)
+               return obj;
+       else
+               gl_dbgE("Title object is NULL!");
+
+       return NULL;
+}
+
+Evas_Object *_gl_ctrl_create_toolbar(void *data, Evas_Object *parent)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(data);
+       Evas_Object *cbar = NULL;
+       cbar = elm_toolbar_add(parent);
+       GL_CHECK_NULL(cbar);
+       elm_toolbar_shrink_mode_set(cbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_homogeneous_set(cbar, EINA_FALSE);
+       elm_object_style_set(cbar, GL_CTRL_STYLE_TOOLBAR);
+       return cbar;
+}
+
+/* create segment control in thumbnail view */
+Evas_Object *_gl_ctrl_create_segment(void *data, Evas_Object *parent)
+{
+       gl_dbg("");
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *seg_item[GL_CTRL_SEG_CNT];
+       Evas_Object *segment = NULL;
+
+       /**
+       * Stop creating segment bar when launched by appsvc with
+       * specified file-type ( image or video ) only.
+       */
+       if (ad->albuminfo.aul_launch_type == GL_AUL_T_VIEW_ALBUM &&
+           (ad->albuminfo.aul_file_type == GL_AUL_FILE_T_IMAGE ||
+            ad->albuminfo.aul_file_type == GL_AUL_FILE_T_VIDEO)) {
+               gl_dbgW("Segment bar not created when launched by appsvc.");
+               return NULL;
+       }
+
+       Evas_Object *layout = elm_layout_add(parent);
+       GL_CHECK_NULL(layout);
+       evas_object_size_hint_min_set(layout, GL_SEGMENT_WIDTH_MIN_INC, 0);
+       elm_layout_file_set(layout, GL_EDJ_FILE, GL_GRP_SEGMENT);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       segment = elm_segment_control_add(layout);
+       GL_CHECK_NULL(segment);
+       elm_object_style_set(segment, GL_CTRL_SEG_STYLE);
+       seg_item[0] = elm_segment_control_item_add(segment, NULL,
+                                                  GL_CTRL_SEG_ITEM_ALL);
+       seg_item[1] = elm_segment_control_item_add(segment, NULL,
+                                                  GL_CTRL_SEG_ITEM_IMAGES);
+       seg_item[2] = elm_segment_control_item_add(segment, NULL,
+                                                  GL_CTRL_SEG_ITEM_VIDEOS);
+
+       if (ad->albuminfo.seg_mode > GL_CTRL_SEG_VIDEOS) {
+               gl_dbgE("seg_mode > GL_CTRL_SEG_VIDEOS");
+               return NULL;
+       }
+       elm_segment_control_item_selected_set(seg_item[ad->albuminfo.seg_mode],
+                                             EINA_TRUE);
+
+       elm_object_part_content_set(layout, "segment", segment);
+       evas_object_show(layout);
+
+       evas_object_smart_callback_add(segment, "changed",
+                                      _gl_ctrl_segment_change_cb, ad);
+       return layout;
+}
diff --git a/src/features/gl-gridview.c b/src/features/gl-gridview.c
new file mode 100755 (executable)
index 0000000..e9b7ff7
--- /dev/null
@@ -0,0 +1,949 @@
+/*
+  * 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://www.tizenopensource.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 "gl-debug.h"
+#include "gl-gridview.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-albums.h"
+#include "gl-db-handler.h"
+#include "gl-ext-ug-load.h"
+#include "gl-ext-exec.h"
+
+/* Icon swallowed to part "elm.swallow.icon" */
+#define GL_GRID_ICON_SIZE 156
+#define GL_GRID_TOUCH_RANGE 20
+
+#define GL_PHOTOFRAME_STYLE_VIDEO_BOOKMARK "default_layout_video_bookmark"
+#define GL_PHOTOFRAME_STYLE_VIDEO "default_layout_video"
+#define GL_PHOTOFRAME_STYLE_DEFAULT "default_layout"
+#define GL_GENGRID_ITEM_STYLE_THUMBNAIL "gallery/thumbnail_view"
+
+
+static void
+_gl_grid_drag_up(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_drag_right(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_drag_down(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_drag_left(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_drag_stop(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_selected(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_unselected(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_clicked(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_longpress(void *data, Evas_Object * obj, void *event_info)
+{
+}
+
+static void
+_gl_grid_sel_icon(void *data)
+{
+       gl_dbg("");
+       gl_grid_sel_cb(data, NULL, NULL);
+}
+
+static void
+_gl_grid_item_check_changed(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       if (view_mode != GL_VIEW_THUMBS_EDIT)
+               return;
+
+       Eina_Bool checked = elm_check_state_get(obj);
+       gitem->checked = checked;
+       if (checked)
+       {
+               gl_dbg("Append:%s", gitem->item->file_url);
+               gl_db_selected_list_append(ad, gitem);
+       }
+       else
+       {
+               gl_dbg("Remove:%s", gitem->item->file_url);
+               gl_db_selected_list_remove(ad, gitem);
+       }
+
+       /* Display selectioninfo */
+       int cnt = gl_db_selected_list_count(ad);
+       gl_ui_create_selinfo(ad, ad->gridinfo.edit_layout,
+                            ad->gridinfo.nf_it_edit, ad->gridinfo.thumbs_cnt,
+                            cnt, false);
+}
+
+static void
+_gl_grid_shrink_resp_cb(void *data, Evas_Object * obj,
+       const char *emission, const char *source)
+{
+       GL_CHECK(data);
+       gl_dbg("");
+
+       _gl_grid_sel_icon(data);
+       edje_object_signal_callback_del(obj, "shrink,expand,done", "bg",
+                                       _gl_grid_shrink_resp_cb);
+}
+
+Evas_Object *
+_gl_grid_get_content(void *data, Evas_Object * obj, const char *part)
+{
+       GL_CHECK_NULL(part);
+       GL_CHECK_NULL(strlen(part));
+       GL_CHECK_NULL(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK_NULL(gitem->item);
+       GL_CHECK_NULL(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int view_mode = gl_get_view_mode(ad);
+       int item_size = ad->gridinfo.icon_size;
+
+       if (!strcmp(part, "elm.swallow.icon"))
+       {
+               Evas_Object *layout = elm_layout_add(obj);
+               GL_CHECK_NULL(layout);
+               Evas_Object *bg = elm_bg_add(obj);
+               GL_CHECK_NULL(bg);
+               elm_bg_load_size_set(bg, item_size, item_size);
+
+               int all_cnt = ad->maininfo.medias_cnt;
+
+               /* Only one photo in a  album */
+               char *path = NULL;
+               if (all_cnt < 2 && gitem->item->type == MINFO_ITEM_IMAGE) {
+                       path = _GETICON(gitem->item->file_url);
+                       if (gl_is_image_valid(ad, path) == false)
+                               path = _GETICON(gitem->item->thumb_url);
+                       elm_bg_file_set(bg, path, NULL);
+               } else {
+                       path = _gl_get_thumb(ad, gitem->item->file_url,
+                                            &gitem->item->thumb_url);
+                       if (path) {
+                               elm_bg_file_set(bg, path, NULL);
+                               free(path);
+                               path = NULL;
+                       } else {
+                               elm_bg_file_set(bg, gitem->item->thumb_url,
+                                               NULL);
+                       }
+               }
+
+               evas_object_size_hint_max_set(bg, item_size, item_size);
+               evas_object_size_hint_aspect_set(bg, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               if (gitem->item->type == MINFO_ITEM_VIDEO)
+               {
+                       int bk_len = 0;
+                       // Set bookmark icon.
+                       if (gitem->item->meta_info == NULL ||
+                           gitem->item->meta_info->video_info == NULL)
+                       {
+                               bk_len = 0;
+                       }
+                       else
+                       {
+                               bk_len = g_list_length(gitem->item->meta_info->video_info->bookmarks);
+                       }
+                       if (bk_len)
+                       {
+                               elm_layout_theme_set(layout, GL_CLASS_GENGRID,
+                                       GL_GRP_PHOTOFRAME, GL_PHOTOFRAME_STYLE_VIDEO_BOOKMARK);
+                       }
+                       else
+                       {
+                               elm_layout_theme_set(layout, GL_CLASS_GENGRID,
+                                       GL_GRP_PHOTOFRAME, GL_PHOTOFRAME_STYLE_VIDEO);
+                       }
+                       elm_object_part_content_set(layout, "elm.swallow.icon", bg);
+
+                       if (bk_len)
+                       {
+                               Evas_Object *icon = elm_icon_add(obj);
+                               elm_icon_file_set(icon, GL_THUMB_BOOKMARK, NULL);
+                               evas_object_show(icon);
+                               elm_object_part_content_set(layout, "elm.swallow.bookmarkicon", icon);
+                       }
+
+                       // Set duration text
+                       /* Running time of the video */
+                       if (gitem->item->meta_info &&
+                           gitem->item->meta_info->video_info)
+                       {
+                               char ret_str[GL_FILE_PATH_LEN_MAX] = { 0, };
+                               unsigned int v_dur = gitem->item->meta_info->video_info->duration;
+                               int duration = floor(v_dur / GL_TIME_MSEC_PER_SEC);
+                               int dur_hr = 0;
+                               int dur_min = 0;
+                               int dur_sec = 0;
+                               int tmp = 0;
+
+                               if (duration >= GL_TIME_SEC_PER_HOUR)
+                               {
+                                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+                                       tmp = floor(duration / GL_TIME_SEC_PER_MIN);
+                                       dur_min = tmp % GL_TIME_MIN_PER_HOUR;
+                                       dur_hr = floor(tmp / GL_TIME_MIN_PER_HOUR);
+                               }
+                               else if (duration >= GL_TIME_SEC_PER_MIN)
+                               {
+                                       dur_hr = 0;
+                                       dur_min = floor(duration / GL_TIME_SEC_PER_MIN);
+                                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+                               }
+                               else
+                               {
+                                       dur_hr = 0;
+                                       dur_min = 0;
+                                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+                               }
+
+                               snprintf(ret_str, sizeof(ret_str),
+                                       "%02d:%02d:%02d", dur_hr, dur_min, dur_sec);
+                               ret_str[strlen(ret_str)] = '\0';
+                               elm_object_part_text_set(layout, "elm.text", ret_str);
+                       }
+               }
+               else
+               {
+                       elm_layout_theme_set(layout, GL_CLASS_GENGRID,
+                               GL_GRP_PHOTOFRAME, GL_PHOTOFRAME_STYLE_DEFAULT);
+                       elm_object_part_content_set(layout, "elm.swallow.icon", bg);
+               }
+
+               evas_object_show(layout);
+               evas_object_event_callback_add(layout,
+                       EVAS_CALLBACK_MOUSE_DOWN, gl_grid_item_mouse_down, gitem);
+               evas_object_event_callback_add(layout,
+                       EVAS_CALLBACK_MOUSE_UP, gl_grid_item_mouse_up, gitem);
+
+               return layout;
+       }
+       else if (!strcmp(part, "elm.swallow.end") &&
+                (view_mode == GL_VIEW_THUMBS_EDIT))
+       {
+               Evas_Object *ck = NULL;
+
+               ck = elm_check_add(obj);
+               GL_CHECK_NULL(ck);
+               elm_object_style_set(ck, GL_CHECKBOX_STYLE_GRID);
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+
+               gitem->check_obj = ck;
+               elm_check_state_set(ck, gitem->checked);
+
+               evas_object_smart_callback_add(ck, "changed",
+                       _gl_grid_item_check_changed, data);
+               evas_object_show(ck);
+
+               return ck;
+       }
+
+       return NULL;
+}
+
+static bool
+_gl_grid_create_items(void *data, Evas_Object * parent)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       int item_cnt = 0;
+       gl_item *gitem = NULL;
+       int ret = -1;
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+       gl_dbg("List count : %d gv_mode : %d", cnt, ad->gridinfo.grid_view_mode);
+
+       ad->gridinfo.thumbgic.item_style = GL_GENGRID_ITEM_STYLE_THUMBNAIL;
+       ad->gridinfo.thumbgic.func.text_get = NULL;
+       ad->gridinfo.thumbgic.func.content_get = _gl_grid_get_content;
+
+       elm_gengrid_clear(parent);
+       for (i = 1; i <= cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem == NULL || gitem->item == NULL ||
+                   gitem->item->uuid == NULL) {
+                       gl_dbgE("Invalid gitem. continue...");
+                       continue;
+               }
+
+               if (!gitem->item->file_url)
+               {
+                       gl_dbg("file_url is invalid.");
+                       ret = minfo_delete_media_id(ad->maininfo.db_handle,
+                                                       gitem->item->uuid);
+                       if (ret < 0)
+                       {
+                               continue;
+                       }
+                       gl_db_selected_list_remove(ad, gitem);
+                       gl_db_item_list_remove(ad, gitem);
+                       cnt--;
+                       i--;
+                       gitem = NULL;
+                       continue;
+               }
+
+               if (ad->gridinfo.back_to_normal)
+                       gitem->checked = false;
+
+               if (ad->gridinfo.grid_view_mode == GL_GRID_IMAGES &&
+                   gitem->item->type != MINFO_ITEM_IMAGE)
+                   continue;
+
+               gitem->elm_item = elm_gengrid_item_append(parent,
+                                                       &(ad->gridinfo.thumbgic),
+                                                       gitem,
+                                                       gl_grid_sel_cb,
+                                                       gitem);
+               item_cnt++;
+               gitem->sequence = item_cnt;
+
+       }
+
+       elm_gengrid_select_mode_set(parent, ELM_OBJECT_SELECT_MODE_NONE);
+
+       ad->gridinfo.thumbs_cnt = item_cnt;
+       ad->gridinfo.back_to_normal = false;
+
+       if (item_cnt == 0)
+       {
+               return EINA_FALSE;
+       }
+       else
+       {
+               return EINA_TRUE;
+       }
+}
+
+void
+gl_grid_item_mouse_down(void *data, Evas * e,
+       Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(event_info);
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *) event_info;
+
+       ad->gridinfo.touch_info.x = ev->output.x;
+       ad->gridinfo.touch_info.y = ev->output.y;
+
+       if (ad->uginfo.ug_called_by_me == NULL)
+       {
+               edje_object_signal_emit(_EDJ(obj), "mouse,down,shrink", "bg");
+               ad->gridinfo.touch_info.b_pressed = true;
+       }
+}
+
+void
+gl_grid_item_mouse_up(void *data, Evas * e,
+       Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+
+       if (!event_info || !obj)
+       {
+               goto RET_WO_EXEC;
+       }
+
+       Evas_Event_Mouse_Up *ev = event_info;
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD ||
+           ev->event_flags & EVAS_EVENT_FLAG_ON_SCROLL)
+       {
+               goto RET_WO_EXEC;
+       }
+       if ((abs(ad->gridinfo.touch_info.x - ev->output.x) > GL_GRID_TOUCH_RANGE) ||
+           (abs(ad->gridinfo.touch_info.y - ev->output.y) > GL_GRID_TOUCH_RANGE))
+       {
+               goto RET_WO_EXEC;
+       }
+
+       gl_dbg("");
+
+       if (ad->gridinfo.touch_info.b_pressed)
+       {
+               edje_object_signal_emit(_EDJ(obj), "mouse,up,expand", "bg");
+               edje_object_signal_callback_add(_EDJ(obj),
+                       "shrink,expand,done", "bg", _gl_grid_shrink_resp_cb, data);
+               ad->gridinfo.touch_info.b_pressed = false;
+       }
+       return;
+
+      RET_WO_EXEC:
+       if (ad->gridinfo.touch_info.b_pressed)
+       {
+               edje_object_signal_emit(_EDJ(obj), "mouse,up,expand", "bg");
+               ad->gridinfo.touch_info.b_pressed = false;
+       }
+}
+
+static int
+_gl_grid_set_view_property(Evas_Object * gv)
+{
+       elm_gengrid_align_set(gv, 0.5, 0.0);
+       // vertical scrolling
+       elm_gengrid_horizontal_set(gv, EINA_FALSE);
+       elm_gengrid_bounce_set(gv, EINA_FALSE, EINA_TRUE);
+       elm_gengrid_multi_select_set(gv, EINA_TRUE);
+
+       evas_object_smart_callback_add(gv, "selected", _gl_grid_selected, NULL);
+       evas_object_smart_callback_add(gv, "unselected", _gl_grid_unselected, NULL);
+       evas_object_smart_callback_add(gv, "clicked", _gl_grid_clicked, NULL);
+       evas_object_smart_callback_add(gv, "longpressed", _gl_grid_longpress, NULL);
+       evas_object_smart_callback_add(gv, "drag,start,up", _gl_grid_drag_up, NULL);
+       evas_object_smart_callback_add(gv, "drag,start,right", _gl_grid_drag_right, NULL);
+       evas_object_smart_callback_add(gv, "drag,start,down", _gl_grid_drag_down, NULL);
+       evas_object_smart_callback_add(gv, "drag,start,left", _gl_grid_drag_left, NULL);
+       evas_object_smart_callback_add(gv, "drag,stop", _gl_grid_drag_stop, NULL);
+       evas_object_size_hint_weight_set(gv, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return 0;
+}
+
+/*
+* Set new view to all/image_grid_view.
+*
+* b_noc, true: it's nocontents view, false: normal view.
+*/
+static int _gl_grid_set_view(void *data, Evas_Object *view, bool b_noc)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_grid_mode view_mode = ad->gridinfo.grid_view_mode;
+
+       switch (view_mode) {
+       case GL_GRID_ALL:
+               ad->gridinfo.all_view = view;
+               if (b_noc)
+                       gl_grid_set_nocontents(ad, view);
+               else
+                       gl_grid_set_nocontents(ad, NULL);
+               break;
+       case GL_GRID_IMAGES:
+               ad->gridinfo.image_view = view;
+               if (b_noc)
+                       gl_grid_set_nocontents(ad, view);
+               else
+                       gl_grid_set_nocontents(ad, NULL);
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+void
+gl_grid_sel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem->item);
+       GL_CHECK(gitem->item->file_url);
+       GL_CHECK(strlen(gitem->item->file_url));
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       if (view_mode != GL_VIEW_THUMBS)
+               return;
+       else
+               gl_dbg("ViewMode");
+
+       if (gitem->item->type == MINFO_ITEM_IMAGE ||
+           gitem->item->type == MINFO_ITEM_VIDEO)
+       {
+               gl_dbg("Loading UG-IMAGE(VIDEO)-VIEWER");
+               gl_ext_load_iv_ug(ad, gitem);
+       }
+}
+
+/*
+* When select album, show first (GL_FIRST_VIEW_END_POS+1) medias.
+* Then use idler to get other medias from DB and appened
+* them to gridview.
+* In order to reduce transit time of first show of thumbnails view.
+* Cause most of time is spent for getting records from DB,
+* so we get first (GL_FIRST_VIEW_END_POS+1) items and show thumbnails view,
+* it will accelerate view show.
+*/
+int
+gl_grid_idler_append_items(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->albuminfo.current_album, -1);
+       GL_CHECK_VAL(ad->gridinfo.all_view, -1);
+       int i = 0;
+       int item_cnt = 0;
+       gl_item *gitem = NULL;
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+       int ret = -1;
+
+       gl_dbg("First view medias count: %d; girdview mode: %d",
+               cnt, ad->gridinfo.grid_view_mode);
+       if (ad->maininfo.medias_cnt != (GL_FIRST_VIEW_END_POS + 1))
+       {
+               gl_dbg("No any more items, return!");
+               return -1;
+       }
+       /* Get other items from DB */
+       ret = gl_db_get_item_list(ad, ad->albuminfo.current_album,
+                                 (GL_FIRST_VIEW_END_POS + 1),
+                                 GL_GET_UNTIL_LAST_RECORD);
+       gl_dbg("\n\n############gl_db_get_item_list Error code: %d#################\n", ret);
+       if (ret < 0)
+       {
+               gl_dbg("gl_db_get_item_list ERROR, return!");
+               return ret;
+       }
+
+       cnt = ad->maininfo.medias_cnt;
+       gl_dbg("Grid view all medias count: %d", cnt);
+
+       if (ad->gridinfo.grid_view_mode != GL_GRID_ALL)
+       {
+               /* Event gridview mode is wrong, we still need to get other records */
+               gl_dbg("Gridview mode is wrong, return!");
+               return -1;
+       }
+
+       /* From (GL_FIRST_VIEW_END_POS + 2)th item to last one */
+       i = GL_FIRST_VIEW_END_POS + 2;
+
+       for (; i <= cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem == NULL || gitem->item == NULL ||
+                   gitem->item->uuid == NULL ) {
+                       gl_dbgE("Invalid gitem, continue...");
+                       continue;
+               }
+
+               if (!gitem->item->file_url)
+               {
+                       gl_dbg("file_url is invalid.");
+                       minfo_delete_media_id(ad->maininfo.db_handle, gitem->item->uuid);
+                       gl_db_selected_list_remove(ad, gitem);
+                       gl_db_item_list_remove(ad, gitem);
+                       cnt--;
+                       i--;
+                       gitem = NULL;
+                       continue;
+               }
+
+               if (ad->gridinfo.grid_view_mode == GL_GRID_IMAGES &&
+                   gitem->item->type != MINFO_ITEM_IMAGE)
+                   continue;
+
+               gitem->elm_item = elm_gengrid_item_append(ad->gridinfo.all_view,
+                                                               &(ad->gridinfo.thumbgic),
+                                                               gitem,
+                                                               gl_grid_sel_cb,
+                                                               gitem);
+               item_cnt++;
+               gitem->sequence = item_cnt + GL_FIRST_VIEW_END_POS + 1;
+       }
+
+       gl_dbg("\n\n<<<<<<<<Use idler to append other medias--Done<<<<<<<<<\n");
+       if (item_cnt == 0)
+       {
+               return -1;
+       }
+       else
+       {
+               ad->gridinfo.thumbs_cnt = item_cnt + GL_FIRST_VIEW_END_POS + 1;
+               gl_dbg("All count appended: %d", ad->gridinfo.thumbs_cnt);
+               return 0;
+       }
+}
+
+Evas_Object *gl_grid_create_view(void *data, Evas_Object * parent, gl_grid_mode mode)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *grid = NULL;
+       int icon_size = 0;
+       int item_w = 0;
+       int item_h = 0;
+       ad->gridinfo.grid_view_mode = mode;
+       grid = elm_gengrid_add(ad->maininfo.navi_bar);
+       double scale_factor = ad->maininfo.win_scale;
+       gl_dbg("Own scale: %f, elm_config_scale_get =%f", scale_factor, elm_config_scale_get());
+       icon_size = (int)(GL_GRID_ICON_SIZE * scale_factor);
+       item_w = (int)(GL_GRID_ITEM_SIZE_W * scale_factor);
+       item_h = (int)(GL_GRID_ITEM_SIZE_H * scale_factor);
+
+       if (!_gl_grid_create_items(ad, grid)) {
+               evas_object_del(grid);
+               grid = NULL;
+               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+               gl_grid_set_nocontents(ad, noc);
+               evas_object_show(noc);
+               return noc;
+       } else {
+               gl_dbg("gl_grid_item_cnt : %d", ad->gridinfo.thumbs_cnt);
+               if (ad->gridinfo.thumbs_cnt == GL_GRID_ITEM_ZOOM_LEVEL_01_CNT) {
+                       icon_size *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+                       item_w *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+                       item_h *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+               } else if (ad->gridinfo.thumbs_cnt <= GL_GRID_ITEM_ZOOM_LEVEL_02_CNT) {
+                       icon_size *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+                       item_w *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+                       item_h *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+               }
+
+               ad->gridinfo.icon_size = icon_size;
+               gl_grid_set_nocontents(ad, NULL);
+               evas_object_show(grid);
+       }
+
+       elm_gengrid_item_size_set(grid, item_w, item_h);
+       gl_dbg("Gengrid item width: %d, height: %d, icon size: %d.", item_w,
+              item_h, icon_size);
+
+       _gl_grid_set_view_property(grid);
+
+       return grid;
+}
+
+int
+gl_grid_change_to_edit(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->gridinfo.edit_view, -1);
+       gl_dbg("");
+       int view_mode = gl_get_view_mode(ad);
+       bool b_ret = false;
+
+       if (view_mode != GL_VIEW_THUMBS_EDIT)
+       {
+               gl_dbg("Error: not in edit mode");
+               return -1;
+       }
+
+       b_ret = _gl_grid_create_items(ad, ad->gridinfo.edit_view);
+       gl_grid_set_item_size(ad, NULL);
+
+       if (!b_ret) {
+               gl_dbgE("Create items failed!");
+               return -1;
+       } else {
+               return 0;
+       }
+}
+
+int
+gl_grid_change_to_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       int gridview_mode = ad->gridinfo.grid_view_mode;
+       bool b_ret = false;
+
+       if (ad->gridinfo.all_view == NULL
+           && ad->gridinfo.image_view == NULL)
+       {
+               gl_dbg("Error : Any gridview doesn't exist");
+               return -1;
+       }
+
+       ad->gridinfo.back_to_normal = true;     // back from edit mode, save state.
+
+       if (gridview_mode == GL_GRID_ALL)
+               b_ret = _gl_grid_create_items(ad, ad->gridinfo.all_view);
+       else if (gridview_mode == GL_GRID_IMAGES)
+               b_ret = _gl_grid_create_items(ad, ad->gridinfo.image_view);
+       gl_grid_set_item_size(ad, NULL);
+
+       if (!b_ret) {
+               gl_dbgE("Create items failed!");
+               return -1;
+       } else {
+               return 0;
+       }
+}
+
+/**
+* Get all/image_grid_view.
+*
+* True returned if it's normal view, if it's nocontents view return false.
+*/
+bool gl_grid_get_view(void *data, Evas_Object **view)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_grid_mode view_mode = ad->gridinfo.grid_view_mode;
+       Evas_Object *gv = NULL;
+       bool b_view = false;
+
+       switch (view_mode) {
+       case GL_GRID_ALL:
+               gv = ad->gridinfo.all_view;
+               if (gv && ad->gridinfo.all_nocontents == NULL)
+                       b_view = true;
+               break;
+       case GL_GRID_IMAGES:
+               gv = ad->gridinfo.image_view;
+               if (gv && ad->gridinfo.image_nocontents == NULL)
+                       b_view = true;
+               break;
+       default:
+               break;
+       }
+
+       /* Nocontents */
+       if (!b_view)
+               gl_dbg("Previous view is Nocontents...");
+
+       /* Return view */
+       if (view)
+               *view = gv;
+
+       return b_view;
+}
+
+/* Assign new value to all/image_grid_nocontents */
+int gl_grid_set_nocontents(void *data, Evas_Object *noc)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_grid_mode view_mode = ad->gridinfo.grid_view_mode;
+
+       switch (view_mode) {
+       case GL_GRID_ALL:
+               ad->gridinfo.all_nocontents = noc;
+               break;
+       case GL_GRID_IMAGES:
+               ad->gridinfo.image_nocontents = noc;
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+int gl_grid_update_items_cnt(void *data, int new_cnt)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gl_dbg("gridview display item count=%d", new_cnt);
+       ad->gridinfo.updated_thumbs_cnt = new_cnt;
+
+       return 0;
+}
+
+int gl_grid_set_item_size(void *data, Evas_Object * gridview)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int icon_size = (int)(GL_GRID_ICON_SIZE * ad->maininfo.win_scale);
+       int item_w = (int)(GL_GRID_ITEM_SIZE_W * ad->maininfo.win_scale);
+       int item_h = (int)(GL_GRID_ITEM_SIZE_H * ad->maininfo.win_scale);
+       int cnt = 0;
+       Evas_Object *gv = NULL;
+       int view_mode = gl_get_view_mode(ad);
+
+       if (gridview) {
+               gv = gridview;
+       } else {
+               bool b_view = false;
+               if (view_mode == GL_VIEW_THUMBS_EDIT) {
+                       b_view = true;
+                       gv = ad->gridinfo.edit_view;
+               } else {
+                       b_view = gl_grid_get_view(ad, &gv);
+               }
+
+               if (!b_view || !gv) {
+                       gl_dbgE("gridview is invalid!");
+                       return -1;
+               }
+       }
+
+       if (ad->gridinfo.updated_thumbs_cnt <= 0) {
+               cnt = ad->gridinfo.thumbs_cnt;
+       } else {
+               cnt = ad->gridinfo.updated_thumbs_cnt;
+               ad->gridinfo.updated_thumbs_cnt = 0;
+       }
+
+       if (cnt == GL_GRID_ITEM_ZOOM_LEVEL_01_CNT) {
+               icon_size *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+               item_w *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+               item_h *= GL_GRID_ITEM_ZOOM_LEVEL_01;
+       } else if (cnt <= GL_GRID_ITEM_ZOOM_LEVEL_02_CNT) {
+               icon_size *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+               item_w *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+               item_h *= GL_GRID_ITEM_ZOOM_LEVEL_02;
+       }
+
+       ad->gridinfo.icon_size = icon_size;
+       elm_gengrid_item_size_set(gv, item_w, item_h);
+       gl_dbg("Gengrid item width: %d, height: %d, icon size: %d.", item_w,
+              item_h, icon_size);
+       return 0;
+}
+
+Eina_Bool
+gl_grid_update_items(void *data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Eina_Bool res = EINA_FALSE;
+       Evas_Object *gv = NULL;
+       int view_mode = gl_get_view_mode(ad);
+       bool b_view = false;
+       gl_dbg("");
+
+       if (view_mode == GL_VIEW_THUMBS_EDIT)
+       {
+               gl_dbg("\n\nEdit_Mode\n");
+               gv = ad->gridinfo.edit_view;
+       }
+       else
+       {
+               b_view = gl_grid_get_view(ad, &gv);
+               GL_CHECK_FALSE(gv);
+       }
+       if (b_view) {
+               res = _gl_grid_create_items(ad, gv);
+               if (!res)
+               {
+                       gl_dbg("_gl_grid_create_items() return false...");
+                       evas_object_hide(gv);
+                       evas_object_del(gv);
+                       _gl_grid_set_view(ad, NULL, false);
+                       Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+                       evas_object_show(noc);
+                       _gl_grid_set_view(ad, noc, true);
+
+                       elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+                       elm_object_part_content_set(ad->gridinfo.layout, "elm.swallow.view",
+                                              noc);
+               }
+               else
+               {
+                       gl_grid_set_item_size(ad, gv);
+               }
+       }
+       else
+       {
+               gl_dbg("Remove nocontents view.");
+               evas_object_hide(gv);
+               evas_object_del(gv);
+               _gl_grid_set_view(ad, NULL, false);
+               bool b_noc = false;
+               int view_m = ad->gridinfo.grid_view_mode;
+
+               Evas_Object *view = NULL;
+               view = gl_grid_create_view(ad, ad->maininfo.navi_bar, view_m);
+               if ((view_m == GL_GRID_IMAGES &&
+                    ad->gridinfo.image_nocontents) ||
+                   (view_m == GL_GRID_ALL &&
+                    ad->gridinfo.all_nocontents))
+                       b_noc = true;
+
+               /* No nocotents removed, gridview created, enable edit button */
+               if (!b_noc)
+                       gl_ui_disable_toolbar_item(ad, false,
+                                                  GL_NAVI_THUMBS,
+                                                  false);
+               else
+                       b_noc = true;
+               _gl_grid_set_view(ad, view, b_noc);
+
+               elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+               elm_object_part_content_set(ad->gridinfo.layout, "elm.swallow.view", view);
+       }
+
+       return res;
+}
+
+int
+gl_grid_clear_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->gridinfo.all_view != NULL)
+       {
+               evas_object_del(ad->gridinfo.all_view);
+               ad->gridinfo.all_view = NULL;
+       }
+
+       if (ad->gridinfo.image_view != NULL)
+       {
+               evas_object_del(ad->gridinfo.image_view);
+               ad->gridinfo.image_view = NULL;
+       }
+
+       ad->gridinfo.all_nocontents = NULL;
+       ad->gridinfo.image_nocontents = NULL;
+
+       ad->gridinfo.edit_it = NULL;
+
+       return 0;
+}
diff --git a/src/features/gl-listview.c b/src/features/gl-listview.c
new file mode 100755 (executable)
index 0000000..732eedb
--- /dev/null
@@ -0,0 +1,635 @@
+/*
+  * 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://www.tizenopensource.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 "gl-debug.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-albums.h"
+#include "gl-listview.h"
+#include "gl-ext-ug-load.h"
+#include "gl-ext-exec.h"
+#include "gl-db-handler.h"
+#include "gl-progressbar.h"
+
+/* Icon size of video in list view */
+#define GL_VIDEO_ICON_WIDTH 168
+#define GL_VIDEO_ICON_HEIGHT 124
+
+#define GL_GENLIST_ITEM_STYLE_VIDEO "video_list"
+#define GL_GENLIST_ITEM_STYLE_VIDEO_EDIT "video_list_edit"
+
+static void
+_gl_list_item_check_changed(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem);
+       GL_CHECK(gitem->item);
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       if (view_mode != GL_VIEW_VIDEOLIST_EDIT)
+       {
+               gl_dbg("ViewMode.%d. now return.", view_mode);
+               return;
+       }
+       else
+       {
+               gl_dbg("Edit Mode");
+       }
+
+       int cnt = 0;
+       Eina_Bool checked = elm_check_state_get(obj);
+       gitem->checked = checked;
+       if (checked)
+       {
+               gl_dbg("Append:%s", gitem->item->file_url);
+               gl_db_selected_list_append(ad, gitem);
+       }
+       else
+       {
+               gl_dbg("Remove:%s", gitem->item->file_url);
+               gl_db_selected_list_remove(ad, gitem);
+       }
+
+       cnt = gl_db_selected_list_count(ad);
+
+       /* Display selectioninfo */
+       gl_ui_create_selinfo(ad, ad->gridinfo.edit_layout,
+                            ad->gridinfo.nf_it_edit, ad->listinfo.videos_cnt,
+                            cnt, false);
+}
+
+static Evas_Object *__gl_list_show_pbar(Evas_Object *parent, gl_item *gitem)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(gitem);
+       GL_CHECK_NULL(gitem->item);
+       GL_CHECK_NULL(gitem->item->meta_info);
+       GL_CHECK_NULL(gitem->item->meta_info->video_info);
+
+       if (gitem->item->meta_info->video_info->last_played_pos == 0)
+               return NULL;
+
+       unsigned int last_pos = gitem->item->meta_info->video_info->last_played_pos;
+       unsigned int v_dur = gitem->item->meta_info->video_info->duration;
+       double ratio = ((double)last_pos) / ((double)v_dur);
+       gl_dbg("Last play position ratio: %f.", ratio);
+
+       return gl_pb_add_list_pbar(parent, ratio);
+}
+
+static char *
+_gl_list_text_get(void *data, Evas_Object * obj, const char *part)
+{
+       GL_CHECK_NULL(part);
+       GL_CHECK_NULL(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK_NULL(gitem->item);
+       GL_CHECK_NULL(gitem->ad);
+       char ret_str[GL_FILE_PATH_LEN_MAX] = { 0, };
+
+       if (!strcmp(part, "elm.text.title"))
+       {
+               if (gitem->item->display_name)
+               {
+                       return strdup(gitem->item->display_name);
+               }
+               else
+               {
+                       gl_dbg("gitem->item->display_name, addr=%p", gitem->item->display_name);
+                       return NULL;
+               }
+       }
+       else if (!strcmp(part, "elm.text.duration"))
+       {
+               /* Running time of the video */
+               if (gitem->item->meta_info == NULL ||
+                   gitem->item->meta_info->video_info == NULL)
+               {
+                       gl_dbg("meta info is NULL");
+                       return NULL;
+               }
+
+               unsigned int v_dur = gitem->item->meta_info->video_info->duration;
+               int duration = floor(v_dur / GL_TIME_MSEC_PER_SEC);
+               int dur_hr = 0;
+               int dur_min = 0;
+               int dur_sec = 0;
+               int tmp = 0;
+
+               if (duration >= GL_TIME_SEC_PER_HOUR)
+               {
+                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+                       tmp = floor(duration / GL_TIME_SEC_PER_MIN);
+                       dur_min = tmp % GL_TIME_MIN_PER_HOUR;
+                       dur_hr = floor(tmp / GL_TIME_MIN_PER_HOUR);
+               }
+               else if (duration >= GL_TIME_SEC_PER_MIN)
+               {
+                       dur_hr = 0;
+                       dur_min = floor(duration / GL_TIME_SEC_PER_MIN);
+                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+               }
+               else
+               {
+                       dur_hr = 0;
+                       dur_min = 0;
+                       dur_sec = duration % GL_TIME_SEC_PER_MIN;
+               }
+
+               snprintf(ret_str, GL_FILE_PATH_LEN_MAX,
+                       "%02d:%02d:%02d", dur_hr, dur_min, dur_sec);
+               ret_str[strlen(ret_str)] = '\0';
+
+               return strdup(ret_str);
+       }
+
+       return NULL;
+}
+
+static Evas_Object *
+_gl_list_content_get(void *data, Evas_Object * obj, const char *part)
+{
+       GL_CHECK_NULL(obj);
+       GL_CHECK_NULL(part);
+       GL_CHECK_NULL(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK_NULL(gitem->item);
+       GL_CHECK_NULL(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       Evas_Object *image = NULL;
+
+       if (!strcmp(part, "elm.swallow.checkbox"))
+       {
+               Evas_Object *ck = NULL;
+
+               if (gl_get_view_mode(ad) == GL_VIEW_VIDEOLIST_EDIT)
+               {
+                       ck = elm_check_add(obj);
+                       GL_CHECK_NULL(ck);
+                       elm_object_style_set(ck, GL_CHECKBOX_STYLE_DEFAULT);
+                       evas_object_propagate_events_set(ck, EINA_FALSE);
+
+                       gitem->check_obj = ck;
+                       elm_check_state_set(ck, gitem->checked);
+                       evas_object_smart_callback_add(ck, "changed",
+                               _gl_list_item_check_changed, data);
+                       evas_object_show(ck);
+               }
+
+               return ck;
+       }
+       else if (!strcmp(part, "elm.icon"))
+       {
+               Evas *evas = evas_object_evas_get(obj);
+               GL_CHECK_NULL(evas);
+               image = evas_object_image_add(evas);
+               GL_CHECK_NULL(image);
+               evas_object_image_load_size_set(image,
+                               GL_VIDEO_ICON_WIDTH, GL_VIDEO_ICON_HEIGHT);
+               evas_object_image_fill_set(image, 0, 0,
+                               GL_VIDEO_ICON_WIDTH, GL_VIDEO_ICON_HEIGHT);
+               char *path = NULL;
+               path = _gl_get_thumb(ad, gitem->item->file_url,
+                                    &gitem->item->thumb_url);
+               if (path) {
+                       evas_object_image_file_set(image, path, NULL);
+                       free(path);
+                       path = NULL;
+               } else {
+                       evas_object_image_file_set(image, gitem->item->thumb_url,
+                                                  NULL);
+               }
+
+               return image;
+       }
+       else if (!strcmp(part, "elm.bookmarkicon"))     // add bookmark icon
+       {
+               if (gitem->item->type == MINFO_ITEM_VIDEO)
+               {
+                       int bk_len = 0;
+                       if (gitem->item->meta_info == NULL ||
+                           gitem->item->meta_info->video_info == NULL)
+                       {
+                               bk_len = 0;
+                       }
+                       else
+                       {
+                               bk_len = g_list_length(gitem->item->meta_info->video_info->bookmarks);
+                       }
+                       gl_dbg("%s is video, containing %d bookmark(s)", gitem->item->file_url, bk_len);
+                       if (bk_len)
+                       {
+                               Evas_Object *icon = elm_icon_add(obj);
+                               GL_CHECK_NULL(icon);
+                               elm_icon_file_set(icon, GL_LIST_BOOKMARK, NULL);
+                               evas_object_show(icon);
+                               return icon;
+                       }
+                       return NULL;
+               }
+               else
+               {
+                       return NULL;
+               }
+       } else if (!g_strcmp0(part, "elm.progressbar.icon")) {
+               return __gl_list_show_pbar(obj, gitem);
+       }
+
+       return NULL;
+}
+
+static void
+_gl_list_del(void *data, Evas_Object * obj)
+{
+       gl_dbg("");
+}
+
+static void
+_gl_list_genlist_sel(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+}
+
+static void
+_gl_list_sel(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_item *gitem = (gl_item *) data;
+       GL_CHECK(gitem->item);
+       GL_CHECK(gitem->ad);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       Elm_Object_Item *gen_item = elm_genlist_selected_item_get(obj);
+       if (gen_item)
+       {
+               elm_genlist_item_selected_set(gen_item, EINA_FALSE);
+       }
+
+       if (data == NULL)
+       {
+               gl_dbgE("Callabck data is NULL!");
+               return;
+       }
+
+       int cnt = 0;
+
+       if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+       {
+               if (gitem->check_obj == NULL)
+               {
+                       gl_dbg("item or check_obj is NULL");
+                       return;
+               }
+
+               gitem->checked = !gitem->checked;
+               elm_check_state_set(gitem->check_obj, gitem->checked);
+
+               if (gitem->checked)
+               {
+                       gl_dbg("Append:%s", gitem->item->file_url);
+                       gl_db_selected_list_append(ad, gitem);
+               }
+               else
+               {
+                       gl_dbg("Remove:%s", gitem->item->file_url);
+                       gl_db_selected_list_remove(ad, gitem);
+               }
+
+               cnt = gl_db_selected_list_count(ad);
+               /* Display selectioninfo */
+               gl_ui_create_selinfo(ad, ad->gridinfo.edit_layout,
+                                    ad->gridinfo.nf_it_edit,
+                                    ad->listinfo.videos_cnt, cnt, false);
+       }
+       else
+       {
+               GL_CHECK(gitem->item->uuid);
+               if (ad->listinfo.played_uuid) {
+                       free(ad->listinfo.played_uuid);
+                       ad->listinfo.played_uuid = NULL;
+               }
+               ad->listinfo.played_uuid = strdup(gitem->item->uuid);
+               /* Starting to play the video */
+               gl_dbg("Starting to play the video");
+               gl_ext_exec(data, GL_APP_VIDEOPLAYER);
+       }
+}
+
+static void
+_gl_list_update_view(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *genlist = obj;
+       int item_cnt = 0;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       elm_genlist_clear(genlist);
+
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+       int i = 0;
+       gl_item *gitem = NULL;
+       bool it_showed = false;
+
+       for (i = 1; i <= cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem == NULL || gitem->item == NULL)
+               {
+                       gl_dbg("gitem == NULL || gitem->item == NULL");
+                       continue;
+               }
+               if (gitem->item->type == MINFO_ITEM_VIDEO)
+               {
+                       gl_dbg("%s inserted", gitem->item->file_url);
+                       gitem->elm_item = elm_genlist_item_append(genlist,
+                                                                       &(ad->listinfo.videolic),
+                                                                       (void *)gitem,
+                                                                       NULL,
+                                                                       ELM_GENLIST_ITEM_NONE,
+                                                                       _gl_list_sel,
+                                                                       gitem);
+                       item_cnt++;
+                       if (!it_showed && ad->listinfo.played_uuid &&
+                           !g_strcmp0(ad->listinfo.played_uuid, gitem->item->uuid)) {
+                               it_showed = true;
+                               /*Move played item to middle position of view */
+                               elm_genlist_item_show(gitem->elm_item,
+                                                     ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+                       }
+               }
+       }
+
+       if (ad->listinfo.played_uuid) {
+               free(ad->listinfo.played_uuid);
+               ad->listinfo.played_uuid = NULL;
+       }
+
+       ad->listinfo.videos_cnt = item_cnt;
+       if (item_cnt > 0)
+       {
+               evas_object_smart_callback_add(genlist,
+                       "selected", _gl_list_genlist_sel, NULL);
+
+               if (view_mode != GL_VIEW_VIDEOLIST_EDIT)
+               {
+                       if (ad->listinfo.video_nocontents)
+                       {
+                               evas_object_hide(ad->listinfo.video_nocontents);
+                               gl_list_clear_view(ad);
+                       }
+                       ad->listinfo.video_view = genlist;
+               }
+               else
+               {
+                       ad->gridinfo.edit_view = genlist;
+               }
+       }
+       else
+       {
+               evas_object_del(genlist);
+
+               if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+               {
+                       ad->gridinfo.edit_view = NULL;
+                       ad->gridinfo.edit_layout = NULL;
+                       elm_naviframe_item_pop(ad->maininfo.navi_bar);
+               }
+
+               if (ad->listinfo.video_nocontents)
+               {
+                       gl_dbg("Nocontents view already created...");
+                       return;
+               }
+               else
+               {
+                       if (ad->listinfo.video_view)
+                       {
+                               evas_object_hide(ad->listinfo.video_view);
+                               gl_list_clear_view(ad);
+                       }
+
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_THUMBS, false);
+                       Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+                       evas_object_show(noc);
+                       ad->listinfo.video_view = noc;
+                       ad->listinfo.video_nocontents = noc;
+
+                       elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+                       elm_object_part_content_set(ad->gridinfo.layout, "elm.swallow.view",
+                                              ad->listinfo.video_view);
+               }
+       }
+}
+
+int _gl_list_clear_data(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       if (ad->listinfo.played_uuid) {
+               free(ad->listinfo.played_uuid);
+               ad->listinfo.played_uuid = NULL;
+       }
+       return 0;
+}
+
+Evas_Object *
+gl_list_create_view(void *data, Evas_Object * parent)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *genlist = NULL;
+       int item_cnt = 0;
+       gl_item *gitem = NULL;
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+       int view_mode = gl_get_view_mode(ad);
+       int i = 0;
+
+       gl_dbg("view mode=%d", view_mode);
+       if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+       {
+               ad->listinfo.videolic.item_style = GL_GENLIST_ITEM_STYLE_VIDEO_EDIT;
+       }
+       else
+       {
+               ad->listinfo.videolic.item_style = GL_GENLIST_ITEM_STYLE_VIDEO;
+       }
+       ad->listinfo.videolic.func.text_get = _gl_list_text_get;
+       ad->listinfo.videolic.func.content_get = _gl_list_content_get;
+       ad->listinfo.videolic.func.del = _gl_list_del;
+       genlist = elm_genlist_add(parent);
+       if (view_mode == GL_VIEW_VIDEOLIST)
+       {
+               elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       }
+
+       elm_object_style_set(genlist, GL_GENLIST_STYLE_DEFAULT);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       for (i = 1; i <= cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem == NULL || gitem->item == NULL ||
+                   gitem->item->uuid == NULL ) {
+                       gl_dbgE("Invalid gitem!");
+                       continue;
+               }
+               if (gitem->item->type == MINFO_ITEM_VIDEO)
+               {
+                       gl_dbg("%s inserted", gitem->item->file_url);
+                       gitem->elm_item = elm_genlist_item_append(genlist,
+                                                                       &(ad->listinfo.videolic),
+                                                                       (void *)gitem,
+                                                                       NULL,
+                                                                       ELM_GENLIST_ITEM_NONE,
+                                                                       _gl_list_sel,
+                                                                       gitem);
+                       item_cnt++;
+               }
+
+       }
+
+       ad->listinfo.videos_cnt = item_cnt;
+
+       evas_object_smart_callback_add(genlist,
+               "update,viedolist", _gl_list_update_view, ad);
+
+       if (item_cnt > 0)
+       {
+               evas_object_smart_callback_add(genlist,
+                       "selected", _gl_list_genlist_sel, ad);
+               ad->listinfo.video_nocontents = NULL;
+               return genlist;
+       }
+       else
+       {
+               evas_object_del(genlist);
+               genlist = NULL;
+
+               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+               evas_object_show(noc);
+               ad->listinfo.video_nocontents = noc;
+               return noc;
+       }
+}
+
+int gl_list_clear_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->listinfo.played_uuid) {
+               free(ad->listinfo.played_uuid);
+               ad->listinfo.played_uuid = NULL;
+       }
+
+       if (ad->listinfo.video_view) {
+               evas_object_del(ad->listinfo.video_view);
+               ad->listinfo.video_view = NULL;
+               ad->listinfo.video_nocontents = NULL;
+       }
+
+       return 0;
+}
+
+/* Update normal list view */
+int gl_list_update_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->listinfo.video_view == NULL ||
+           ad->listinfo.video_nocontents) {
+               gl_dbgW("Remove list nocontents view!");
+               if (ad->listinfo.video_nocontents) {
+                       evas_object_hide(ad->listinfo.video_nocontents);
+                       gl_list_clear_view(ad);
+               }
+
+               Evas_Object *list_view = NULL;
+               list_view = gl_list_create_view(ad, ad->maininfo.navi_bar);
+               ad->listinfo.video_view = list_view;
+
+               /* Enable edit button if it's not nocontents view */
+               if (ad->listinfo.video_nocontents == NULL)
+                       gl_ui_disable_toolbar_item(ad, false, GL_NAVI_THUMBS,
+                                                  false);
+
+               elm_object_part_content_unset(ad->gridinfo.layout,
+                                        "elm.swallow.view");
+               evas_object_show(ad->listinfo.video_view);
+               elm_object_part_content_set(ad->gridinfo.layout,
+                                      "elm.swallow.view",
+                                      ad->listinfo.video_view);
+       } else {
+               _gl_list_update_view(ad, ad->listinfo.video_view, NULL);
+       }
+
+       return 0;
+}
+
+int gl_list_change_to_edit(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       gl_set_view_mode(ad, GL_VIEW_VIDEOLIST_EDIT);
+       ad->listinfo.videolic.item_style = GL_GENLIST_ITEM_STYLE_VIDEO_EDIT;
+
+       _gl_list_update_view(ad, ad->gridinfo.edit_view, NULL);
+
+       return 0;
+}
+
+int
+gl_list_change_to_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (ad->uginfo.ug_called_by_me == NULL && ad->listinfo.video_view == NULL)
+       {
+               //special process when cancel edit after hide effect in _gl_ext_destroy_ug()
+               ad->listinfo.video_view = gl_list_create_view(ad, ad->maininfo.navi_bar);
+               evas_object_show(ad->listinfo.video_view);
+               elm_object_part_content_set(ad->gridinfo.layout,
+                               "elm.swallow.view",
+                               ad->listinfo.video_view);
+       }
+       else
+       {
+               gl_set_view_mode(ad, GL_VIEW_VIDEOLIST);
+               ad->listinfo.videolic.item_style = GL_GENLIST_ITEM_STYLE_VIDEO;
+
+               _gl_list_update_view(ad, ad->listinfo.video_view, NULL);
+       }
+
+       return 0;
+}
diff --git a/src/features/gl-popup.c b/src/features/gl-popup.c
new file mode 100755 (executable)
index 0000000..735b3de
--- /dev/null
@@ -0,0 +1,593 @@
+/*
+  * 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://www.tizenopensource.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 "gallery.h"
+#include "gl-popup.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-debug.h"
+#include "gl-listview.h"
+#include "gl-progressbar.h"
+#include "gl-strings.h"
+#include "gl-button.h"
+
+#define GL_POPUP_OBJ_DATA_KEY "popup_list_data"
+#define GL_GENLIST_ITEM_STYLE_1TEXT "1text"
+#define GL_GENLIST_ITEM_STYLE_1TEXT_1ICON "1text.1icon"
+#define GL_GENLIST_ITEM_STYLE_1TEXT_1ICON_2 "1text.1icon.2"
+#define GL_POPUP_STYLE_MIN_MENUSTYLE "min_menustyle"
+
+#define GL_POPUP_MENUSTYLE_WIDTH (614*elm_config_scale_get())
+#define GL_POPUP_MENUSTYLE_HEIGHT(x) ((113*x-1)*elm_config_scale_get())
+#define GL_POPUP_MENUSTYLE_HEIGHT_MAX (408*elm_config_scale_get())
+
+#define GL_POPUP_TIMEOUT_1S 1.0
+#define GL_POPUP_TIMEOUT_2S 2.0
+#define GL_POPUP_TIMEOUT_3S 3.0
+
+static Eina_Bool __gl_popup_timeout_cb(void *data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       if (ad->popupinfo.del_timer) {
+               ecore_timer_del(ad->popupinfo.del_timer);
+               ad->popupinfo.del_timer = NULL;
+       }
+
+       if (ad->popupinfo.popup) {
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int __gl_popup_add_timer(void *data, double to_inc)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       if (ad->popupinfo.del_timer) {
+               ecore_timer_del(ad->popupinfo.del_timer);
+               ad->popupinfo.del_timer = NULL;
+       }
+
+       ad->popupinfo.del_timer = ecore_timer_add(to_inc, __gl_popup_timeout_cb,
+                                                 data);
+       return 0;
+}
+
+static void __gl_popup_del_resp_cb(void *data, Evas_Object *obj,
+                                  void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       const char *text = NULL;
+
+       text = elm_object_text_get(obj);
+       GL_CHECK(text);
+       gl_dbg("Button: %s, mode: %d", text, ad->popupinfo.popup_mode);
+
+       if (!g_strcmp0(text, GL_STR_YES)) {
+               if (ad->popupinfo.popup_mode == GL_POPUP_ALBUM_DELETE)
+                       gl_del_albums(ad);
+       }
+
+       if (ad->popupinfo.popup) {
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       }
+}
+
+static void _gl_popup_move_to_album(void *data)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       /**
+       * 'move_album_id == NULL' is new album case,
+       * other move/save to some existed album.
+       */
+       if (ad->albuminfo.move_album_id)
+               gl_move_to_album(ad);
+       else
+               gl_ui_move_to_newalbum(ad);
+}
+
+static void _gl_popup_resp_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int mode = ad->popupinfo.popup_mode;
+       Ecore_IMF_Context *imf = ad->entryinfo.imf_context;
+       const char *text = NULL;
+
+       text = elm_object_text_get(obj);
+       GL_CHECK(text);
+       gl_dbg("Button: %s, mode: %d", text, mode);
+
+       if (mode == GL_POPUP_ALBUM_NEW_EMPTY ||
+           mode == GL_POPUP_ALBUM_NEW_DUPLICATE ||
+           mode == GL_POPUP_ALBUM_NEW_INVALID) {
+               if (!g_strcmp0(text, GL_STR_YES) ||
+                   !g_strcmp0(text, GL_STR_OK)) {
+                       ad->entryinfo.entry_mode = GL_ENTRY_NEW_ALBUM;
+                       evas_object_show(ad->entryinfo.imf_entry);
+                       elm_object_focus_set(ad->entryinfo.imf_entry, EINA_TRUE);
+                       ecore_imf_context_input_panel_show(imf);
+               } else if (!g_strcmp0(text, GL_STR_NO) ||
+                          !g_strcmp0(text, GL_STR_CANCEL)) {
+                       if (ad->entryinfo.imf_entry)
+                               ecore_imf_context_input_panel_hide(imf);
+
+                       gl_ui_cancel_new_album(ad);
+               }
+       } else if (mode == GL_POPUP_ALBUM_RENAME_EMPTY ||
+           mode == GL_POPUP_ALBUM_RENAME_DUPLICATE ||
+           mode == GL_POPUP_ALBUM_RENAME_INVALID) {
+               if (!g_strcmp0(text, GL_STR_YES) ||
+                   !g_strcmp0(text, GL_STR_OK)) {
+                       evas_object_show(ad->entryinfo.imf_entry);
+                       elm_object_focus_set(ad->entryinfo.imf_entry, EINA_TRUE);
+                       ecore_imf_context_input_panel_show(imf);
+               } else if (!g_strcmp0(text, GL_STR_NO) ||
+                          !g_strcmp0(text, GL_STR_CANCEL)) {
+                       if (ad->entryinfo.imf_entry)
+                               ecore_imf_context_input_panel_hide(imf);
+                       gl_ui_cancel_rename_album(ad);
+               }
+       } else if (mode == GL_POPUP_NOBUT_APPEXIT) {
+               if (ad->popupinfo.popup) {
+                       evas_object_del(ad->popupinfo.popup);
+                       ad->popupinfo.popup = NULL;
+               }
+               elm_exit();
+               return;
+       } else if (mode == GL_POPUP_NOBUT_ENTRY) {
+               evas_object_show(ad->entryinfo.imf_entry);
+               elm_object_focus_set(ad->entryinfo.imf_entry, EINA_TRUE);
+               ecore_imf_context_input_panel_show(imf);
+       }
+
+       if (ad->popupinfo.popup) {
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       }
+}
+
+
+static char *
+_gl_popup_list_get_text(void *data, Evas_Object * obj, const char *part)
+{
+       GL_CHECK_NULL(obj);
+       GL_CHECK_NULL(data);
+       /* Get 'ad' via 'popup_list_data' */
+       gl_appdata *ad = (gl_appdata *)evas_object_data_get(obj, GL_POPUP_OBJ_DATA_KEY);
+       GL_CHECK_NULL(ad);
+
+       int mode = ad->popupinfo.popup_mode;
+       const char *label = NULL;
+       /**
+       * Use index for album move,
+       * mainly for showing 'New album'
+       */
+       int idx = 0;
+
+       if (!strcmp(part, "elm.text"))
+       {
+               switch (mode)
+               {
+               case GL_POPUP_THUMB_MOVE:
+                       idx = (int)data;
+                       /* 1, Prevent pass NULL data */
+                       idx -= 2;
+                       if (idx == -1)
+                       {
+                               label = GL_STR_NEW_ALBUM;       //add "New album" item.
+                       }
+                       else
+                       {
+                               Eina_List *album_list = NULL;
+
+                               if (ad->albuminfo.cluster_list && ad->albuminfo.cluster_list->clist)
+                               {
+                                       album_list = ad->albuminfo.cluster_list->clist;
+                               }
+                               else
+                               {
+                                       gl_dbgE("cluster list is NULL.");
+                                       return NULL;
+                               }
+
+                               gl_cluster *album_item = eina_list_nth(album_list, idx);
+                               if (album_item && album_item->cluster &&
+                                   album_item->cluster->uuid &&
+                                   album_item->cluster->display_name) {
+                                       if (strlen(album_item->cluster->display_name))
+                                       {
+                                               label = album_item->cluster->display_name;
+                                       }
+                                       else if (gl_db_is_root_path(ad, album_item->cluster->uuid, NULL))       //"root" case, set display name as "No Name"
+                                       {
+                                               label = GL_ALBUM_PHOME_ROOT_NAME;
+                                       }
+                                       else
+                                       {
+                                               gl_dbgE("Album name[%s] is wrong!", album_item->cluster->display_name);
+                                               label = GL_ALBUM_PHOME_ROOT_NAME;
+                                       }
+                               }
+                       }
+                       break;
+               default:
+                       gl_dbg("default: wrong mode.");
+                       break;
+               }
+
+               if (label)
+               {
+                       return strdup(label);
+               }
+               else
+               {
+                       gl_dbgE("label is NULL");
+                       return NULL;
+               }
+       }
+       else
+       {
+               return NULL;
+       }
+}
+
+static Evas_Object *
+_gl_popup_list_get_icon(void *data, Evas_Object * obj, const char *part)
+{
+       gl_dbg("");
+       return NULL;
+}
+
+static Evas_Object *
+_gl_popup_create_list(void *data, Evas_Object * parent, const char *item_type)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (item_type)
+       {
+               ad->popupinfo.popuplit.item_style = item_type;
+       }
+       else
+       {
+               ad->popupinfo.popuplit.item_style = GL_GENLIST_ITEM_STYLE_1TEXT;
+       }
+       ad->popupinfo.popuplit.func.text_get = _gl_popup_list_get_text;
+       ad->popupinfo.popuplit.func.content_get = _gl_popup_list_get_icon;
+       ad->popupinfo.popuplit.func.state_get = NULL;
+       ad->popupinfo.popuplit.func.del = NULL;
+
+       Evas_Object *genlist = elm_genlist_add(parent);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       /* Attach 'ad' to genlist with 'GL_POPUP_OBJ_DATA_KEY' key to prevent use global variable. */
+       evas_object_data_set(genlist, GL_POPUP_OBJ_DATA_KEY, data);
+
+       return genlist;
+}
+
+static void
+_gl_popup_move_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item)
+       {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+       }
+
+       /* Get 'ad' via 'GL_POPUP_OBJ_DATA_KEY' */
+       GL_CHECK(obj);
+       gl_appdata *ad = (gl_appdata *)evas_object_data_get(obj, GL_POPUP_OBJ_DATA_KEY);
+       GL_CHECK(ad);
+       if (ad->albuminfo.move_album_id) {
+               free(ad->albuminfo.move_album_id);
+               ad->albuminfo.move_album_id = NULL;
+       }
+       if (data)
+               ad->albuminfo.move_album_id = strdup((char *)data);
+       gl_dbg("Dest album id: %s", ad->albuminfo.move_album_id);
+
+       if (ad->popupinfo.popup) {
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       }
+
+       _gl_popup_move_to_album(ad);
+}
+
+/* Append items to list in popup for 'Move' */
+static int _gl_popup_append_move_items(void *data, Evas_Object *genlist)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(genlist, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int idx = 0;
+       int i = 0;
+       int item_cnt = 0;
+       Eina_List *album_list = NULL;
+       int all_count = 0;
+       gl_cluster *album_item = NULL;
+       Elm_Genlist_Item_Class *plit = &(ad->popupinfo.popuplit);
+       gl_cluster *current_album = ad->albuminfo.current_album;
+       GL_CHECK_VAL(current_album, -1);
+       GL_CHECK_VAL(current_album->cluster, -1);
+       GL_CHECK_VAL(current_album->cluster->uuid, -1);
+
+       idx++;
+       elm_genlist_item_append(genlist, plit, (void *)idx, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_popup_move_cb,
+                               NULL);
+       item_cnt++;
+
+       if (ad->albuminfo.cluster_list && ad->albuminfo.cluster_list->clist) {
+               album_list = ad->albuminfo.cluster_list->clist;
+               all_count = eina_list_count(album_list);
+       } else {
+               gl_dbgE("cluster list is NULL");
+               return -1;
+       }
+
+       for (i = 0; i < all_count; i++) {
+               album_item = eina_list_nth(album_list, i);
+               GL_CHECK_VAL(album_item, -1);
+               GL_CHECK_VAL(album_item->cluster, -1);
+               GL_CHECK_VAL(album_item->cluster->display_name, -1);
+
+               idx++;
+               GL_CHECK_VAL(album_item->cluster->uuid, -1);
+               if (g_strcmp0(album_item->cluster->uuid, current_album->cluster->uuid)) {
+                       /* so guaranty 'All' album is the first genlist item. */
+                       if (!g_strcmp0(album_item->cluster->uuid, GL_ALBUM_ALL_ID))
+                               gl_dbg("Met All album, get next.");
+                       else {
+                               elm_genlist_item_append(genlist, plit,
+                                                       (void *)idx, NULL,
+                                                       ELM_GENLIST_ITEM_NONE,
+                                                       _gl_popup_move_cb,
+                                                       album_item->cluster->uuid);
+                               item_cnt++;
+                       }
+               }
+       }
+       return item_cnt;
+}
+
+int gl_popup_create_albums_del_popup(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (ad->popupinfo.popup != NULL) {
+               gl_dbg("The existed popup is deleted");
+               evas_object_del(ad->popupinfo.popup);
+       }
+
+       Evas_Object *popup = elm_popup_add(ad->maininfo.win);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_text_set(popup, GL_STR_DELETE_COMFIRMATION);
+       Evas_Object *btn1 = NULL;
+       Evas_Object *btn2 = NULL;
+       btn1 = _gl_but_create_but_popup(popup, GL_STR_YES,
+                                       __gl_popup_del_resp_cb, data);
+       btn2 = _gl_but_create_but_popup(popup, GL_STR_NO,
+                                       __gl_popup_del_resp_cb, data);
+       elm_object_part_content_set(popup, "button1", btn1);
+       elm_object_part_content_set(popup, "button2", btn2);
+
+       evas_object_show(popup);
+       ad->popupinfo.popup = popup;
+       ad->popupinfo.popup_mode = GL_POPUP_ALBUM_DELETE;
+       return 0;
+}
+
+static Evas_Object *_gl_popup_set_box(Evas_Object *parent,
+                                       Evas_Object *genlist, int item_cnt)
+{
+       GL_CHECK_NULL(parent);
+       GL_CHECK_NULL(genlist);
+       Evas_Object *box = elm_box_add(parent);
+
+       if (item_cnt < 4)
+               evas_object_size_hint_min_set(box, GL_POPUP_MENUSTYLE_WIDTH,
+                                             GL_POPUP_MENUSTYLE_HEIGHT(item_cnt));
+       else
+               evas_object_size_hint_min_set(box, GL_POPUP_MENUSTYLE_WIDTH,
+                                             GL_POPUP_MENUSTYLE_HEIGHT_MAX);
+
+       evas_object_show(genlist);
+       elm_box_pack_end(box, genlist);
+       return box;
+}
+
+int
+gl_popup_create_title_popup(void *data, gl_popup_mode mode, char *title, char *desc)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (ad->popupinfo.popup)
+       {
+               gl_dbg("Delete existed popup.");
+               evas_object_del(ad->popupinfo.popup);
+       }
+
+       Evas_Object *popup = elm_popup_add(ad->maininfo.win);
+       ad->popupinfo.popup = popup;
+       ad->popupinfo.popup_mode = mode;
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, desc);
+       Evas_Object *genlist = NULL;
+       Evas_Object *box = NULL;
+       int g_cnt = 0;
+       Evas_Object *btn1 = NULL;
+
+       switch (mode) {
+       case GL_POPUP_THUMB_MOVE:
+               elm_object_style_set(popup, GL_POPUP_STYLE_MIN_MENUSTYLE);
+               elm_object_part_text_set(popup, "title,text", title);
+               btn1 = _gl_but_create_but_popup(popup, GL_STR_CANCEL,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button1", btn1);
+
+               genlist = _gl_popup_create_list(ad, popup, NULL);
+               if ((g_cnt = _gl_popup_append_move_items(ad, genlist)) < 0) {
+                       gl_dbgE("_gl_popup_append_move_items failed!");
+                       goto POPUP_FAILED;
+               }
+               box = _gl_popup_set_box(popup, genlist, g_cnt);
+               elm_object_content_set(popup, box);
+               break;
+       default:
+               gl_dbg("Unexpected mode!");
+               break;
+       }
+
+       evas_object_show(popup);
+       return 0;
+
+ POPUP_FAILED:
+       gl_dbgE("POPUP_FAILED");
+       evas_object_del(popup);
+       ad->popupinfo.popup = NULL;
+       return -1;
+}
+
+int gl_popup_create_popup(void *data, gl_popup_mode mode, char *desc)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (ad->popupinfo.popup) {
+               gl_dbg("The existed popup is deleted");
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       }
+
+       /**
+       * Pogressbar is showed during moving or deleting medias,
+       * don't delete it while show popup.
+       */
+       if (mode != GL_POPUP_NOBUT_MOV_DEL)
+               gl_pb_del_pbar(ad);
+
+       Evas_Object *popup = elm_popup_add(ad->maininfo.win);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, desc);
+       Evas_Object *btn1 = NULL;
+       Evas_Object *btn2 = NULL;
+
+       switch (mode) {
+       case GL_POPUP_NOBUT:
+       case GL_POPUP_NOBUT_APPEXIT:
+       case GL_POPUP_NOBUT_ENTRY:
+               __gl_popup_add_timer(ad, GL_POPUP_TIMEOUT_3S);
+               break;
+       case GL_POPUP_NOBUT_1S:
+       case GL_POPUP_NOBUT_MOV_DEL:
+               __gl_popup_add_timer(ad, GL_POPUP_TIMEOUT_3S);
+               break;
+       case GL_POPUP_ONEBUT:
+               btn1 = _gl_but_create_but_popup(popup, GL_STR_OK,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button1", btn1);
+               break;
+       case GL_POPUP_TWOBUT:
+               btn1 = _gl_but_create_but_popup(popup, GL_STR_OK,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button1", btn1);
+               btn2 = _gl_but_create_but_popup(popup, GL_STR_CANCEL,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button2", btn2);
+               break;
+       case GL_POPUP_ALBUM_NEW_EMPTY:
+       case GL_POPUP_ALBUM_NEW_DUPLICATE:
+       case GL_POPUP_ALBUM_NEW_INVALID:
+       case GL_POPUP_ALBUM_RENAME_EMPTY:
+       case GL_POPUP_ALBUM_RENAME_DUPLICATE:
+       case GL_POPUP_ALBUM_RENAME_INVALID:
+               btn1 = _gl_but_create_but_popup(popup, GL_STR_YES,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button1", btn1);
+               btn2 = _gl_but_create_but_popup(popup, GL_STR_NO,
+                                               _gl_popup_resp_cb, data);
+               elm_object_part_content_set(popup, "button2", btn2);
+               break;
+       default:
+               gl_dbgE("Other popup mode...");
+               break;
+       }
+
+       evas_object_show(popup);
+
+       /* Focus popup and IMF hide */
+       if (mode == GL_POPUP_NOBUT_ENTRY)
+               elm_object_focus_set(popup, TRUE);
+
+       ad->popupinfo.popup = popup;
+       ad->popupinfo.popup_mode = mode;
+
+       return 0;
+}
+
+/* Update popup contents */
+int gl_popup_update_content(void *data, gl_popup_mode mode)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->popupinfo.popup, -1);
+       gl_dbg("mode: %d.", mode);
+
+       Evas_Object *content = elm_object_content_get(ad->popupinfo.popup);
+       GL_CHECK_VAL(content, -1);
+       Eina_List *chidren = elm_box_children_get(content);
+       GL_CHECK_VAL(chidren, -1);
+       Evas_Object *genlist = eina_list_nth(chidren, 0);
+       GL_CHECK_VAL(genlist, -1);
+       elm_genlist_clear(genlist);
+       int cnt = 0;
+
+       switch (mode) {
+       case GL_POPUP_THUMB_MOVE:
+               if ((cnt = _gl_popup_append_move_items(ad, genlist)) < 0) {
+                       gl_dbgE("_gl_popup_append_move_items failed!");
+                       return -1;
+               }
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
diff --git a/src/features/gl-progressbar.c b/src/features/gl-progressbar.c
new file mode 100755 (executable)
index 0000000..1b918b5
--- /dev/null
@@ -0,0 +1,265 @@
+/*
+  * 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://www.tizenopensource.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 "gallery.h"
+#include "gl-progressbar.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-debug.h"
+#include "gl-albums.h"
+#include "gl-thread-util.h"
+#include "gl-strings.h"
+#include "gl-button.h"
+
+#define GL_ALBUMS_PBAR_BG_COLOR_VAL 48
+#define GL_PBAR_STATUS_LEN_MAX 128
+
+#define GL_LABEL_STYLE_DEFAULT GL_CHECKBOX_STYLE_DEFAULT
+#define GL_PROGRESSBAR_STYLE_PROGRESS "gallery/list_progress"
+#define GL_PROGRESSBAR_STYLE_PROCESS "list_process"
+/* Font style for show label of popup */
+#define GL_FONT_STYLE_POP_S "<font=Helvetica Neue:style=Medium><font_size=42>"
+#define GL_FONT_STYLE_POP_E "</font_size></font>"
+
+static void
+_gl_pb_cancel_thread_pbar_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       //set cancel false value
+       gl_thread_set_cancel_state(data, GL_PB_CANCEL_BUTTON);
+       //delete progressbar
+       gl_pb_del_pbar(data);
+}
+
+
+static Eina_Bool
+_gl_pb_pbar_timer_cb(void *data)
+{
+       gl_dbg("Timeout, destroy progressbar and timer.");
+       gl_appdata *ad = (gl_appdata *)data;
+       if (ad->pbarinfo.pbar_popup != NULL)
+       {
+               evas_object_del(ad->pbarinfo.pbar_popup);
+               ad->pbarinfo.pbar_popup = NULL;
+               ad->pbarinfo.pbar = NULL;
+               ad->pbarinfo.status_label = NULL;
+       }
+
+       if (ad->pbarinfo.pbar_timer != NULL)
+       {
+               ecore_timer_del(ad->pbarinfo.pbar_timer);
+               ad->pbarinfo.pbar_timer = NULL;
+       }
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+int gl_pb_make_thread_pbar(void *data, Evas_Object * parent, char *title)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *popup = NULL;
+       Evas_Object *progressbar = NULL;
+       Evas_Object *box = NULL;
+       Evas_Object *label = NULL;
+
+       gl_pb_del_pbar(ad);
+
+       popup = elm_popup_add(parent);
+       elm_object_part_text_set(popup, "title,text", title);
+
+       label = elm_label_add(popup);
+       elm_object_text_set(label, GL_STR_EMPTY);
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_show(label);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_progressbar_unit_format_set(progressbar, NULL);
+       elm_progressbar_value_set(progressbar, 0.0);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL,
+                                       EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_box_horizontal_set(box, EINA_FALSE);
+       elm_box_homogeneous_set(box, EINA_TRUE);
+       elm_box_pack_end(box, progressbar);
+       elm_box_pack_end(box, label);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+
+       Evas_Object *btn1 = NULL;
+       btn1 = _gl_but_create_but_popup(popup, GL_STR_CANCEL,
+                                       _gl_pb_cancel_thread_pbar_cb, data);
+       elm_object_part_content_set(popup, "button1", btn1);
+
+       evas_object_show(popup);
+
+       ad->pbarinfo.pbar_popup = popup;
+       ad->pbarinfo.pbar = progressbar;
+       ad->pbarinfo.status_label = label;
+       ad->pbarinfo.finished_cnt = 0;
+
+       return 0;
+}
+
+int
+gl_pb_refresh_thread_pbar(void *data, int cur_cnt, int total_cnt)
+{
+       GL_CHECK_VAL(data, -1);
+       char status_info[GL_POPUP_DESC_LEN_MAX] = { 0, };
+       double percent = 0.0;
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->pbarinfo.pbar, -1);
+       GL_CHECK_VAL(ad->pbarinfo.status_label, -1);
+
+       snprintf(status_info, sizeof(status_info),
+                GL_FONT_STYLE_POP_S"%d/%d"GL_FONT_STYLE_POP_E, cur_cnt,
+                total_cnt);
+       /* Save medias count already operated */
+       ad->pbarinfo.finished_cnt = cur_cnt;
+       elm_object_text_set(ad->pbarinfo.status_label, status_info);
+       evas_object_show(ad->pbarinfo.status_label);
+
+       percent = (double)cur_cnt / (double)total_cnt;
+       elm_progressbar_value_set(ad->pbarinfo.pbar, percent);
+
+       return 0;
+}
+
+/* Use timer to destroy progressbar */
+int
+gl_pb_add_pbar_timer(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       ad->pbarinfo.pbar_timer = ecore_timer_add(1, _gl_pb_pbar_timer_cb, data);
+
+       return 0;
+}
+
+int
+gl_pb_del_pbar(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("destroy progressbar");
+
+       if (ad->pbarinfo.pbar_popup)
+       {
+               evas_object_del(ad->pbarinfo.pbar_popup);
+               ad->pbarinfo.pbar_popup = NULL;
+               ad->pbarinfo.pbar = NULL;
+               ad->pbarinfo.status_label = NULL;
+               ad->pbarinfo.finished_cnt = 0;
+       }
+       if (ad->pbarinfo.pbar_timer)
+       {
+               ecore_timer_del(ad->pbarinfo.pbar_timer);
+               ad->pbarinfo.pbar_timer = NULL;
+       }
+
+       return 0;
+}
+
+/* Add list_progress style progressbar */
+Evas_Object *gl_pb_add_list_pbar(Evas_Object *parent, const double ratio)
+{
+       GL_CHECK_NULL(parent);
+
+       Evas_Object *pbar = elm_progressbar_add(parent);
+       GL_CHECK_NULL(pbar);
+       elm_object_style_set(pbar, GL_PROGRESSBAR_STYLE_PROGRESS);
+       elm_progressbar_horizontal_set(pbar, EINA_TRUE);
+       evas_object_size_hint_align_set(pbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(pbar, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(pbar, ratio);
+       evas_object_show(pbar);
+       return pbar;
+}
+
+Evas_Object *gl_pb_make_pbar(void *data, Evas_Object *parent, char *state)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("Make progressbar, state:%s", state);
+       char label_str[GL_POPUP_DESC_LEN_MAX] = { 0, };
+
+       if (ad->pbarinfo.pbar_popup) {
+               if (ad->pbarinfo.pbar_timer) {
+                       gl_dbg("Del pbar timer in update case!");
+                       ecore_timer_del(ad->pbarinfo.pbar_timer);
+                       ad->pbarinfo.pbar_timer = NULL;
+               }
+               gl_dbg("Progressbar already created, update its label.");
+               snprintf(label_str, sizeof(label_str),
+                        GL_FONT_STYLE_POP_S"%s"GL_FONT_STYLE_POP_E, state);
+               elm_object_text_set(ad->pbarinfo.status_label, label_str);
+               return ad->pbarinfo.pbar_popup;
+       }
+       gl_pb_del_pbar(ad);
+       Evas_Object *popup = NULL;
+       Evas_Object *progressbar = NULL;
+       Evas_Object *box = NULL;
+       Evas_Object *label = NULL;
+
+       popup = elm_popup_add(parent);
+
+       label = elm_label_add(popup);
+       snprintf(label_str, sizeof(label_str),
+                GL_FONT_STYLE_POP_S"%s"GL_FONT_STYLE_POP_E, state);
+       elm_object_text_set(label, label_str);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_show(label);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, GL_PROGRESSBAR_STYLE_PROCESS);
+       elm_progressbar_unit_format_set(progressbar, NULL);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_box_homogeneous_set(box, EINA_TRUE);
+       elm_box_pack_end(box, progressbar);
+       elm_box_pack_end(box, label);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+       evas_object_show(popup);
+
+       ad->pbarinfo.pbar_popup = popup;
+       ad->pbarinfo.pbar = progressbar;
+       ad->pbarinfo.status_label = label;
+
+       return popup;
+}
+
diff --git a/src/gallery.c b/src/gallery.c
new file mode 100755 (executable)
index 0000000..085c90f
--- /dev/null
@@ -0,0 +1,866 @@
+/*
+  * 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://www.tizenopensource.org/license
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+
+#include <appcore-efl.h>
+#include <Evas.h>
+#include <aul.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <appsvc.h>
+#include "gallery.h"
+#include "gl-debug.h"
+#include "gl-albums.h"
+#include "gl-gridview.h"
+#include "gl-listview.h"
+#include "gl-controlbar.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-db-handler.h"
+#include "gl-ext-ug-load.h"
+#include "gl-ext-exec.h"
+#include "gl-popup.h"
+#include "gl-progressbar.h"
+#include "gl-thread-util.h"
+#include "gl-strings.h"
+
+#define GL_BG_COLOR_DEFAULT 45
+#define GL_BG_ALPHA_DEFAULT 255
+
+#define GL_WIN_ROTATE_DEG_0 0
+#define GL_WIN_ROTATE_DEG_90 90
+#define GL_WIN_ROTATE_DEG_180 180
+#define GL_WIN_ROTATE_DEG_270 270
+
+#define GL_BD_LAUNCH_TYPE "launch-type"
+#define GL_BD_ALBUM_ID "album-id"
+#define GL_BD_FILE_TYPE "file-type"
+#define GL_BD_CONTACT_ID "contact"
+#define GL_BD_SETAS_TYPE "setas-type"
+#define GL_BD_CALLERID_SIZE "callerid-size"
+#define GL_BD_CALLERID_PATH "callerid-path"
+#define GL_BD_HOMESCREEN_PATH "homescreen-path"
+#define GL_BD_LOCKSCREEN_PATH "lockscreen-path"
+#define GL_BD_SELECT_ALBUM "select-album"
+#define GL_BD_SELECT_ONE "select-one"
+#define GL_BD_SELECT_MULTIPLE "select-multiple"
+#define GL_BD_SELECT_SETAS "select-setas"
+#define GL_BD_SELECT_IMFT "select-imft"
+#define GL_BD_FILE_TYPE_IMAGE "image"
+#define GL_BD_FILE_TYPE_VIDEO "video"
+#define GL_BD_FILE_TYPE_ALL "all"
+#define GL_BD_SETAS_WALLPALER "wallpaper"
+#define GL_BD_SETAS_CALLERID "callerid"
+
+#define GL_MIME_SEP ":"
+#define GL_MIME_TYPE_GALLERY "gallery.uri"
+
+struct text_part {
+       char *part;
+       char *msgid;
+};
+
+static struct text_part main_txt[] = {
+       {N_("txt_title"), N_("Application template"),},
+       {N_("txt_mesg"), N_("Click to exit"),},
+};
+
+/* User-defined function */
+static int _gallery_init_app_svc(void *data);
+
+static void _gallery_win_del_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       gl_dbgW("_gallery_win_del_cb!!");
+       GL_CHECK(data);
+
+       elm_exit();
+}
+
+static int _gallery_update_ts(Evas_Object *eo, struct text_part *tp, int size)
+{
+       int i = 0;
+
+       if (eo == NULL || tp == NULL || size < 0) {
+               return -1;
+       }
+       for (i = 0; i < size; i++) {
+               if (tp[i].part && tp[i].msgid) {
+                       edje_object_part_text_set(eo, tp[i].part,
+                                                 _(tp[i].msgid));
+               }
+       }
+
+       return 0;
+}
+
+static int _gallery_lang_changed_cb(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->maininfo.ly_main, -1);
+
+       _gallery_update_ts(elm_layout_edje_get(ad->maininfo.ly_main),
+                          main_txt, sizeof(main_txt) / sizeof(main_txt[0]));
+
+       return 0;
+}
+
+static int _gallery_low_battery_cb(void *data)
+{
+       gl_dbg("");
+       return 1;
+}
+
+static Evas_Object *_gallery_create_win(void *data, const char *name)
+{
+       GL_CHECK_NULL(name);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *eo = NULL;
+       int w = 0;
+       int h = 0;;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       if (eo) {
+               elm_win_title_set(eo, name);
+               elm_win_borderless_set(eo, EINA_TRUE);
+               evas_object_smart_callback_add(eo, "delete,request",
+                                              _gallery_win_del_cb, ad);
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &w,
+                                       &h);
+               double wscale = (double)(((double)w) / ((double)GL_WIN_WIDTH));
+               ad->maininfo.win_scale = wscale;
+               gl_dbg("main window size: (%d, %d), scale: %f", w, h,
+                      ad->maininfo.win_scale);
+               evas_object_resize(eo, w, h);
+       }
+
+       gl_dbg("_gallery_create_win:done");
+       return eo;
+}
+
+static Evas_Object *_gallery_create_bg(Evas_Object *parent)
+{
+       GL_CHECK_NULL(parent);
+       Evas_Object *bg = NULL;
+
+       bg = elm_bg_add(parent);
+       elm_bg_color_set(bg, GL_BG_COLOR_DEFAULT, GL_BG_COLOR_DEFAULT,
+                        GL_BG_COLOR_DEFAULT);
+
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static int _gallery_create_view_ly(gl_appdata *ad)
+{
+       GL_CHECK_VAL(ad, -1);
+       GL_CHECK_VAL(ad->maininfo.navi_bar, -1);
+       /* Create albums view layout */
+       Evas_Object *layout = gl_ui_create_view_ly(ad->maininfo.navi_bar);
+       GL_CHECK_VAL(layout, -1);
+       ad->albuminfo.layout = layout;
+       edje_object_signal_emit(_EDJ(layout), "elm,swallow_view,state,default",
+                               "elm");
+       /* Check mass storage mode */
+       gl_get_mass_storage_state(ad);
+       /* Push albums view to stack */
+       gl_ui_create_title_and_push(ad, ad->maininfo.navi_bar,
+                                   ad->albuminfo.layout, GL_NAVI_ALBUMS,
+                                   GL_STR_ALBUMS);
+       return 0;
+}
+
+static Eina_Bool _gallery_create_albums_idler_cb(void *data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("_gallery_create_albums_idler_cb:start");
+
+       if (ad->albuminfo.aul_launch_by_mime ||
+           ad->albuminfo.aul_launch_type == GL_AUL_T_VIEW_ALBUM) {
+               gl_dbgW("\tIdler: From livepanel, gallery is launched!");
+       } else {
+               gl_dbgW("\tIdler: Gallery is launched!");
+
+               /* Initialize libmedia-info */
+               gl_db_init(ad);
+               gl_dbg("minfo_init:done");
+
+               /* Get cluster list from libmedia-info */
+               gl_db_get_cluster_list(ad);
+               GL_CHECK_FALSE(ad->albuminfo.cluster_list);
+
+               gl_dbg("gl_db_get_cluster_list:done");
+               /* Set view mode */
+               gl_set_view_mode(ad, GL_VIEW_ALBUMS);
+               /**
+               * Disbale 'edit' button if none editable albums
+               * (albums except 'All albums'/'Camera shot') exist.
+               */
+               if (gl_check_gallery_empty(ad) ||
+                   ad->albuminfo.cluster_list->edit_cnt == 0)
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  false);
+       }
+
+       GL_CHECK_FALSE(ad->albuminfo.layout);
+       Evas_Object *layout_inner = NULL;
+       /* Create albums view */
+       layout_inner = gl_albums_create_view(ad, ad->albuminfo.layout);
+       GL_CHECK_FALSE(layout_inner);
+       elm_object_part_content_set(ad->albuminfo.layout, "elm.swallow.view",
+                              layout_inner);
+       ad->albuminfo.view = layout_inner;
+
+       ad->albuminfo.gallery_launched = true;
+       gl_dbg("_gallery_create_albums_idler_cb:done");
+
+       ad->albuminfo.create_albums_idler = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int _gallery_init_view(gl_appdata *ad)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(ad, -1);
+
+       /* Base Layout */
+       ad->maininfo.ly_main = gl_ui_create_main_ly(ad->maininfo.win);
+       GL_CHECK_VAL(ad->maininfo.ly_main, -1);
+       gl_dbg("gl_ui_create_main_ly: done");
+
+       /* Background. */
+       ad->maininfo.bg = _gallery_create_bg(ad->maininfo.ly_main);
+       GL_CHECK_VAL(ad->maininfo.bg, -1);
+
+       /* Pack bg to swallow */
+       elm_object_part_content_set(ad->maininfo.ly_main, "elm.swallow.bg",
+                              ad->maininfo.bg);
+
+       /* Indicator */
+       elm_win_indicator_mode_set(ad->maininfo.win, ELM_WIN_INDICATOR_SHOW);
+
+       /* Navigation Bar */
+       ad->maininfo.navi_bar = gl_ui_create_naviframe(ad->maininfo.ly_main);
+       GL_CHECK_VAL(ad->maininfo.navi_bar, -1);
+       gl_dbg("gl_ui_create_naviframe: done");
+
+       elm_object_part_content_set(ad->maininfo.ly_main, "elm.swallow.content",
+                              ad->maininfo.navi_bar);
+
+       /* Navigation Bar Item with a List */
+       _gallery_create_view_ly(ad);
+
+       return 0;
+}
+
+static int _gallery_create(void *data)
+{
+       gl_dbgW("==Create==");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       ad->maininfo.reentrant = TRUE;
+       Evas_Object *win = NULL;
+       int r = -1;
+
+       elm_theme_extension_add(NULL, GL_EDJ_FILE);
+       /* Make custom theme for navibar and controlbar. */
+       elm_theme_extension_add(NULL, GL_BLACK_THEME_EDJ_FILE);
+
+       /* init internationalization */
+       r = appcore_set_i18n(PACKAGE, LOCALEDIR);
+       if (r) {
+               gl_dbgE("appcore_set_i18n failed");
+               return -1;
+       }
+       gl_dbg("appcore_set_i18n:done");
+
+       /* create window */
+       win = _gallery_create_win(ad, PACKAGE);
+       GL_CHECK_VAL(win, -1);
+       ad->maininfo.win = win;
+
+       /* initialize gallery view */
+       if (_gallery_init_view(ad) != 0) {
+               gl_dbgE("_gallery_init_view failed");
+               return -1;
+       }
+
+       evas_object_show(win);
+       gl_dbg("evas_object_show(win):done");
+
+       /* add system event callback */
+       appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE,
+                                  _gallery_lang_changed_cb, ad);
+       appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY,
+                                  _gallery_low_battery_cb, NULL);
+
+       /* Register callbacks of DB update and UMS */
+       gl_dbg("system event cb:done");
+       gl_reg_db_update_noti(ad);
+       gl_reg_mass_storage_noti(ad);
+
+       if (ad->albuminfo.create_albums_idler == NULL) {
+               /* Use idler to load albums view */
+               Ecore_Idler *idl = NULL;
+               idl = ecore_idler_add(_gallery_create_albums_idler_cb, ad);
+               ad->albuminfo.create_albums_idler = idl;
+               gl_dbg("create_albums_idler added: 0x%x",
+                      ad->albuminfo.create_albums_idler);
+       }
+       /* Launch Gallery at the first time */
+       gl_dbg("Set view mode as GL_VIEW_ALBUMS");
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS);
+
+       return 0;
+}
+
+static int _gallery_close_app(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* Destroy timer for UMS update */
+       if (ad->maininfo.ums_update_timer) {
+               ecore_timer_del(ad->maininfo.ums_update_timer);
+               ad->maininfo.ums_update_timer = NULL;
+       }
+       /* destroy rename album job.*/
+       if(ad->maininfo.rename_album_job) {
+               ecore_job_del(ad->maininfo.rename_album_job);
+               ad->maininfo.rename_album_job = NULL;
+       }
+       /* Destroy vibration timer */
+       if (ad->entryinfo.vibration_timer) {
+               ecore_timer_del(ad->entryinfo.vibration_timer);
+               ad->entryinfo.vibration_timer = NULL;
+       }
+       /* Free Ecore_Pipe object created */
+       if (ad->pbarinfo.sync_pipe) {
+               ecore_pipe_del(ad->pbarinfo.sync_pipe);
+               ad->pbarinfo.sync_pipe = NULL;
+       }
+
+       if (ad->pbarinfo.start_thread_timer) {
+               ecore_timer_del(ad->pbarinfo.start_thread_timer);
+               ad->pbarinfo.start_thread_timer = NULL;
+       }
+
+       if (ad->pbarinfo.del_pbar_idler) {
+               ecore_idler_del(ad->pbarinfo.del_pbar_idler);
+               ad->pbarinfo.del_pbar_idler = NULL;
+       }
+
+       /* Destroy timer for removing popup */
+       if (ad->popupinfo.del_timer) {
+               ecore_timer_del(ad->popupinfo.del_timer);
+               ad->popupinfo.del_timer = NULL;
+       }
+
+       /* Clear data in video list view */
+       _gl_list_clear_data(ad);
+       /* delete notification. */
+       gl_ui_destroy_notiinfo(ad);
+
+       /* Mass storage callback unregister. */
+       gl_dereg_mass_storage_noti();
+       /* DB update callback unregister. */
+       gl_dereg_db_update_noti();
+
+       /* Free memory allocated for appsvc */
+       _gallery_init_app_svc(ad);
+
+       ug_destroy_all();
+
+       gl_albums_free_data(data);
+
+       /* disconnet with libmedia-info */
+       gl_db_finalize(ad);
+
+       gl_dbgW("==Exit, bye~ ==");
+
+       return 0;
+}
+
+static int _gallery_terminate(void *data)
+{
+       gl_dbgW("==Terminate==");
+       GL_CHECK_VAL(data, -1);
+
+       return _gallery_close_app(data);
+}
+
+static int _gallery_pause(void *data)
+{
+       gl_dbgW("==Pause==");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       ad->maininfo.reentrant = TRUE;
+
+       ug_pause();
+
+       /* For select appsvc, destory ug when HOME key is pressed */
+       gl_ext_destroy_gallery_ug(ad);
+
+       return 0;
+}
+
+static int _gallery_resume(void *data)
+{
+       gl_dbgW("==Resume==");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->maininfo.app_exit_mode) {
+               gl_dbgW("Mass storage mounted");
+               return 0;
+       }
+
+       ug_resume();
+       /* Video palyer was close when pause Gallery */
+       ad->uginfo.app_called_by_me = false;
+
+       /* Show cursor and IMF if not popup showed */
+       if (ad->entryinfo.editfield && ad->popupinfo.popup == NULL) {
+               gl_dbg("Show Entry cursor and IMF.");
+               elm_object_focus_set(ad->entryinfo.imf_entry, TRUE);
+               Ecore_IMF_Context *imf = ad->entryinfo.imf_context;
+               ecore_imf_context_input_panel_show(imf);
+       }
+
+       /* Update view */
+       gl_update_view(ad, GL_UPDATE_VIEW_NORMAL);
+
+       return 0;
+}
+
+static int _gallery_reset_app(void *data, const char *cluster_id)
+{
+       GL_CHECK_VAL(cluster_id, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->maininfo.win, -1);
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       /* Checkme: UMS update case: ad->maininfo.ums_update_timer */
+
+       if (ad->pbarinfo.sync_pipe) {
+               gl_dbgW("Cancel move/delete pthread/Pipe!");
+               /* Set cancel state to make child thread exit */
+               gl_thread_set_cancel_state(ad, GL_PB_CANCEL_RESET);
+               return -1;
+       }
+
+       if (view_mode == GL_VIEW_ALBUMS_EDIT ||
+                  view_mode == GL_VIEW_ALBUMS_RENAME) {
+               gl_dbg("Edit albums view.");
+               gl_del_invalid_widgets(ad, GL_INVALID_NONE);
+               gl_ui_edit_cancel(ad);
+       } else if (view_mode == GL_VIEW_ALBUMS) {
+               gl_dbg("Albums view.");
+       } else if (view_mode != GL_VIEW_NONE) {
+               gl_cluster *album = NULL;
+               album = ad->albuminfo.current_album;
+               GL_CHECK_VAL(album, -1);
+               GL_CHECK_VAL(album->cluster, -1);
+
+               bool b_cur_album_exists = false;
+               if (album->cluster->uuid &&
+                   !g_strcmp0(album->cluster->uuid, cluster_id)) {
+                       int its_cnt = 0;
+                       int ret = GL_DB_FAIL;
+                       ret = gl_db_get_item_cnt(ad, cluster_id, &its_cnt);
+                       if (ret != GL_DB_SUCCESS || its_cnt == 0)
+                               gl_dbgE("Empty current album!");
+                       else
+                               b_cur_album_exists = true;
+               }
+
+               /* Current album exists and it's not empty */
+               if (b_cur_album_exists) {
+                       gl_dbg("Current album, update view.");
+                       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+                               gl_del_invalid_widgets(ad, GL_INVALID_NONE);
+                               /* Set flag to update albums list */
+                               ad->albuminfo.update_albums_list = true;
+                               gl_ui_edit_cancel(ad);
+                       } else {
+                               gl_update_view(ad, GL_UPDATE_VIEW_NORMAL);
+                       }
+                       elm_win_activate(ad->maininfo.win);
+                       return 0;
+               } else {
+                       gl_dbg("Change to albums view.");
+                       gl_destroy_thumbs_view(ad);
+                       gl_refresh_albums_list(ad);
+                       gl_albums_comeback_from_view(ad);
+               }
+
+               gl_ui_destroy_notiinfo(ad);
+       }
+       else {
+               /* gallery is launched first time , doesn't resume. */
+               /* init libmedia-info */
+               gl_db_init(ad);
+               gl_dbg("minfo_init:done");
+
+               gl_db_get_cluster_list(ad);
+               GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+               gl_dbg("gl_db_get_cluster_list:done");
+       }
+
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS);
+       elm_win_activate(ad->maininfo.win);
+
+       return 0;
+}
+
+/* init appsvc launch related global variables */
+static int _gallery_init_app_svc(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("");
+       gl_appdata *ad = (gl_appdata *)data;
+
+       ad->albuminfo.aul_launch_type = GL_AUL_T_NONE;
+       ad->albuminfo.aul_file_type = GL_AUL_FILE_T_NONE;
+       ad->albuminfo.aul_setas_type = GL_AUL_SETAS_T_NONE;
+       if(ad->albuminfo.aul_album_id) {
+               free(ad->albuminfo.aul_album_id);
+               ad->albuminfo.aul_album_id = NULL;
+       }
+       ad->albuminfo.aul_contact_id = -1;
+       ad->albuminfo.aul_launch_by_mime = false;
+
+       if(ad->albuminfo.recv_bundle) {
+               bundle_free(ad->albuminfo.recv_bundle);
+               ad->albuminfo.recv_bundle = NULL;
+       }
+
+       if(ad->albuminfo.aul_callid_size) {
+               free(ad->albuminfo.aul_callid_size);
+               ad->albuminfo.aul_callid_size = NULL;
+       }
+       if(ad->albuminfo.aul_callid_path) {
+               free(ad->albuminfo.aul_callid_path);
+               ad->albuminfo.aul_callid_path = NULL;
+       }
+       if(ad->albuminfo.aul_homescreen_path) {
+               free(ad->albuminfo.aul_homescreen_path);
+               ad->albuminfo.aul_homescreen_path = NULL;
+       }
+       if(ad->albuminfo.aul_lockscreen_path) {
+               free(ad->albuminfo.aul_lockscreen_path);
+               ad->albuminfo.aul_lockscreen_path = NULL;
+       }
+       return 0;
+}
+
+static int _gallery_parse_launch_type(bundle *b, void *data)
+{
+       GL_CHECK_VAL(b, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("");
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gl_aul_launch_type launch_type = GL_AUL_T_NONE;
+       const char *launch_type_str = NULL;
+       const char *setas_type_str = NULL;
+
+       /* get launch-type */
+       launch_type_str = appsvc_get_data(b, GL_BD_LAUNCH_TYPE);
+       if (launch_type_str == NULL) {
+               gl_dbg("set to default launch type: select-one");
+               ad->albuminfo.aul_launch_type = GL_AUL_T_SELECT_ONE;
+               return 0;
+       } else {
+               gl_dbg("launch-type: %s", launch_type_str);
+       }
+
+       if(!strcasecmp(launch_type_str, GL_BD_SELECT_ALBUM)) {
+
+               launch_type = GL_AUL_T_SELECT_ALBUM;
+       }
+       else  if(!strcasecmp(launch_type_str, GL_BD_SELECT_ONE)) {
+
+               launch_type = GL_AUL_T_SELECT_ONE;
+       }
+       else  if(!strcasecmp(launch_type_str, GL_BD_SELECT_MULTIPLE)) {
+
+               launch_type = GL_AUL_T_SELECT_MULTIPLE;
+       }
+       else if(!strcasecmp(launch_type_str, GL_BD_SELECT_IMFT)) {
+
+               launch_type = GL_AUL_T_SELECT_IMFT;
+
+               const char *contact_id_str = NULL;
+               /* get contact id */
+               contact_id_str = appsvc_get_data(b, GL_BD_CONTACT_ID);
+               if (contact_id_str)
+               {
+                       gl_dbg("contact: %s", contact_id_str);
+                       ad->albuminfo.aul_contact_id = atoi(contact_id_str);
+               }
+       }
+       else  if(!strcasecmp(launch_type_str, GL_BD_SELECT_SETAS)) {
+
+               launch_type = GL_AUL_T_SELECT_SETAS;
+
+               /* get setas-type */
+               setas_type_str = appsvc_get_data(b, GL_BD_SETAS_TYPE);
+               if(setas_type_str == NULL)
+                       return 0;
+               gl_dbg("setas-type: %s", setas_type_str);
+
+               gl_aul_setas_type setas_type = GL_AUL_SETAS_T_NONE;
+               const char *path = NULL;
+               const char *size = NULL;
+
+               if (!strcasecmp(setas_type_str, GL_BD_SETAS_WALLPALER)) {
+
+                       setas_type = GL_AUL_SETAS_T_WALLPAPER;
+
+                       /* get homscreen-path */
+                       path = appsvc_get_data(b, GL_BD_HOMESCREEN_PATH);
+                       if (path) {
+                               gl_dbg("homescreen-path: %s", path);
+                               ad->albuminfo.aul_homescreen_path = strdup(path);
+                       }
+                       /* get lockscreen-path */
+                       path = appsvc_get_data(b, GL_BD_LOCKSCREEN_PATH);
+                       if (path) {
+                               gl_dbg("lockscreen-path: %s", path);
+                               ad->albuminfo.aul_lockscreen_path = strdup(path);
+                       }
+               }
+               else if (!strcasecmp(setas_type_str, GL_BD_SETAS_CALLERID)) {
+
+                       setas_type = GL_AUL_SETAS_T_CALLER_ID;
+                       /* get callerid-size */
+                       size = appsvc_get_data(b, GL_BD_CALLERID_SIZE);
+                       if (size) {
+                               gl_dbg("callerid-size: %s", size);
+                               ad->albuminfo.aul_callid_size = strdup(size);
+                       }
+                       /* get callerid-path */
+                       path = appsvc_get_data(b, GL_BD_CALLERID_PATH);
+                       if (path) {
+                               gl_dbg("callerid-path: %s", path);
+                               ad->albuminfo.aul_callid_path = strdup(path);
+                       }
+               }
+
+               ad->albuminfo.aul_setas_type = setas_type;
+       }
+
+       ad->albuminfo.aul_launch_type = launch_type;
+       return 0;
+}
+
+/* analysis parameters */
+static int _gallery_parse_param(bundle *b, void *data)
+{
+       GL_CHECK_VAL(b, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("");
+       gl_appdata *ad = (gl_appdata *)data;
+       const char *operation = NULL;
+       const char *uri = NULL;
+       const char *mime = NULL;
+
+       /* init */
+       _gallery_init_app_svc(ad);
+
+       /* save current bundle */
+       ad->albuminfo.recv_bundle = bundle_dup(b);
+
+       operation = appsvc_get_operation(b);
+
+       /* Just for backward compatibility - Need to migrate to appsvc */
+       if(operation == NULL) {
+               /* get album-id when launched by shortcut */
+               const char *mime_type_str = NULL;
+               mime_type_str = bundle_get_val(b, AUL_K_MIME_TYPE);
+               if(mime_type_str == NULL)
+                       return -1;
+               gl_dbg("mime_type: %s", mime_type_str);
+
+               if(!strcmp(mime_type_str, GL_MIME_TYPE_GALLERY)) {
+                       char *content = NULL;
+                       content = strdup(bundle_get_val(b, AUL_K_MIME_CONTENT));
+                       GL_CHECK_VAL(content, -1);
+                       gl_dbg("content: %s", content);
+
+                       char *szID = NULL;
+                       char *str_buf = NULL;
+                       szID = strtok_r(content, GL_MIME_SEP, &str_buf);
+                       free(content);
+                       content = NULL;
+                       szID = strtok_r(NULL, GL_MIME_SEP, &str_buf);
+                       GL_CHECK_VAL(szID, -1);
+                       ad->albuminfo.aul_album_id = strdup(szID);
+                       ad->albuminfo.aul_launch_by_mime = true;
+                       gl_dbg("album_id: %s", ad->albuminfo.aul_album_id);
+               }
+               return 0;
+       }
+
+       gl_dbg("operation: %s", operation);
+
+       uri = appsvc_get_uri(b);
+       if(uri)
+               gl_dbg("uri: %s", uri);
+
+       /* OPERATION_VIEW */
+       if(!strcasecmp(operation, APPSVC_OPERATION_VIEW)) {
+               /* ug destroy */
+               gl_ext_destroy_gallery_ug(ad);
+
+               ad->albuminfo.aul_launch_type = GL_AUL_T_VIEW_ALBUM;
+
+               /* get file-type from bundle */
+               const char *file_type_str = NULL;
+               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_ALL; /* default */
+               file_type_str = appsvc_get_data(b, GL_BD_FILE_TYPE);
+               if(file_type_str) {
+
+                       gl_dbg("file type: %s", file_type_str);
+                       if (!strcmp(file_type_str, GL_BD_FILE_TYPE_IMAGE)) {
+                               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_IMAGE;
+                       } else if (!strcmp(file_type_str, GL_BD_FILE_TYPE_VIDEO)) {
+                               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_VIDEO;
+                       }
+               }
+
+               const char *album_id_str = NULL;
+               /* get album-id */
+               album_id_str = appsvc_get_data(b, GL_BD_ALBUM_ID);
+
+               if(album_id_str) {
+                       gl_dbg("album-id: %s", album_id_str);
+                       ad->albuminfo.aul_album_id = strdup(album_id_str);
+               } else {
+                       gl_dbg("album-id is invalid, set to default (ALL)");
+                       ad->albuminfo.aul_album_id = strdup(GL_ALBUM_ALL_ID);
+               }
+       }
+       /* OPERATION_PICK */
+       else if(!strcasecmp(operation, APPSVC_OPERATION_PICK)) {
+
+               /* get file-type from mime */
+               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_ALL; /* default */
+               mime = appsvc_get_mime(b);
+               if(mime) {
+
+                       gl_dbg("mime: %s", mime);
+                       if (!strcmp(mime, GL_MIME_IMAGE_ALL)) {
+                               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_IMAGE;
+                       } else if (!strcmp(mime, GL_MIME_VIDEO_ALL)) {
+                               ad->albuminfo.aul_file_type = GL_AUL_FILE_T_VIDEO;
+                       }
+               }
+
+               _gallery_parse_launch_type(b, ad);
+       }
+
+       return 0;
+}
+
+static int _gallery_reset(bundle *b, void *data)
+{
+       gl_dbgW("==Reset==");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->maininfo.win, -1);
+       int ret = -1;
+
+       if (ad->maininfo.reentrant)
+               ad->maininfo.reentrant = FALSE;
+       else {
+               gl_dbgW("Gallery reentrant is not allowed, return!");
+               return 0;
+       }
+
+       /* Destroy gallery ug */
+       if (ad->uginfo.gallery_ug_called_by_me) {
+               gl_dbgW("Destroy Gallery UG launched, show App view!");
+               ug_destroy(ad->uginfo.gallery_ug_called_by_me);
+               ad->uginfo.gallery_ug_called_by_me = NULL;
+       }
+
+       /* Parse parameters */
+       if(_gallery_parse_param(b, data) != 0)
+       {
+               if (ad->albuminfo.aul_launch_by_mime == false &&
+                   ad->albuminfo.aul_launch_type == GL_AUL_T_NONE) {
+/*@@ 1. Launch Gallery from menu screen/Smart search app, albums view showed @@*/
+                       gl_dbg("");
+               } else {
+                       gl_dbgE("Failed to parse parameters!");
+               }
+               elm_win_activate(ad->maininfo.win);
+               return -1;
+       }
+
+       if (ad->albuminfo.aul_launch_by_mime ||
+           ad->albuminfo.aul_launch_type == GL_AUL_T_VIEW_ALBUM) {
+/*@@ 2. Launch Gallery from shortcut @@*/
+               ret = _gallery_reset_app(data, ad->albuminfo.aul_album_id);
+       } else {
+/*@@ 3. Load Gallery UG @@*/
+               gl_dbg("Start loading Gallery UG");
+               gl_ext_load_gallery_ug(ad);
+
+               elm_win_activate(ad->maininfo.win);
+       }
+
+       return ret;
+}
+
+int gallery_reset_app(void *data, const char *cluster_id)
+{
+       GL_CHECK_VAL(data, -1);
+       GL_CHECK_VAL(cluster_id, -1);
+       gl_dbg("Reset gallery, selected cluster ID: %s.", cluster_id);
+       return _gallery_reset_app(data, cluster_id);
+}
+
+int main(int argc, char *argv[])
+{
+       gl_dbgW("==Gallery==");
+       gl_appdata gl_ad;
+       int ret;
+       struct appcore_ops ops = {
+               .create = _gallery_create,
+               .terminate = _gallery_terminate,
+               .pause = _gallery_pause,
+               .resume = _gallery_resume,
+               .reset = _gallery_reset,
+       };
+
+       memset(&gl_ad, 0x00, sizeof(gl_appdata));
+       ops.data = &gl_ad;
+
+       ret = appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+
+       return ret;
+}
diff --git a/src/util/gl-db-handler.c b/src/util/gl-db-handler.c
new file mode 100755 (executable)
index 0000000..8d06884
--- /dev/null
@@ -0,0 +1,1727 @@
+/*
+  * 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://www.tizenopensource.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 <vconf.h>
+#include <vconf-keys.h>
+#include <media-svc.h>
+#include <appcore-efl.h>
+#include "gl-db-handler.h"
+#include "gl-controlbar.h"
+#include "gallery.h"
+#include "gl-debug.h"
+#include "gl-util.h"
+#include "gl-strings.h"
+
+static bool
+_gl_db_get_file_dir_names(const char *file_path,
+       char *filename, char *dir_name, char *dir_path)
+{
+       gl_dbg("");
+       GL_CHECK_FALSE(file_path);
+       gint i = 0;
+       gint count = 0;
+       for (i = strlen(file_path); i >= 0; i--)
+       {
+               if (file_path[i] != '\0')
+               {
+                       count++;
+               }
+               if (file_path[i] == '/')
+               {
+                       if (filename != NULL)
+                       {
+                               memcpy(filename, &file_path[i + 1], --count);
+                               *(filename + count) = '\0';
+                               gl_dbg("File Name = %s", filename);
+                       }
+                       if (dir_path != NULL)
+                       {
+                               memcpy(dir_path, &file_path[0], i);     // , i +1 changed to , i
+                               *(dir_path + i) = '\0';
+                               gl_dbg("Directory Name = %s", dir_path);
+                       }
+                       if (dir_name != NULL)
+                       {
+                               count = 0;
+                               for (--i; i >= 0; i--)
+                               {
+                                       count++;
+                                       if (file_path[i] == '/')
+                                       {
+                                               memcpy(dir_name, &file_path[i + 1], --count);
+                                               *(dir_name + count) = '\0';
+                                               gl_dbg("Directory Name = %s", dir_name);
+                                               count = 0;
+                                               return true;
+                                       }
+                               }
+                       }
+                       return true;
+               }
+       }
+
+       return false;
+}
+
+static int _gl_db_elist_ite_fn(Mitem *item, void *user_data)
+{
+       Eina_List **list = (Eina_List **)user_data;
+       *list = eina_list_append(*list, item);
+
+       return 0;
+}
+
+static int _gl_db_cluster_elist_ite_fn(Mcluster *cluster, void *user_data)
+{
+       Eina_List **list = (Eina_List **)user_data;
+       *list = eina_list_append(*list, cluster);
+
+       return 0;
+}
+
+/*
+*  create a gl_item
+*/
+static gl_item *
+_gl_db_new_item(void)
+{
+       // new a gl_item
+       gl_item *gitem = (gl_item *) malloc(sizeof(gl_item));
+       GL_CHECK_NULL(gitem);
+       memset(gitem, 0x00, sizeof(gl_item));
+
+       //initialize gitem
+       gitem->ad = NULL;
+       gitem->checked = false;
+       gitem->check_obj = NULL;
+       gitem->elm_item = NULL;
+       gitem->item = NULL;
+       gitem->_reserved = NULL;
+
+       return gitem;
+}
+
+/*
+*   destroy a gl_item
+*/
+static int
+_gl_db_destroy_item(gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       if (gitem->item)
+       {
+               minfo_destroy_mtype_item(gitem->item);
+               gitem->item = NULL;
+       }
+
+       if (gitem->_reserved)
+       {
+               free(gitem->_reserved);
+               gitem->_reserved = NULL;
+       }
+
+       gitem->checked = false;
+       gitem->check_obj = NULL;
+       gitem->elm_item = NULL;
+
+       free(gitem);
+       gitem = NULL;
+
+       return GL_DB_SUCCESS;
+}
+
+/* Clear eina_list got from DB */
+static int _gl_db_clear_mtype_items_list(Eina_List **elist)
+{
+       void *current = NULL;
+
+       if (elist && *elist) {
+               gl_dbg("Clear Mtype items list.");
+               EINA_LIST_FREE(*elist, current) {
+                       if (current) {
+                               minfo_destroy_mtype_item(current);
+                               current = NULL;
+                       }
+               }
+
+               *elist = NULL;
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+static int
+_gl_db_clear_item_list(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_item *current = NULL;
+       if (ad->maininfo.medias_elist)
+       {
+               Eina_List *item_list = ad->maininfo.medias_elist;
+               EINA_LIST_FREE(item_list, current)
+               {
+                       _gl_db_destroy_item(current);
+                       current = NULL;
+               }
+               ad->maininfo.medias_elist = NULL;
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+int
+_gl_db_free_cluster_all(gl_cluster* gcluster)
+{
+       GL_CHECK_VAL(gcluster, GL_DB_FAIL);
+       GL_CHECK_VAL(gcluster->cluster, GL_DB_FAIL);
+
+       if(gcluster->cluster->display_name)
+       {
+               free(gcluster->cluster->display_name);
+               gcluster->cluster->display_name = NULL;
+       }
+
+       if(gcluster->_reserved)
+       {
+               free(gcluster->_reserved);
+               gcluster->_reserved = NULL;
+       }
+
+       free(gcluster->cluster);
+       gcluster->cluster = NULL;
+       free(gcluster);
+       return GL_DB_SUCCESS;
+}
+
+int
+_gl_db_free_cluster(gl_cluster * gcluster)
+{
+       GL_CHECK_VAL(gcluster, GL_DB_FAIL);
+       if (gcluster->cluster)
+       {
+               minfo_destroy_mtype_item(gcluster->cluster);
+               gcluster->cluster = NULL;
+       }
+       if (gcluster->_reserved)
+       {
+               free(gcluster->_reserved);
+               gcluster->_reserved = NULL;
+       }
+       free(gcluster);
+       return GL_DB_SUCCESS;
+}
+
+static int
+_gl_db_clear_cluster_list(void *data, bool b_force)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *current = NULL;
+       Eina_List *tmp_list = NULL;
+
+       // To reset current album when clear cluster list.
+       ad->albuminfo.current_album = NULL;
+
+       if (ad->albuminfo.cluster_list)
+       {
+               if (ad->albuminfo.cluster_list->clist)
+               {
+                       tmp_list = ad->albuminfo.cluster_list->clist;
+
+                       EINA_LIST_FREE(tmp_list, current)
+                       {
+                               if (current)
+                               {
+                                       gl_db_free_cluster(current);
+                                       current = NULL;
+                               }
+                       }
+                       ad->albuminfo.cluster_list->clist = NULL;
+               }
+
+               if (b_force) {
+                       free(ad->albuminfo.cluster_list);
+                       ad->albuminfo.cluster_list = NULL;
+               }
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+static gl_cluster *_gl_db_new_cluster_all(void *data, int all_item_cnt)
+{
+       gl_dbg("");
+       GL_CHECK_NULL(data);
+       gl_cluster *gcluster = NULL;
+       Mcluster *mcluster = NULL;
+
+       gcluster = gl_db_new_cluster();
+       GL_CHECK_NULL(gcluster);
+
+       mcluster = gl_db_new_mcluster(data, GL_NEW_RECORD_ID);
+       if (mcluster == NULL) {
+               free(gcluster);
+               gcluster = NULL;
+               return NULL;
+       }
+       mcluster->uuid = strdup(GL_ALBUM_ALL_ID);
+       mcluster->count = all_item_cnt;
+       mcluster->display_name = strdup(GL_ALBUM_ALL_NAME);
+       gcluster->ad = data;
+       gcluster->cluster = mcluster;
+       return gcluster;
+}
+
+
+
+static gl_cluster_list *
+_gl_db_new_cluster_list(void)
+{
+       gl_cluster_list *clus_list = (gl_cluster_list *) malloc(sizeof(gl_cluster_list));
+       GL_CHECK_NULL(clus_list);
+       memset(clus_list, 0x00, sizeof(gl_cluster_list));
+       clus_list->clist = NULL;
+       clus_list->cur_pos = 0;
+
+       return clus_list;
+}
+
+static int _gl_db_get_selected_cluster_id_list(void *data, Eina_List **sel_id_list)
+{
+       GL_CHECK_VAL(sel_id_list, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *gcluster = NULL;
+       char *item_id = NULL;
+
+       if (ad->albuminfo.selected_albums_elist == NULL)
+               return 0;
+
+       /* Save ID of selected clusters */
+       EINA_LIST_FREE(ad->albuminfo.selected_albums_elist, gcluster) {
+               if (gcluster && gcluster->cluster && gcluster->cluster->uuid) {
+                       item_id = strdup(gcluster->cluster->uuid);
+                       *sel_id_list = eina_list_append(*sel_id_list,
+                                                       (void *)item_id);
+               }
+       }
+       gl_db_finalize_albums_selected_list(ad);
+       return 0;
+}
+
+/**
+* Some issue about using ecore_file_exists(gitem->item->file_url),
+* if user rename file in Myfile, file_url changed.
+*/
+static int _gl_db_get_selected_item_id_list(void *data, Eina_List **sel_id_list)
+{
+       GL_CHECK_VAL(sel_id_list, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->selectedinfo.medias_elist, -1);
+       gl_item *gitem = NULL;
+       char *item_id = NULL;
+
+       /* Save ID of selected items */
+       EINA_LIST_FREE(ad->selectedinfo.medias_elist, gitem) {
+               if (gitem && gitem->item && gitem->item->uuid) {
+                       item_id = strdup(gitem->item->uuid);
+                       *sel_id_list = eina_list_append(*sel_id_list,
+                                                       (void *)item_id);
+               }
+       }
+
+       gl_db_selected_list_finalize(ad);
+       return 0;
+}
+
+/* Check ID is in the list or not */
+static bool _gl_db_check_selected_id(Eina_List **sel_id_list, const char *id)
+{
+       GL_CHECK_FALSE(sel_id_list);
+       Eina_List *tmp_elist = NULL;
+       void *p_id = NULL;
+       GL_CHECK_FALSE(id);
+
+       if (eina_list_count(*sel_id_list) == 0) {
+               gl_dbgE("sel_id_list is empty!");
+               return false;
+       }
+
+       EINA_LIST_FOREACH(*sel_id_list, tmp_elist, p_id) {
+               if (p_id == NULL) {
+                       gl_dbgE("Invalid p_id!");
+                       continue;
+               }
+               /* Get next one if they wasn't equal */
+               if (g_strcmp0(id, (char *)p_id)) {
+                       p_id = NULL;
+                       continue;
+               }
+               *sel_id_list = eina_list_remove(*sel_id_list, p_id);
+               free(p_id);
+               p_id = NULL;
+               return true;
+       }
+       return false;
+}
+
+/* Free list of selected IDs */
+static int __gl_db_free_selected_id_list(Eina_List **sel_id_list)
+{
+       GL_CHECK_VAL(sel_id_list, -1);
+       if (*sel_id_list == NULL) {
+               gl_dbg("sel_id_list is empty!");
+               return -1;
+       }
+
+       void *p_id = NULL;
+       EINA_LIST_FREE(*sel_id_list, p_id) {
+               if (p_id == NULL) {
+                       gl_dbgE("Invalid p_id!");
+                       continue;
+               }
+               free(p_id);
+               p_id = NULL;
+       }
+       *sel_id_list = NULL;
+       return 0;
+}
+
+static int _gl_db_get_cluster_list(void *data, bool b_update)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int length = 0;
+       int local_item_cnt = 0;
+       Eina_List *item_list = NULL;
+       Mcluster *f_data = NULL;
+       gl_cluster *default_cluster = NULL;
+       int err = -1;
+       int edit_album_cnt = 0;
+       minfo_cluster_filter filter;
+       Mcluster *new_mc = NULL;
+       Eina_List *sel_id_list = NULL;
+       bool b_selected = false;
+       char new_mc_id[GL_MTYPE_ITEN_ID_LEN_MAX] = { 0, };
+       char sel_id[GL_MTYPE_ITEN_ID_LEN_MAX] = { 0, };
+
+       if (b_update) {
+               gl_dbg("Update mode.");
+               gl_cluster *album_item = ad->albuminfo.selected_album;
+               if (album_item && album_item->cluster &&
+                   album_item->cluster->uuid) {
+                       g_strlcpy(sel_id, album_item->cluster->uuid,
+                                 GL_MTYPE_ITEN_ID_LEN_MAX);
+                       gl_dbg("Save selected album ID: %s.", sel_id);
+               }
+               ad->albuminfo.selected_album = NULL;
+               /* Get selected cluster IDs list */
+               _gl_db_get_selected_cluster_id_list(ad, &sel_id_list);
+               /* Clear cluster list */
+               _gl_db_clear_cluster_list(ad, false);
+       }
+
+       memset(&filter,0x00,sizeof(minfo_cluster_filter));
+       //ad->new_album_name is the cluster name of newly created album
+       //in moving medias to new album case.
+       if (strlen(ad->albuminfo.new_album_name))
+       {
+               memset(ad->albuminfo.new_album_name, 0x00, GL_ALBUM_NAME_LEN_MAX);
+               //get Mcluster from DB via folder full path(URL).
+               err = minfo_get_cluster(ad->maininfo.db_handle,
+                                       ad->albuminfo.dest_folder, NULL, &new_mc);
+               if (err < 0)
+               {
+                       gl_dbgE("minfo_get_cluster fail: %d", err);
+               }
+               else if (new_mc->count == 0)
+               {
+                       //media records of this cluster havn't been inserted to DB.
+                       //save the cluster ID.
+                       //update cluster item count while refresh albums view in _gl_albums_get_label().
+                       gl_dbg("Get newly created Mcluster, url: %s.", ad->albuminfo.dest_folder);
+                       g_strlcpy(new_mc_id, new_mc->uuid,
+                                 GL_MTYPE_ITEN_ID_LEN_MAX);
+                       minfo_destroy_mtype_item(new_mc);
+               }
+       }
+
+       //get real albums
+       filter.cluster_type = MINFO_CLUSTER_TYPE_ALL;
+       filter.sort_type = MINFO_CLUSTER_SORT_BY_NAME_ASC;
+       filter.start_pos = GL_GET_ALL_RECORDS;
+       filter.end_pos = GL_GET_ALL_RECORDS;
+
+       err = minfo_get_cluster_list(ad->maininfo.db_handle, filter,
+                                       _gl_db_cluster_elist_ite_fn, &item_list);
+       if (err == MB_SVC_ERROR_DB_NO_RECORD)
+       {
+               gl_dbg("No record!");
+               ad->albuminfo.cluster_list->clist = NULL;
+               if (item_list)
+                       _gl_db_clear_mtype_items_list(&item_list);
+               /* Continue to add AllShare album */
+       }
+       else if (err < 0)
+       {
+               gl_dbg("Failed to get cluster list!");
+               if (item_list)
+                       _gl_db_clear_mtype_items_list(&item_list);
+               /* Continue to add AllShare album */
+       }
+
+       gl_cluster *gcluster = NULL;
+       EINA_LIST_FREE(item_list, f_data) {
+               if (f_data == NULL || f_data->uuid == NULL) {
+                       gl_dbgE("Invalid Mcluster!");
+                       continue;
+               }
+               gl_dbg("folder id: %s.", f_data->uuid);
+
+               /**
+               * There are Phone and other filters in libmedia-info,
+               * but they are seperated, if we want to get  phone
+               * only we can use is MINFO_CLUSTER_TYPE_ALL,
+               * and add condition checking to skip MMC albums.
+               *
+               * To skip MMC albums if MMC already unmounted,
+               * in case of delay updating in DB.
+               */
+               if ((ad->maininfo.mmc_state == GL_MMC_STATE_REMOVED_MOVING ||
+                    ad->maininfo.mmc_state == GL_MMC_STATE_REMOVED) &&
+                   f_data->type == MINFO_MMC) {
+                       gl_dbgW("MMC was unmounted, skip MMC album!");
+                       minfo_destroy_mtype_item(f_data);
+                       continue;
+               }
+
+               if (f_data->count == 0) {
+                       /* append the newly created cluster to list */
+                       if (!g_strcmp0(f_data->uuid, new_mc_id)) {
+                               gl_dbg("empty local album, but it's newly created...");
+                       } else {
+                               gl_dbg("empty local album, skipping it...");
+                               minfo_destroy_mtype_item(f_data);
+                               continue;
+                       }
+               }
+               local_item_cnt += f_data->count;
+
+               gcluster = NULL;
+               gcluster = gl_db_new_cluster();
+               if (gcluster == NULL) {
+                       gl_dbgE("gl_db_new_cluster failed!");
+                       minfo_destroy_mtype_item(f_data);
+                       continue;
+               }
+
+               gcluster->ad = ad;
+               gcluster->cluster = f_data;
+               length += f_data->count;
+
+               if (gl_db_is_default_album(ad, f_data))
+               {
+                       /**
+                       * Default album: Camera Shot
+                       * Now Camera Shot is located in Phone.
+                       * If user can determine the location of default album,
+                       * here we should get the path and check it's in Phone or MMC.
+                       */
+                       default_cluster = gcluster;
+                       ad->albuminfo.cluster_list->clist = eina_list_prepend(ad->albuminfo.cluster_list->clist,
+                                                                                                       gcluster);
+               }
+               else
+               {
+                       ad->albuminfo.cluster_list->clist = eina_list_append(ad->albuminfo.cluster_list->clist,
+                                                                                                       gcluster);
+               }
+               /* Default album 'Camera shots' showed in edit view */
+               edit_album_cnt++;
+
+               if (sel_id_list) {
+                       b_selected = _gl_db_check_selected_id(&sel_id_list,
+                                                             f_data->uuid);
+                       if (b_selected) {
+                               b_selected = false;
+                               /* Set checkbox state */
+                               gcluster->checked = true;
+                               /* Append gcluster to selected list */
+                               gl_db_albums_selected_list_append(ad, gcluster);
+                       }
+               }
+               if (strlen(sel_id) > 0 && !g_strcmp0(sel_id, f_data->uuid)) {
+                       gl_dbgW("Found selected_album.");
+                       ad->albuminfo.selected_album = gcluster;
+               }
+       }
+
+       /* Clear list of selected ID */
+       if (sel_id_list)
+               __gl_db_free_selected_id_list(&sel_id_list);
+
+       ad->albuminfo.cluster_list->edit_cnt = edit_album_cnt;
+       /**
+       * add "all" album, only inclduing local albums temporarily,
+       */
+       if (local_item_cnt) {
+               /* Create "All albums" album if any local file exists */
+               gcluster = _gl_db_new_cluster_all(ad, local_item_cnt);
+               if (gcluster == NULL) {
+                       gl_dbgE("_gl_db_new_cluster_all failed!");
+                       _gl_db_clear_cluster_list(ad, false);
+                       return -1;
+               }
+
+               if (default_cluster)
+                       ad->albuminfo.cluster_list->clist = eina_list_append_relative(ad->albuminfo.cluster_list->clist,
+                                                                                                       gcluster, default_cluster);
+               else
+                       ad->albuminfo.cluster_list->clist = eina_list_prepend(ad->albuminfo.cluster_list->clist,
+                                                                                                       gcluster);
+
+               default_cluster = gcluster;
+       }
+
+       gl_dbg("Cluster Done.");
+       return length;
+}
+
+/*
+*  get a new item from media service by item id
+*/
+Mitem *gl_db_new_mitem(void *data, const char *item_id)
+{
+       GL_CHECK_NULL(data);
+       Mitem *mitem = NULL;
+       gl_appdata *ad = (gl_appdata *)data;
+       /*new API, to use media id to get item.  */
+       minfo_get_item_by_id(ad->maininfo.db_handle, item_id, &mitem);
+
+       return mitem;
+}
+
+gl_item *
+gl_db_new_item_mitem(Mitem * mitem)
+{
+       gl_item *gitem = _gl_db_new_item();
+       GL_CHECK_NULL(gitem);
+       gitem->item = mitem;
+
+       return gitem;
+}
+
+/*
+*   get a new cluster from media service by cluster id
+*/
+Mcluster *gl_db_new_mcluster(void *data, const char *cluster_id)
+{
+       gl_dbg("cluster_id=%s", cluster_id);
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Mcluster *mcluster = NULL;
+       int ret = -1;
+       ret = minfo_get_cluster(ad->maininfo.db_handle, NULL, cluster_id, &mcluster);
+       if (ret != 0)
+       {
+               gl_dbgE("minfo_get_cluster failed (ret=%d)", ret);
+               if (mcluster)
+               {
+                       minfo_destroy_mtype_item(mcluster);
+               }
+
+               return NULL;
+       }
+
+       return mcluster;
+}
+
+gl_cluster *
+gl_db_new_cluster(void)
+{
+       gl_cluster *gcluster = (gl_cluster *) malloc(sizeof(gl_cluster));
+       GL_CHECK_NULL(gcluster);
+       memset(gcluster, 0x00, sizeof(gl_cluster));
+       gcluster->cluster = NULL;
+       gcluster->index = 0;
+       gcluster->item = NULL;
+       gcluster->checked = false;
+       gcluster->ad = NULL;
+       gcluster->_reserved = NULL;
+
+       return gcluster;
+}
+
+int
+gl_db_clear_item_list(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       _gl_db_clear_item_list(data);
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_free_cluster(gl_cluster * gcluster)
+{
+       GL_CHECK_VAL(gcluster, GL_DB_FAIL);
+
+       if (gcluster->cluster && gcluster->cluster->uuid &&
+           !g_strcmp0(gcluster->cluster->uuid, GL_ALBUM_ALL_ID))
+       {
+               _gl_db_free_cluster_all(gcluster);
+       }
+       else
+       {
+               _gl_db_free_cluster(gcluster);
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+bool
+gl_db_get_cluster_list(void *data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int n_entire_items = 0;
+
+       _gl_db_clear_cluster_list(ad, true);
+
+       ad->albuminfo.cluster_list = _gl_db_new_cluster_list();
+       GL_CHECK_FALSE(ad->albuminfo.cluster_list);
+       n_entire_items = _gl_db_get_cluster_list(ad, false);
+       if (n_entire_items <= 0)        //if error code is returned, negative value is possible
+       {
+               return false;
+       }
+       gl_dbg("cluster-length:%d", n_entire_items);
+
+       return true;
+}
+
+int gl_db_update_cluster_list(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int len = 0;
+
+       len = _gl_db_get_cluster_list(ad, true);
+       gl_dbg("Cluster list length: %d.", len);
+       if (len <= 0)
+               return GL_DB_FAIL;
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_cluster_list_remove(void *data, gl_cluster * item)
+{
+       GL_CHECK_VAL(item, GL_DB_FAIL);
+       GL_CHECK_VAL(item->cluster, GL_DB_FAIL);
+       GL_CHECK_VAL(item->cluster->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *current = NULL;
+       Eina_List *l = NULL;
+
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, GL_DB_FAIL);
+       GL_CHECK_VAL(ad->albuminfo.cluster_list->clist, GL_DB_FAIL);
+       Eina_List *cluster_list = ad->albuminfo.cluster_list->clist;
+       EINA_LIST_FOREACH(cluster_list, l, current)
+       {
+               if (current == NULL || current->cluster == NULL ||
+                   current->cluster->uuid == NULL) {
+                       gl_dbgE("Invalid album item!");
+                       continue;
+               }
+
+               if (!g_strcmp0(current->cluster->uuid, item->cluster->uuid))
+               {
+                       ad->albuminfo.cluster_list->clist = eina_list_remove(ad->albuminfo.cluster_list->clist,
+                                                                                                       current);
+                       gl_db_free_cluster(current);
+                       break;
+               }
+               current = NULL;
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+int gl_db_get_cluster_by_id(void *data, const char *cluster_id, gl_cluster **cluster, int *pos)
+{
+       GL_CHECK_VAL(data, -1);
+       GL_CHECK_VAL(pos, -1);
+       GL_CHECK_VAL(cluster, -1);
+       GL_CHECK_VAL(cluster_id, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       gl_cluster *current = NULL;
+
+       *cluster = NULL;
+       *pos = 0;
+
+       GL_CHECK_VAL(ad->albuminfo.cluster_list, -1);
+       int length = eina_list_count(ad->albuminfo.cluster_list->clist);
+       gl_dbg("album length: %d, current album id: %s", length, cluster_id);
+
+       for (i = 0; i < length; i++) {
+               current = eina_list_nth(ad->albuminfo.cluster_list->clist, i);
+               if (current && current->cluster && current->cluster->uuid) {
+                       gl_dbg("cluster : %s", current->cluster->display_name);
+               } else {
+                       gl_dbg("cluster is NULL");
+                       break;
+               }
+
+               if (!g_strcmp0(current->cluster->uuid, cluster_id)) {
+                       *pos = i;
+                       *cluster = current;
+                       gl_dbg("Find album: %s", current->cluster->display_name);
+                       return 0;
+               }
+       }
+       return 0;
+}
+
+//add a new cluster whose url is 'cluster_url'.
+int
+gl_db_add_cluster(void *data, char *cluster_url)
+{
+       GL_CHECK_VAL(cluster_url, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       int ret = -1;
+
+       char cluster_id[GL_MTYPE_ITEN_ID_LEN_MAX] = { 0, };
+       ret = minfo_add_cluster(ad->maininfo.db_handle, cluster_url, cluster_id,
+                               GL_MTYPE_ITEN_ID_LEN_MAX);
+       if (ret < 0)
+       {
+               gl_dbgE("minfo_add_cluster failed, ret: %d", ret);
+       }
+       return GL_DB_SUCCESS;
+}
+
+/* Get new record from DB to check mitem exists or was already removed */
+bool gl_db_exists_item(void *data, const char *id)
+{
+       GL_CHECK_NULL(data);
+       GL_CHECK_FALSE(id);
+       gl_appdata *ad = (gl_appdata *)data;
+       Mitem *new_item = gl_db_new_mitem(ad, id);
+       if (new_item == NULL) {
+               gl_dbgW("Mitem doesn't exist!");
+               return false;
+       } else {
+               minfo_destroy_mtype_item(new_item);
+               new_item = NULL;
+               return true;
+       }
+}
+
+/**
+* Get medias count of album.
+*/
+int gl_db_get_item_cnt(void *data, const char *cluster_id, int *item_cnt)
+{
+       GL_CHECK_VAL(item_cnt, GL_DB_FAIL);
+       GL_CHECK_VAL(cluster_id, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       int err = -1;
+       gl_dbg("cluster_id: %s.", cluster_id);
+
+       if (g_strcmp0(cluster_id, GL_ALBUM_ALL_ID)) {
+               /* It's normal album */
+               minfo_item_filter filter;
+               memset(&filter, 0x00, sizeof(minfo_item_filter));
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+               filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+               filter.start_pos = GL_GET_ALL_RECORDS;
+               filter.end_pos = GL_GET_ALL_RECORDS;
+               filter.with_meta = false;
+
+               err = minfo_get_item_cnt(ad->maininfo.db_handle, cluster_id,
+                                               filter, item_cnt);
+       } else {
+               /* All albums */
+               gl_dbg("All albums media count.");
+               gl_dbg("All albums media count.");
+               err = minfo_get_all_item_count(ad->maininfo.db_handle,
+                                                  MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                  MINFO_ITEM_ALL,
+                                                  MINFO_MEDIA_FAV_ALL, item_cnt);
+       }
+
+       if (err < 0) {
+               gl_dbg("Failed to get item count[err: %d]!", err);
+               return GL_DB_FAIL;
+       }
+
+       gl_dbg("Item count: %d.", *item_cnt);
+       return GL_DB_SUCCESS;
+}
+
+int gl_db_update_item_cnt(gl_cluster * album)
+{
+       GL_CHECK_VAL(album, GL_DB_FAIL);
+       GL_CHECK_VAL(album->cluster, GL_DB_FAIL);
+       int item_count = 0;
+       int err = GL_DB_FAIL;
+       GL_CHECK_VAL(album->cluster->uuid, GL_DB_FAIL);
+       err = gl_db_get_item_cnt(album->ad, album->cluster->uuid, &item_count);
+       if (err != GL_DB_SUCCESS) {
+               gl_dbg("gl_db_get_item_cnt failed!");
+               album->cluster->count = 0;
+               return GL_DB_FAIL;
+       }
+
+       gl_dbg("Media count: old=%d, new=%d", album->cluster->count,
+              item_count);
+       album->cluster->count = item_count;
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_get_item_list(void *data,
+               gl_cluster * album,
+               int start_pos,
+               int end_pos)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Eina_List *itemlist = NULL;
+       minfo_item_filter filter;
+       int err = -1;
+       minfo_file_type file_type;
+
+       file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO; /* default */
+       /* get file-type from bundle when launched by appsvc */
+       if (ad->albuminfo.aul_launch_type == GL_AUL_T_VIEW_ALBUM) {
+               if (ad->albuminfo.aul_file_type == GL_AUL_FILE_T_IMAGE) {
+                       file_type = MINFO_ITEM_IMAGE;
+               } else if (ad->albuminfo.aul_file_type == GL_AUL_FILE_T_VIDEO) {
+                       file_type = MINFO_ITEM_VIDEO;
+               }
+       }
+
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       GL_CHECK_VAL(album, GL_DB_FAIL);
+       GL_CHECK_VAL(album->cluster, GL_DB_FAIL);
+       gl_dbg("db_get_item_list--folder category; start_pos[%d], end_pos[%d]\n",
+               start_pos, end_pos);
+
+       GL_CHECK_VAL(album->cluster->uuid, GL_DB_FAIL);
+       /* Real album */
+       if (g_strcmp0(album->cluster->uuid, GL_ALBUM_ALL_ID))
+       {
+               filter.file_type = file_type;
+               filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+               filter.start_pos = start_pos;
+               filter.end_pos = end_pos;
+               filter.with_meta = true;
+
+               ad->uginfo.sort_type = filter.sort_type;
+
+               if (start_pos == (GL_FIRST_VIEW_END_POS + 1) &&
+                       end_pos == GL_GET_UNTIL_LAST_RECORD)
+               {
+                       /* Keep medias_elist and medias_cnt unchanged */
+                       gl_dbg("Gridview append idler; Keep medias_elist unchanged.");
+               }
+               else
+               {
+                       /*Clear item list before new one got */
+                       _gl_db_clear_item_list(ad);
+               }
+
+               err = minfo_get_item_list(ad->maininfo.db_handle,
+                                               album->cluster->uuid, filter,
+                                               _gl_db_elist_ite_fn, &itemlist);
+       }
+       else            //add "All" album
+       {
+               gl_dbg("db_get_item_list--all media\n");
+               filter.file_type = file_type;
+               filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+               filter.start_pos = start_pos;
+               filter.end_pos = end_pos;
+               filter.with_meta = true;
+
+               ad->uginfo.sort_type = filter.sort_type;
+
+               if (start_pos == (GL_FIRST_VIEW_END_POS + 1) &&
+                       end_pos == GL_GET_UNTIL_LAST_RECORD)
+               {
+                       /* Keep medias_elist and medias_cnt unchanged */
+                       gl_dbg("Gridview append idler; Keep medias_elist unchanged.");
+               }
+               else
+               {
+                       /* Clear item list before new one got */
+                       _gl_db_clear_item_list(ad);
+               }
+
+               err = minfo_get_all_item_list(ad->maininfo.db_handle,
+                                                 MINFO_CLUSTER_TYPE_LOCAL_ALL, filter,
+                                             _gl_db_elist_ite_fn,
+                                             &itemlist);
+       }
+
+       gl_dbg("Error code: %d", err);
+       if ((err == 0) && (itemlist != NULL))
+       {
+               Mitem *item = NULL;
+               gl_item *gitem = NULL;
+               EINA_LIST_FREE(itemlist, item)
+               {
+                       if (item == NULL || item->uuid == NULL) {
+                               gl_dbgE("Invalid item!");
+                               continue;
+                       }
+
+                       gitem = _gl_db_new_item();
+                       if (gitem == NULL) {
+                               gl_dbgE("_gl_db_new_item failed!");
+                               minfo_destroy_mtype_item(gitem);
+                               continue;
+                       }
+
+                       gitem->ad = ad;
+                       gitem->item = item;
+                       ad->maininfo.medias_elist = eina_list_append(ad->maininfo.medias_elist, gitem);
+
+                       item = NULL;
+                       gitem = NULL;
+               }
+
+               ad->maininfo.medias_cnt = eina_list_count(ad->maininfo.medias_elist);
+               gl_dbg("medias_elist=%p", ad->maininfo.medias_elist);
+       }
+       else
+       {
+               ad->maininfo.medias_cnt = 0;
+               if (start_pos == (GL_FIRST_VIEW_END_POS + 1) &&
+                       end_pos == GL_GET_UNTIL_LAST_RECORD)
+               {
+                       /* Keep medias_elist and medias_cnt unchanged */
+                       ad->maininfo.medias_cnt = eina_list_count(ad->maininfo.medias_elist);
+                       gl_dbg("Gridview append idler; medias_elist=%p",
+                              ad->maininfo.medias_elist);
+               }
+               else
+               {
+                       ad->maininfo.medias_elist = NULL;
+               }
+
+               if (itemlist)
+                       _gl_db_clear_mtype_items_list(&itemlist);
+       }
+
+       gl_dbg("DB all count : %d", ad->maininfo.medias_cnt);
+       return err;
+}
+
+int gl_db_update_item_list(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Eina_List *itemlist = NULL;
+       minfo_item_filter filter;
+       int err = -1;
+       int view_mode = gl_get_view_mode(ad);
+       Eina_List *sel_id_list = NULL;
+       gl_item *gitem = NULL;
+
+       memset(&filter, 0x00, sizeof(minfo_item_filter));
+
+       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               gl_dbg("Edit view.");
+               /* Get ID list of selected items */
+               _gl_db_get_selected_item_id_list(ad, &sel_id_list);
+       }
+
+       gl_cluster *cur_album = ad->albuminfo.current_album;
+       GL_CHECK_VAL(cur_album, -1);
+       GL_CHECK_VAL(cur_album->cluster, -1);
+       GL_CHECK_VAL(cur_album->cluster->uuid, -1);
+
+       filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+       filter.sort_type = MINFO_MEDIA_SORT_BY_DATE_DESC;
+       filter.start_pos = GL_GET_ALL_RECORDS;
+       filter.end_pos = GL_GET_ALL_RECORDS;
+       filter.with_meta = true;
+
+       ad->uginfo.sort_type = filter.sort_type;
+       /* Clear item list before new one got */
+       _gl_db_clear_item_list(ad);
+
+       if (!g_strcmp0(cur_album->cluster->uuid, GL_ALBUM_ALL_ID)) {
+               gl_dbg("All albums medias");
+               int cluster_t = MINFO_CLUSTER_TYPE_LOCAL_ALL;
+               err = minfo_get_all_item_list(ad->maininfo.db_handle,
+                                                       cluster_t, filter,
+                                                       _gl_db_elist_ite_fn,
+                                                       &itemlist);
+       } else {
+               gl_dbg("Normal album medias");
+               err = minfo_get_item_list(ad->maininfo.db_handle,
+                                               cur_album->cluster->uuid,
+                                               filter, _gl_db_elist_ite_fn,
+                                               &itemlist);
+       }
+
+       gl_dbg("Error code: %d", err);
+       if ((err != 0) || (itemlist == NULL)) {
+               gl_dbgE("(err != 0) || (itemlist == NULL)");
+               ad->maininfo.medias_cnt = 0;
+               ad->maininfo.medias_elist = NULL;
+               /* Clear list of selected ID */
+               if (sel_id_list) {
+                       eina_list_free(sel_id_list);
+                       sel_id_list = NULL;
+               }
+
+               if (itemlist)
+                       _gl_db_clear_mtype_items_list(&itemlist);
+
+               return err;
+       }
+
+       bool b_selected = false;
+       Mitem *item = NULL;
+       Eina_List *medias_elist = NULL;
+       EINA_LIST_FREE(itemlist, item) {
+               if (item == NULL || item->uuid == NULL) {
+                       gl_dbgE("Invalid item!");
+                       continue;
+               }
+               gitem = _gl_db_new_item();
+               if (gitem == NULL) {
+                       gl_dbgE("_gl_db_new_item failed!");
+                       minfo_destroy_mtype_item(gitem);
+                       continue;
+               }
+               gitem->ad = ad;
+               gitem->item = item;
+               /* Append item to medias_elist */
+               medias_elist = eina_list_append(ad->maininfo.medias_elist,
+                                               gitem);
+               ad->maininfo.medias_elist = medias_elist;
+
+               if (sel_id_list) {
+                       b_selected = _gl_db_check_selected_id(&sel_id_list,
+                                                             item->uuid);
+                       if (b_selected) {
+                               b_selected = false;
+                               /* Set checkbox state */
+                               gitem->checked = true;
+                               /* Append gitem to selected list */
+                               gl_db_selected_list_append(ad, gitem);
+                       }
+               }
+       }
+
+       /* Clear list of selected ID */
+       if (sel_id_list)
+               __gl_db_free_selected_id_list(&sel_id_list);
+
+       ad->maininfo.medias_cnt = eina_list_count(ad->maininfo.medias_elist);
+       gl_dbg("All medias count:%d.", ad->maininfo.medias_cnt);
+       return err;
+}
+
+int
+gl_db_get_first_several_items(gl_cluster * album,
+       gl_item * items[], int *item_count,
+       minfo_media_sort_type sort_type)
+{
+       GL_CHECK_VAL(items, GL_DB_FAIL);
+       GL_CHECK_VAL(item_count, GL_DB_FAIL);
+       GL_CHECK_VAL(album, GL_DB_FAIL);
+       GL_CHECK_VAL(album->cluster, GL_DB_FAIL);
+       GL_CHECK_VAL(album->cluster->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(album->ad, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)album->ad;
+       minfo_item_filter filter;
+       Eina_List *item_list = NULL;
+       int result_cnt = 0;
+       Mitem *item = NULL;
+       gl_item *gitem = NULL;
+       int err = -1;
+
+       if (*item_count <= 0)
+       {
+               return 0;
+       }
+       memset(&filter,0x00,sizeof(minfo_item_filter));
+       if (g_strcmp0(album->cluster->uuid, GL_ALBUM_ALL_ID) )  //real album
+       {
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+               filter.sort_type = sort_type;
+               filter.start_pos = GL_FIRST_VIEW_START_POS;
+               filter.end_pos = (*item_count == 1 ? 1 : (*item_count - 1));
+               filter.with_meta = false;
+
+               err = minfo_get_item_list(ad->maininfo.db_handle,
+                                               album->cluster->uuid, filter,
+                                               _gl_db_elist_ite_fn, &item_list);
+               if (err != 0 || item_list == NULL) {
+                       gl_dbgE("minfo_get_item_list failed : err=%d", err);
+                       *item_count = 0;
+                       if (item_list)
+                               _gl_db_clear_mtype_items_list(&item_list);
+                       return GL_DB_FAIL;
+               }
+
+               EINA_LIST_FREE(item_list, item) {
+                       if (item == NULL) {
+                               gl_dbgE("Invalid Mitem!");
+                               continue;
+                       }
+                       result_cnt++;
+                       if(result_cnt <= *item_count) {
+                               gitem = NULL;
+                               gitem = _gl_db_new_item();
+                               if (gitem == NULL) {
+                                       gl_dbgE("_gl_db_new_item failed!");
+                                       minfo_destroy_mtype_item(gitem);
+                                       result_cnt--;
+                                       continue;
+                               }
+                               gitem->item = item;
+                               gitem->ad = ad;
+                               items[result_cnt-1] = gitem;
+                       } else {
+                               minfo_destroy_mtype_item(item);
+                       }
+                       item = NULL;
+               }
+
+               if(*item_count > result_cnt)
+                       *item_count = result_cnt;
+       }
+       else                    //add "All" album
+       {
+               gl_dbg("db_get_item_list--all media\n");
+               filter.file_type = MINFO_ITEM_IMAGE | MINFO_ITEM_VIDEO;
+               filter.sort_type = sort_type;
+
+               filter.start_pos = GL_FIRST_VIEW_START_POS;
+               filter.end_pos = (*item_count == 1 ? 1 : (*item_count - 1));
+               filter.with_meta = false;
+
+               //use new api to get all local files, mmc status checking would be done in new apis
+               err = minfo_get_all_item_list(ad->maininfo.db_handle,
+                                                       MINFO_CLUSTER_TYPE_LOCAL_ALL,
+                                                       filter, _gl_db_elist_ite_fn,
+                                                       &item_list);
+               if (err != 0 || item_list == NULL) {
+                       gl_dbgE("minfo_get_item_list fails : err=%d", err);
+                       *item_count = 0;
+                       if (item_list)
+                               _gl_db_clear_mtype_items_list(&item_list);
+
+                       return GL_DB_FAIL;
+               }
+
+               EINA_LIST_FREE(item_list, item) {
+                       if (item == NULL) {
+                               gl_dbgE("Invalid Mitem!");
+                               continue;
+                       }
+                       result_cnt++;
+                       if(result_cnt <= *item_count) {
+                               gitem = NULL;
+                               gitem = _gl_db_new_item();
+                               if (gitem == NULL) {
+                                       gl_dbgE("_gl_db_new_item failed!");
+                                       minfo_destroy_mtype_item(gitem);
+                                       result_cnt--;
+                                       continue;
+                               }
+                               gitem->item = item;
+                               gitem->ad = ad;
+                               items[result_cnt-1] = gitem;
+                       } else {
+                               minfo_destroy_mtype_item(item);
+                       }
+                       item = NULL;
+               }
+
+               if(*item_count > result_cnt)
+                       *item_count = result_cnt;
+       }
+
+       if (*item_count)
+       {
+               gl_dbg("first %d items for this album(%s)",
+                       *item_count, album->cluster->display_name);
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+bool
+gl_db_is_item_cnt_zero(void *data, minfo_file_type type)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       gl_item *gitem = NULL;
+
+       /* Get all medias count of current album */
+       int all_cnt = ad->maininfo.medias_cnt;
+       for (i = 1; i <= all_cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem && gitem->item)
+               {
+                       if (gitem->item->type == type)
+                       {
+                               return false;
+                       }
+               }
+       }
+
+       gl_dbg(" item_cnt = 0 ");
+       return true;
+}
+
+int
+gl_db_destroy_item(gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       _gl_db_destroy_item(gitem);
+       return GL_DB_SUCCESS;
+}
+
+/**
+* select_mode: true, get item from selected_media_elist; false, get item from media_elist.
+*/
+int
+gl_db_get_item_by_index(void *data, int idx, bool select_mode, gl_item ** gitem)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (!select_mode) {
+               if (idx > ad->maininfo.medias_cnt) {
+                       gl_dbg("db_get_item_by_index(%d) is failed, ad->maininfo.medias_cnt=%d\n",
+                               idx, ad->maininfo.medias_cnt);
+                       *gitem = NULL;
+                       return GL_DB_FAIL;
+               }
+
+               *gitem = eina_list_nth(ad->maininfo.medias_elist, idx - 1);
+       } else {
+               Eina_List *sel_list = ad->selectedinfo.medias_elist;
+               *gitem = (gl_item *) eina_list_nth(sel_list, --idx);
+       }
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_item_list_remove(void *data, gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_item *current = NULL;
+       Eina_List *l = NULL;
+
+       Eina_List *media_elist = ad->maininfo.medias_elist;
+       EINA_LIST_FOREACH(media_elist, l, current)
+       {
+               if (current == NULL || current->item == NULL ||
+                   current->item->uuid == NULL) {
+                       gl_dbgE("Invalid gitem!");
+                       continue;
+               }
+
+               if (!g_strcmp0(current->item->uuid, gitem->item->uuid))
+               {
+                       ad->maininfo.medias_elist = eina_list_remove(ad->maininfo.medias_elist, current);
+
+                       ad->maininfo.medias_cnt--;
+                       gl_db_destroy_item(current);
+                       break;
+               }
+               current = NULL;
+       }
+
+       return 0;
+}
+
+/* Remove file from DB and file system */
+int gl_db_remove_item(gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->ad, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       int ret = -1;
+
+       if (!gitem->item->file_url) {
+               gl_dbgW("Invalid file_url!");
+               ret = minfo_delete_media_id(ad->maininfo.db_handle, gitem->item->uuid);
+               if (ret != 0) {
+                       gl_dbgE("minfo_delete_media_id failed[%d]!", ret);
+                       return GL_DB_FAIL;
+               } else {
+                       return GL_DB_SUCCESS;
+               }
+       }
+       gl_dbg("Remove file: %s.", gitem->item->file_url);
+       /* Delete record from DB then delete media from file system */
+       ret = minfo_delete_media(ad->maininfo.db_handle, gitem->item->file_url);
+       if (ret != 0) {
+               gl_dbgE("minfo_delete_media failed[%d]!", ret);
+               return GL_DB_FAIL;
+       }
+
+       if (!ecore_file_unlink(gitem->item->file_url)) {
+               gl_dbgE("ecore_file_unlink failed!");
+               return GL_DB_FAIL;
+       }
+       return GL_DB_SUCCESS;
+}
+
+/* Append gl_item to medias_elist */
+int
+gl_db_append_item(void *data, gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gitem->ad = ad;
+       ad->maininfo.medias_elist = eina_list_append(ad->maininfo.medias_elist, gitem);
+       ad->maininfo.medias_cnt++;
+
+       return 0;
+}
+
+gl_item *
+gl_db_selected_list_get_nth(void *data, int idx)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       return eina_list_nth(ad->selectedinfo.medias_elist, idx);
+}
+
+int
+gl_db_selected_list_append(void *data, gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* Update selected images count */
+       if (gitem->item->type == MINFO_ITEM_IMAGE)
+               ad->selectedinfo.images_cnt++;
+
+       Eina_List *sel_list = ad->selectedinfo.medias_elist;
+       sel_list = eina_list_append(sel_list, gitem);
+       ad->selectedinfo.medias_elist = sel_list;
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_selected_list_remove(void *data, gl_item * gitem)
+{
+       GL_CHECK_VAL(gitem, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item, GL_DB_FAIL);
+       GL_CHECK_VAL(gitem->item->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_item *current = NULL;
+       Eina_List *l = NULL;
+
+       Eina_List *sel_list = ad->selectedinfo.medias_elist;
+       EINA_LIST_FOREACH(sel_list, l, current) {
+               if (current == NULL || current->item == NULL ||
+                   current->item->uuid == NULL) {
+                       gl_dbgE("Invalid gitem!");
+                       continue;
+               }
+               if (!g_strcmp0(current->item->uuid, gitem->item->uuid)) {
+                       /* Update selected images count */
+                       if (current->item->type == MINFO_ITEM_IMAGE &&
+                           ad->selectedinfo.images_cnt > 0)
+                               ad->selectedinfo.images_cnt--;
+
+                       sel_list = eina_list_remove(sel_list, current);
+                       ad->selectedinfo.medias_elist = sel_list;
+                       break;
+               }
+               current = NULL;
+       }
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_selected_list_finalize(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_item *gitem = NULL;
+
+       Eina_List *sel_list = ad->selectedinfo.medias_elist;
+       EINA_LIST_FREE(sel_list, gitem) {
+               if (gitem)
+                       gitem->checked = false;
+       }
+
+       ad->selectedinfo.medias_elist = NULL;
+       ad->selectedinfo.images_cnt = 0;
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_selected_list_count(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       return eina_list_count(ad->selectedinfo.medias_elist);
+}
+
+/*
+*   get full path of cluster
+*/
+int gl_db_get_folder_fullpath(void *data, const char *cluster_id, char *path)
+{
+       GL_CHECK_VAL(path, GL_DB_FAIL);
+       GL_CHECK_VAL(cluster_id, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       /*For safety, add one more parameter as a size of the output array */
+       return minfo_get_cluster_fullpath_by_id(ad->maininfo.db_handle,
+                                               cluster_id, path, GL_DIR_PATH_LEN_MAX);
+}
+
+/*
+*   Check it's default album[Camera shot] or not
+*/
+bool
+gl_db_is_default_album(void *data, Mcluster* mcluster)
+{
+       GL_CHECK_FALSE(mcluster);
+       GL_CHECK_FALSE(mcluster->display_name);
+       GL_CHECK_FALSE(mcluster->uuid);
+
+       /* Name is 'Camera shot and' folder locates in Phone */
+       if (!strcmp(mcluster->display_name, GL_ALBUM_DEFAULT_NAME) &&
+               mcluster->type == MINFO_PHONE)
+       {
+               char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+               char parent_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+               int ret = gl_db_get_folder_fullpath(data, mcluster->uuid, dir_path);
+               if(ret != 0)
+               {
+                       gl_dbgE("gl_db_get_folder_fullpath failed[%d]!", ret);
+                       return false;
+               }
+               gl_dbg("Full path: %s", dir_path);
+
+               _gl_db_get_file_dir_names(dir_path, NULL, NULL, parent_path);
+               gl_dbg("Parent path: %s.", parent_path);
+
+               /* And parent folder is Phone root path, it's default folder */
+               return (strcmp(parent_path, GL_ROOT_PATH_PHONE) == 0);
+       }
+
+       return false;
+}
+
+bool gl_db_is_root_path(void *data, const char *cluster_id, const char *path)
+{
+       int res = 0;
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+       if (path)
+       {
+               g_strlcpy(dir_path, path, GL_DIR_PATH_LEN_MAX);
+       }
+       else
+       {
+               if (cluster_id == NULL || strlen(cluster_id) <= 0) {
+                       gl_dbgE("Invalid cluster_id!");
+                       return false;
+               }
+               res = gl_db_get_folder_fullpath(data, cluster_id, dir_path);
+               if (res < 0)
+               {
+                       gl_dbg("get folder fullpath failed(%d), return!", res);
+                       return false;
+               }
+       }
+
+       if (!g_strcmp0(GL_ROOT_PATH_PHONE, dir_path) ||
+           !g_strcmp0(GL_ROOT_PATH_MMC, dir_path)) {
+               gl_dbg("Root path: %s.", dir_path);
+               return true;
+       }
+
+       return false;
+}
+
+int
+gl_db_get_albums_selected_cnt(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       return eina_list_count(ad->albuminfo.selected_albums_elist);
+}
+
+int
+gl_db_albums_selected_list_append(void *data, gl_cluster * item)
+{
+       GL_CHECK_VAL(item, GL_DB_FAIL);
+       GL_CHECK_VAL(item->cluster, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       ad->albuminfo.selected_albums_elist = eina_list_append(ad->albuminfo.selected_albums_elist, item);
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_albums_selected_list_remove(void *data, gl_cluster * item)
+{
+       GL_CHECK_VAL(item, GL_DB_FAIL);
+       GL_CHECK_VAL(item->cluster, GL_DB_FAIL);
+       GL_CHECK_VAL(item->cluster->uuid, GL_DB_FAIL);
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *current = NULL;
+       Eina_List *l = NULL;
+
+       Eina_List *sel_list = ad->albuminfo.selected_albums_elist;
+       EINA_LIST_FOREACH(sel_list, l, current)
+       {
+               if (current == NULL || current->cluster == NULL ||
+                   current->cluster->uuid == NULL) {
+                       gl_dbgE("Invalid gcluster!");
+                       continue;
+               }
+
+               if (!g_strcmp0(current->cluster->uuid, item->cluster->uuid))
+               {
+                       ad->albuminfo.selected_albums_elist = eina_list_remove(ad->albuminfo.selected_albums_elist, current);
+                       break;
+               }
+               current = NULL;
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_finalize_albums_selected_list(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *item = NULL;
+
+       Eina_List *sel_list = ad->albuminfo.selected_albums_elist;
+       EINA_LIST_FREE(sel_list, item)
+       {
+               if (item)
+                       item->checked = false;
+       }
+
+       ad->albuminfo.selected_albums_elist = NULL;
+       return GL_DB_SUCCESS;
+}
+
+bool
+gl_db_is_albums_selected_list_empty(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *current = NULL;
+       Eina_List *l = NULL;
+
+       Eina_List *sel_list = ad->albuminfo.selected_albums_elist;
+       EINA_LIST_FOREACH(sel_list, l, current)
+       {
+               if (current == NULL || current->cluster == NULL)
+               {
+                       continue;
+               }
+               else
+               {
+                       if (current->cluster->count)
+                       {
+                               return false;
+                       }
+               }
+       }
+
+       return true;
+}
+
+int
+gl_db_init(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       MediaSvcHandle *_db_handle = NULL;
+
+       int err = media_svc_connect(&_db_handle);
+       if (err < 0) {
+               gl_dbgE("Connect to DB failed!");
+               return GL_DB_FAIL;
+       }
+
+       ad->maininfo.db_handle = _db_handle;
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_db_finalize(void *data)
+{
+       GL_CHECK_VAL(data, GL_DB_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       _gl_db_clear_cluster_list(ad, true);
+       _gl_db_clear_item_list(ad);
+
+       int err = media_svc_disconnect(ad->maininfo.db_handle);
+       if (err < 0) {
+               gl_dbgE("Disconnect with DB failed!");
+               return GL_DB_FAIL;
+       }
+
+       return GL_DB_SUCCESS;
+}
diff --git a/src/util/gl-ext-exec.c b/src/util/gl-ext-exec.c
new file mode 100755 (executable)
index 0000000..02a32ee
--- /dev/null
@@ -0,0 +1,190 @@
+/*
+  * 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://www.tizenopensource.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 <app_service.h>
+#include "gl-ext-exec.h"
+#include "gl-debug.h"
+#include "gallery.h"
+#include "gl-db-handler.h"
+#include "gl-util.h"
+
+
+#define GL_APP_PKG_VIDEOPLAYER "org.tizen.video-player"
+
+#define GL_ARGV_VIDEO_LIST_TYPE "video_list_type"
+#define GL_ARGV_VIDEO_ALL_FOLDER_VIDEO "all_folder_video"
+#define GL_ARGV_VIDEO_FOLDER "folder"
+
+#define GL_ARGV_VIDEO_ORDER_TYPE "order_type"
+#define GL_ARGV_VIDEO_ORDER_DATE_DESC "date_desc"
+#define GL_ARGV_VIDEO_START_POS "start_pos_time"
+
+#define GL_ARGV_VIDEO_LAUNCH_APP "launching_application"
+#define GL_ARGV_VIDEO_LAUNCH_GALLERY "gallery"
+
+#define GL_ARGV_LAUNCH_TYPE "launch-type"
+#define GL_ARGV_LAUNCH_SEND "send"
+#define GL_ARGV_LAUNCH_FT_WITH_CONTACT "ft-with-contact"
+
+#define GL_ARGV_FT_FILE "file"
+#define GL_ARGV_PATH "path"
+#define GL_ARGV_FT_CONTACT "contact"
+
+#define GL_SEPERATOR_EMOLINK GL_SEPERATOR_BT
+#define GL_SEPERATOR_FT ';'
+
+
+//refer to imageviewer
+static int
+_gl_ext_launch_video_player(void *data, service_h service)
+{
+       GL_CHECK_VAL(service, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_item *gitem = (gl_item *)data;
+       GL_CHECK_VAL(gitem->ad, -1);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       GL_CHECK_VAL(gitem->item, -1);
+       GL_CHECK_VAL(gitem->item->uuid, -1);
+       GL_CHECK_VAL(gitem->item->file_url, -1);
+
+       const char *video_path = gitem->item->file_url;
+       /* Albums view */
+       gl_cluster *cur_cluster = ad->albuminfo.current_album;
+       if (cur_cluster && cur_cluster->cluster)
+       {
+               gl_dbg("Album: %s", cur_cluster->cluster->display_name);
+               if (!g_strcmp0(cur_cluster->cluster->uuid, GL_ALBUM_ALL_ID))
+               {
+                       gl_dbg("All album");
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_LIST_TYPE,
+                                              GL_ARGV_VIDEO_ALL_FOLDER_VIDEO);
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_ORDER_TYPE,
+                                              GL_ARGV_VIDEO_ORDER_DATE_DESC);
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_LAUNCH_APP,
+                                              GL_ARGV_VIDEO_LAUNCH_GALLERY);
+               }
+               else if (cur_cluster->cluster->type == MINFO_PHONE ||
+                               cur_cluster->cluster->type == MINFO_MMC)
+               {
+                       gl_dbg("Real album");
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_LIST_TYPE,
+                                              GL_ARGV_VIDEO_FOLDER);
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_ORDER_TYPE,
+                                              GL_ARGV_VIDEO_ORDER_DATE_DESC);
+                       service_add_extra_data(service,
+                                              GL_ARGV_VIDEO_LAUNCH_APP,
+                                              GL_ARGV_VIDEO_LAUNCH_GALLERY);
+               }
+               else
+               {
+                       gl_dbgE("Wrong type!");
+               }
+       }
+       else
+       {
+               /* Fixme: return or not? */
+               gl_dbgE("Invalid current album, return?");
+       }
+
+       service_add_extra_data(service, GL_ARGV_PATH, video_path);
+       service_set_operation(service, SERVICE_OPERATION_VIEW);
+       service_set_package(service, GL_APP_PKG_VIDEOPLAYER);
+       if (service_send_launch_request(service, NULL, NULL) == SERVICE_ERROR_NONE)
+               return 0;
+       else
+               return -1;
+}
+
+static int
+_gl_ext_compose_exec_cmd(void *data, gl_ext_app_type type,
+       char *path, char **pkg_name)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("type:%d, path:%s", type, path);
+
+       switch (type)
+       {
+       case GL_APP_VIDEOPLAYER:
+               GL_CHECK_VAL(path, -1);
+               *pkg_name = GL_APP_PKG_VIDEOPLAYER;
+               break;
+       default:
+               *pkg_name = NULL;
+       }
+
+       return 0;
+}
+
+int
+gl_ext_exec(void *data, gl_ext_app_type type)
+{
+       GL_CHECK_VAL(data, GL_LAUNCH_FAIL);
+       gl_item *gitem = (gl_item *)data;
+       GL_CHECK_VAL(gitem->ad, GL_LAUNCH_FAIL);
+       gl_appdata *ad = (gl_appdata *)gitem->ad;
+       GL_CHECK_VAL(gitem->item, GL_LAUNCH_FAIL);
+       GL_CHECK_VAL(gitem->item->file_url, GL_LAUNCH_FAIL);
+       char *path = gitem->item->file_url;
+       service_h service = NULL;
+       char *pkg_name = NULL;
+
+       if (ad->uginfo.app_called_by_me)
+       {
+               gl_dbg("APP launched, return.");
+               return GL_LAUNCH_FAIL;
+       }
+
+       _gl_ext_compose_exec_cmd(ad, type, path, &pkg_name);
+       GL_CHECK_VAL(gitem->item->file_url, GL_LAUNCH_FAIL);
+
+       service_create(&service);
+       GL_CHECK_VAL(service, GL_LAUNCH_FAIL);
+
+       int ret = 0;
+       if (type == GL_APP_VIDEOPLAYER) {
+               if (path == NULL) {
+                       service_destroy(service);
+                       return GL_LAUNCH_FAIL;
+               }
+               if (_gl_ext_launch_video_player(data, service) != 0) {
+                       service_destroy(service);
+                       return GL_LAUNCH_FAIL;
+               }
+       } else {
+               service_set_operation(service, SERVICE_OPERATION_DEFAULT);
+               service_set_package(service, pkg_name);
+               ret = service_send_launch_request(service, NULL, NULL);
+               if (ret != SERVICE_ERROR_NONE) {
+                       service_destroy(service);
+                       gl_dbgE("service_send_launch_request failed[%d]!", ret);
+                       return GL_LAUNCH_FAIL;
+               }
+       }
+
+       ret = service_destroy(service);
+       if (ret != SERVICE_ERROR_NONE) {
+               ad->uginfo.app_called_by_me = true;
+               return GL_LAUNCH_SUCCESS;
+       } else {
+               return GL_LAUNCH_FAIL;
+       }
+}
diff --git a/src/util/gl-ext-ug-load.c b/src/util/gl-ext-ug-load.c
new file mode 100755 (executable)
index 0000000..e441cf5
--- /dev/null
@@ -0,0 +1,548 @@
+/*
+  * 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://www.tizenopensource.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 <appsvc.h>
+#include "gl-ext-ug-load.h"
+#include "gl-debug.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-albums.h"
+#include "gl-gridview.h"
+#include "gl-listview.h"
+#include "gallery.h"
+#include "gl-popup.h"
+#include "gl-strings.h"
+
+#define GL_EXT_STR_BUNDLE_LEN 48
+
+#define GL_UG_PKG_IV                   "image-viewer-efl"
+#define GL_UG_PKG_GALLERY              "gallery-efl"
+
+#define GL_ARGV_IV_VIEW_MODE                   "View Mode"
+#define GL_ARGV_IV_VIEW_GALLERY                        "GALLERY"
+#define GL_ARGV_IV_PATH                                        "Path"
+#define GL_ARGV_IV_INDEX                               "Index"
+#define GL_ARGV_IV_VIEW_BY                             "View By"
+#define GL_ARGV_IV_VIEW_BY_FOLER               "By Folder"
+#define GL_ARGV_IV_VIEW_BY_ALL                 "All"
+#define GL_ARGV_IV_MEDIA_TYPE                  "Media type"
+#define GL_ARGV_IV_MEDIA_ALL                   "All"
+#define GL_ARGV_IV_MEDIA_IMAGE                 "Image"
+#define GL_ARGV_IV_MEDIA_VIDEO                 "Video"
+#define GL_ARGV_IV_ALBUM_INDEX                 "Album index"
+#define GL_ARGV_IV_SORT_BY                             "Sort By"
+#define GL_ARGV_IV_SORT_NAME                   "Name"
+#define GL_ARGV_IV_SORT_NAMEDESC               "NameDesc"
+#define GL_ARGV_IV_SORT_DATE                   "Date"
+#define GL_ARGV_IV_SORT_DATEDESC               "DateDesc"
+
+#define GL_ARGV_LAUNCH_TYPE                    "launch-type"
+#define GL_ARGV_FILE_TYPE                      "file-type"
+#define GL_ARGV_SETAS_TYPE                     "setas-type"
+#define GL_ARGV_CALLERID_SIZE                  "callerid-size"
+#define GL_ARGV_CALLERID_PATH                  "callerid-path"
+#define GL_ARGV_HOMESCREEN_PATH                "homescreen-path"
+#define GL_ARGV_LOCKSCREEN_PATH                "lockscreen-path"
+
+#define GL_ARGV_SETAS_WALLPALER                "wallpaper"
+#define GL_ARGV_SETAS_CALLERID                 "callerid"
+#define GL_ARGV_SELECT_ALBUM                   "select-album"
+#define GL_ARGV_SELECT_ONE                     "select-one"
+#define GL_ARGV_SELECT_MULTIPLE                "select-multiple"
+#define GL_ARGV_SELECT_SETAS                   "select-setas"
+#define GL_ARGV_SELECT_IMFT                    "select-imft"
+#define GL_ARGV_SELECT_RETURN_ALBUM            "album-id"
+#define GL_ARGV_SELECT_RETURN_FOLDER_PATH      "folder-path"
+#define GL_ARGV_SELECT_RETURN_COUNT            "count"
+#define GL_ARGV_SELECT_RETURN_PATH             "path"
+#define GL_ARGV_SETAS_RETURN_CROP_PATH         "crop-image-path"
+#define GE_ARGV_SETAS_RETURN_PATH              "image-path"
+#define GL_ARGV_IMFT_CONTACT                   "contact"
+#define GL_ARGV_FILE_TYPE_IMAGE                "image"
+#define GL_ARGV_FILE_TYPE_VIDEO                "video"
+#define GL_ARGV_FILE_TYPE_ALL                  "all"
+
+static void __gl_ext_destroy_ug(void *data)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK(ad->uginfo.ug_called_by_me);
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("View mode: %d", view_mode);
+
+       gl_list_clear_view(ad);
+
+       /**
+       * view_mode is set as GL_VIEW_THUMBS in gridview,
+       * It means ug_called_by_me is ImageViewer UG.
+       */
+       if (view_mode == GL_VIEW_THUMBS)
+               gl_update_view(ad, GL_UPDATE_VIEW_NORMAL);
+
+       ug_destroy(ad->uginfo.ug_called_by_me);
+       ad->uginfo.ug_called_by_me = NULL;
+}
+
+void
+_gl_ext_ug_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv)
+{
+       gl_dbg("");
+       GL_CHECK(ug);
+       GL_CHECK(priv);
+
+       Evas_Object *base = NULL;
+       base = ug_get_layout(ug);
+       if (!base) {
+               gl_dbgE("ug_get_layout failed!");
+               ug_destroy(ug);
+               return;
+       }
+       gl_appdata *ad = (gl_appdata *)priv;
+
+       switch (mode) {
+       case UG_MODE_FULLVIEW:
+               evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               elm_win_resize_object_add(ug_get_window(), base);
+               /* Disable effect when AUL, other show effect */
+               if(ad->albuminfo.aul_launch_type != GL_AUL_T_NONE &&
+                  ad->albuminfo.aul_launch_type != GL_AUL_T_VIEW_ALBUM) {
+                       gl_dbg("No animation.");
+                       ug_disable_effect(ug);
+               }
+               evas_object_show(base);
+               break;
+       default:
+               break;
+       }
+}
+
+void
+_gl_ext_ug_destroy_cb(struct ui_gadget *ug, void *priv)
+{
+       GL_CHECK(priv);
+       gl_appdata *ad = (gl_appdata *)priv;
+       gl_dbg("");
+
+       if(ad->albuminfo.aul_launch_type == GL_AUL_T_NONE ||
+          ad->albuminfo.aul_launch_type == GL_AUL_T_VIEW_ALBUM) {
+               GL_CHECK(ad->uginfo.ug_called_by_me);
+               __gl_ext_destroy_ug(ad);
+       } else {
+               GL_CHECK(ad->uginfo.gallery_ug_called_by_me);
+               gl_dbg("Pause Gallery App.");
+               elm_win_lower(ad->maininfo.win);
+
+               gl_dbg("Destroy Gallery UG directly.");
+               /* init launch-type after gallery-ug is closed */
+               ad->albuminfo.aul_launch_type = GL_AUL_T_NONE;
+
+               ug_destroy(ad->uginfo.gallery_ug_called_by_me);
+               ad->uginfo.gallery_ug_called_by_me = NULL;
+       }
+}
+
+/* Invoke Imageviewer UG */
+int gl_ext_load_iv_ug(void *data, gl_item *cur_item)
+{
+       GL_CHECK_VAL(cur_item, GL_UG_FAIL);
+       GL_CHECK_VAL(cur_item->item, GL_UG_FAIL);
+       GL_CHECK_VAL(data, GL_UG_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->maininfo.win, GL_UG_FAIL);
+       Evas_Object *win = ad->maininfo.win;
+       struct ug_cbs cbs;
+       struct ui_gadget *ug = NULL;
+       bundle *param = NULL;
+       const char *album_id = NULL;
+       gl_dbg("");
+
+       if (ad->uginfo.ug_called_by_me) {
+               gl_dbg("Already exits some UG called by me");
+               return GL_UG_FAIL;
+       }
+       memset(&cbs, 0x00, sizeof(struct ug_cbs));
+       int view_mode = gl_get_view_mode(ad);
+
+       cbs.layout_cb = _gl_ext_ug_layout_cb;
+       cbs.result_cb = NULL;
+       cbs.destroy_cb = _gl_ext_ug_destroy_cb;
+       cbs.priv = ad;
+
+       param = bundle_create();
+       GL_CHECK_VAL(param, GL_UG_FAIL);
+
+       UG_INIT_EFL(win, UG_OPT_INDICATOR_ENABLE);
+
+       gl_cluster *cur_album = ad->albuminfo.current_album;
+       GL_CHECK_VAL(cur_album, GL_UG_FAIL);
+       GL_CHECK_VAL(cur_album->cluster, GL_UG_FAIL);
+       GL_CHECK_VAL(cur_album->cluster->uuid, GL_UG_FAIL);
+
+       /* Local file */
+       bundle_add(param, GL_ARGV_IV_VIEW_MODE,
+                  GL_ARGV_IV_VIEW_GALLERY);
+       bundle_add(param, GL_ARGV_IV_PATH, cur_item->item->file_url);
+
+       char sequence_str[GL_INTERGER_LEN_MAX] = { 0, };
+       eina_convert_itoa(cur_item->sequence, sequence_str);
+       gl_dbg("sequence : %s", sequence_str);
+       bundle_add(param, GL_ARGV_IV_INDEX, sequence_str);
+
+       int grid_view_m = ad->gridinfo.grid_view_mode;
+
+       switch (view_mode) {
+               case GL_VIEW_THUMBS:
+                       /* Type according to different seg. */
+                       if (grid_view_m == GL_CTRL_SEG_IMAGES) {
+                               bundle_add(param, GL_ARGV_IV_MEDIA_TYPE,
+                                          GL_ARGV_IV_MEDIA_IMAGE);
+                               gl_dbg("Media type: Image");
+                       } else if (grid_view_m == GL_CTRL_SEG_VIDEOS) {
+                               bundle_add(param, GL_ARGV_IV_MEDIA_TYPE,
+                                          GL_ARGV_IV_MEDIA_VIDEO);
+                               gl_dbg("Media type: Video");
+                       } else {
+                               bundle_add(param, GL_ARGV_IV_MEDIA_TYPE,
+                                          GL_ARGV_IV_MEDIA_ALL);
+                               gl_dbg("Media type: All");
+                       }
+                       break;
+               case GL_VIEW_VIDEOLIST:
+                       bundle_add(param, GL_ARGV_IV_MEDIA_TYPE,
+                                  GL_ARGV_IV_MEDIA_VIDEO);
+                       gl_dbg("Media type: Video");
+                       break;
+               default:
+                       bundle_add(param, GL_ARGV_IV_MEDIA_TYPE,
+                                  GL_ARGV_IV_MEDIA_ALL);
+                       gl_dbg("Media type: All");
+                       break;
+       }
+
+       if (!g_strcmp0(cur_album->cluster->uuid, GL_ALBUM_ALL_ID)) {
+               /* 1.1, 'All' album->thumbnails view */
+               bundle_add(param, GL_ARGV_IV_VIEW_BY,
+                          GL_ARGV_IV_VIEW_BY_ALL);
+               gl_dbg("View By: All");
+       }
+       else {
+               /* 1.2, Other albums->thumbnails view */
+               bundle_add(param, GL_ARGV_IV_VIEW_BY,
+                          GL_ARGV_IV_VIEW_BY_FOLER);
+               gl_dbg("View By: By Folder");
+       }
+
+       /* Pass album ID */
+       album_id = cur_album->cluster->uuid;
+       gl_dbg("album_id is %s!", album_id);
+       bundle_add(param, GL_ARGV_IV_ALBUM_INDEX, album_id);
+
+       /* Sort by type */
+       int sort_type = ad->uginfo.sort_type;
+       switch (sort_type) {
+               case MINFO_MEDIA_SORT_BY_NAME_DESC:
+                       /* Sort by display name descending */
+                       bundle_add(param, GL_ARGV_IV_SORT_BY,
+                                  GL_ARGV_IV_SORT_NAMEDESC);
+                       gl_dbg("Name descending");
+                       break;
+               case MINFO_MEDIA_SORT_BY_NAME_ASC:
+                       /* Sort by display name ascending */
+                       bundle_add(param, GL_ARGV_IV_SORT_BY,
+                                  GL_ARGV_IV_SORT_NAME);
+                       gl_dbg("Name ascending");
+                       break;
+               case MINFO_MEDIA_SORT_BY_DATE_DESC:
+                       /* Sort by modified_date descending */
+                       bundle_add(param, GL_ARGV_IV_SORT_BY,
+                                  GL_ARGV_IV_SORT_DATEDESC);
+                       gl_dbg("Date descending");
+                       break;
+               case MINFO_MEDIA_SORT_BY_DATE_ASC:
+                       /* Sort by modified_date ascending */
+                       bundle_add(param, GL_ARGV_IV_SORT_BY,
+                                  GL_ARGV_IV_SORT_DATE);
+                       gl_dbg("Date ascending");
+                       break;
+               default:
+                       /* No Sort, use  MINFO_MEDIA_SORT_BY_NAME_ASC */
+                       bundle_add(param, GL_ARGV_IV_SORT_BY,
+                                  GL_ARGV_IV_SORT_NAME);
+                       gl_dbg("no sort, use default Name ascending");
+                       break;
+       }
+
+       ug = ug_create(NULL, GL_UG_PKG_IV, UG_MODE_FULLVIEW, param, &cbs);
+       ad->uginfo.ug_called_by_me = ug;
+       bundle_free(param);
+
+       if (ug) {
+               return GL_UG_SUCCESS;
+       } else {
+               gl_dbgE("ug_create failed!");
+               return GL_UG_FAIL;
+       }
+}
+
+void
+_gl_ext_gallery_ug_result_cb(struct ui_gadget *ug, bundle * result, void *priv)
+{
+       GL_CHECK(priv);
+       gl_appdata *ad = (gl_appdata *)priv;
+       gl_dbg("");
+
+       /* Send result to caller */
+       const char *ret = NULL;
+       bundle *aul_result = NULL;
+       appsvc_create_result_bundle(ad->albuminfo.recv_bundle, &aul_result);
+
+       switch(ad->albuminfo.aul_launch_type)
+       {
+       case GL_AUL_T_SELECT_ALBUM:
+               ret = bundle_get_val(result, GL_ARGV_SELECT_RETURN_FOLDER_PATH);
+               if(ret)
+               {
+                       gl_dbg("return folder-path: %s", ret);
+                       appsvc_add_data(aul_result, APPSVC_DATA_SELECTED, ret);
+               }
+               break;
+
+       case GL_AUL_T_SELECT_ONE:
+               ret = bundle_get_val(result, GL_ARGV_SELECT_RETURN_PATH);
+               if(ret)
+               {
+                       gl_dbg("return path: %s", ret);
+                       appsvc_add_data(aul_result, APPSVC_DATA_SELECTED, ret);
+               }
+               break;
+
+       case GL_AUL_T_SELECT_MULTIPLE:
+               ret = bundle_get_val(result, GL_ARGV_SELECT_RETURN_COUNT);
+               if(ret)
+               {
+                       gl_dbg("return count: %s", ret);
+                       appsvc_add_data(aul_result, GL_ARGV_SELECT_RETURN_COUNT, ret);
+               }
+
+               ret = bundle_get_val(result, GL_ARGV_SELECT_RETURN_PATH);
+               if(ret)
+               {
+                       gl_dbg("return path: %s", ret);
+                       appsvc_add_data(aul_result, APPSVC_DATA_SELECTED, ret);
+               }
+               break;
+
+       case GL_AUL_T_SELECT_SETAS:
+               ret = bundle_get_val(result, GE_ARGV_SETAS_RETURN_PATH);
+               if(ret)
+               {
+                       gl_dbg("return image-path: %s", ret);
+                       appsvc_add_data(aul_result, GE_ARGV_SETAS_RETURN_PATH, ret);
+               }
+
+               ret = bundle_get_val(result, GL_ARGV_SETAS_RETURN_CROP_PATH);
+               if(ret && ad->albuminfo.aul_setas_type == GL_AUL_SETAS_T_CALLER_ID)
+               {
+                       gl_dbg("return image-path: %s", ret);
+                       appsvc_add_data(aul_result, GL_ARGV_SETAS_RETURN_CROP_PATH, ret);
+               }
+               break;
+
+       default:
+               break;
+       }
+
+       if(ret)
+               appsvc_send_result(aul_result, APPSVC_RES_OK);
+       else
+               appsvc_send_result(aul_result, APPSVC_RES_CANCEL);
+
+       bundle_free(aul_result);
+}
+
+int
+gl_ext_load_gallery_ug(void *data)
+{
+       GL_CHECK_VAL(data, GL_UG_FAIL);
+       gl_appdata *ad = (gl_appdata *)data;
+       struct ug_cbs cbs;
+       struct ui_gadget *ug = NULL;
+       bundle *param = NULL;
+       Evas_Object *win = ad->maininfo.win;
+       int launch_type = 0;
+       int setas_type = 0;
+       int file_type = 0;
+       char *val = NULL;
+       char bd_str[GL_EXT_STR_BUNDLE_LEN] = { 0, };
+
+       if (ad->uginfo.gallery_ug_called_by_me)
+       {
+               gl_dbg("Already exits some Gallery UG called by me, destroy it first!");
+               ug_destroy(ad->uginfo.gallery_ug_called_by_me);
+               ad->uginfo.gallery_ug_called_by_me = NULL;
+       }
+
+       memset(&cbs,0x00,sizeof(struct ug_cbs));
+
+       cbs.layout_cb = _gl_ext_ug_layout_cb;
+       cbs.result_cb = _gl_ext_gallery_ug_result_cb;
+       cbs.destroy_cb = _gl_ext_ug_destroy_cb;
+       cbs.priv = ad;
+
+       param = bundle_create();
+       if (!param)
+       {
+               return GL_UG_FAIL;
+       }
+
+       UG_INIT_EFL(win, UG_OPT_INDICATOR_ENABLE);
+
+       /* add launch-type */
+       launch_type = ad->albuminfo.aul_launch_type;
+       gl_dbg("launch-type: %d", launch_type);
+       switch (launch_type)
+       {
+       case GL_AUL_T_SELECT_ONE:
+               bundle_add(param, GL_ARGV_LAUNCH_TYPE, GL_ARGV_SELECT_ONE);
+               break;
+
+       case GL_AUL_T_SELECT_MULTIPLE:
+               bundle_add(param, GL_ARGV_LAUNCH_TYPE, GL_ARGV_SELECT_MULTIPLE);
+               break;
+
+       case GL_AUL_T_SELECT_IMFT:
+               bundle_add(param, GL_ARGV_LAUNCH_TYPE, GL_ARGV_SELECT_IMFT);
+
+               snprintf(bd_str, sizeof(bd_str), "%d", ad->albuminfo.aul_contact_id);
+               bundle_add(param, GL_ARGV_IMFT_CONTACT, bd_str);
+               break;
+
+       case GL_AUL_T_SELECT_SETAS:
+               bundle_add(param, GL_ARGV_LAUNCH_TYPE, GL_ARGV_SELECT_SETAS);
+
+               setas_type =  ad->albuminfo.aul_setas_type;
+               gl_dbg("setas-type: %d", setas_type);
+               switch(setas_type)
+               {
+               case GL_AUL_SETAS_T_WALLPAPER:
+                       bundle_add(param, GL_ARGV_SETAS_TYPE, GL_ARGV_SETAS_WALLPALER);
+                       val = ad->albuminfo.aul_homescreen_path;
+                       if(val) {
+                               gl_dbg("homescreen-path: %s", val);
+                               bundle_add(param, GL_ARGV_HOMESCREEN_PATH, val);
+                       }
+
+                       val = ad->albuminfo.aul_lockscreen_path;
+                       if(val) {
+                               gl_dbg("lockscreen-path: %s", val);
+                               bundle_add(param, GL_ARGV_LOCKSCREEN_PATH, val);
+                       }
+
+                       break;
+
+               case GL_AUL_SETAS_T_CALLER_ID:
+                       bundle_add(param, GL_ARGV_SETAS_TYPE, GL_ARGV_SETAS_CALLERID);
+                       val = ad->albuminfo.aul_callid_size;
+                       if(val) {
+                               gl_dbg("callerid-size: %s", val);
+                               bundle_add(param, GL_ARGV_CALLERID_SIZE, val);
+                       }
+
+                       val = ad->albuminfo.aul_callid_path;
+                       if(val) {
+                               gl_dbg("callerid-path: %s", val);
+                               bundle_add(param, GL_ARGV_CALLERID_PATH, val);
+                       }
+
+                       break;
+
+               default:
+                       bundle_free(param);
+                       return GL_UG_FAIL;
+               }
+
+               break;
+
+       case GL_AUL_T_SELECT_ALBUM:
+               bundle_add(param, GL_ARGV_LAUNCH_TYPE, GL_ARGV_SELECT_ALBUM);
+               break;
+
+       default:
+               bundle_free(param);
+               return GL_UG_FAIL;
+       }
+
+       /* add file-type */
+       file_type = ad->albuminfo.aul_file_type;
+       gl_dbg("file-type: %d", file_type);
+       switch (file_type)
+       {
+       case GL_AUL_FILE_T_IMAGE:
+               bundle_add(param, GL_ARGV_FILE_TYPE, GL_ARGV_FILE_TYPE_IMAGE);
+               break;
+
+       case GL_AUL_FILE_T_VIDEO:
+               bundle_add(param, GL_ARGV_FILE_TYPE, GL_ARGV_FILE_TYPE_VIDEO);
+               break;
+
+       case GL_AUL_FILE_T_ALL:
+               bundle_add(param, GL_ARGV_FILE_TYPE, GL_ARGV_FILE_TYPE_ALL);
+               break;
+
+       default:
+               bundle_free(param);
+               return GL_UG_FAIL;
+       }
+
+       ug = ug_create(NULL, GL_UG_PKG_GALLERY, UG_MODE_FULLVIEW, param, &cbs);
+       bundle_free(param);
+
+       gl_dbg("ug_create: %p.", ug);
+       ad->uginfo.gallery_ug_called_by_me = ug;
+       if (ug) {
+               Evas_Object *ug_ly = ug_get_layout(ug);
+               if (ug_ly) {
+                       evas_object_raise(ug_ly);
+               } else {
+                       gl_dbgE("ug_get_layout failed!");
+                       return GL_UG_FAIL;
+               }
+               return GL_UG_SUCCESS;
+       } else {
+               gl_dbgE("ug_create failed!");
+               return GL_UG_FAIL;
+       }
+}
+
+int
+gl_ext_destroy_gallery_ug(void *data)
+{
+       GL_CHECK_VAL(data, GL_UG_FAIL);
+       gl_dbg("");
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* For select appsvc, destory ug when HOME key is pressed */
+       if (ad->albuminfo.aul_launch_type != GL_AUL_T_NONE &&
+               ad->albuminfo.aul_launch_type != GL_AUL_T_VIEW_ALBUM) {
+
+               _gl_ext_ug_destroy_cb(ad->uginfo.gallery_ug_called_by_me, ad);
+       }
+
+       return GL_UG_SUCCESS;
+}
diff --git a/src/util/gl-thread-util.c b/src/util/gl-thread-util.c
new file mode 100755 (executable)
index 0000000..d8fab29
--- /dev/null
@@ -0,0 +1,638 @@
+/*
+  * 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://www.tizenopensource.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 <glib.h>
+#include <linux/unistd.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <pthread.h>
+#include "gl-thread-util.h"
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-debug.h"
+#include "gl-db-handler.h"
+#include "gl-popup.h"
+#include "gl-progressbar.h"
+#include "gl-strings.h"
+
+#define GALLERY_MAGIC_MAIN_CONTEXT           (0x1983cdaf)
+#define GALLERY_MAGIC_DETAIL_LIST_ITEM       (0x1977abcd)
+#define GALLERY_MAGIC_PIPE_DATA                                 (0x0716ffcc)
+
+#define GALLERY_MAGIC                 unsigned int  __magic
+#define GALLERY_MAGIC_SET(d, m)       (d)->__magic = (m)
+#define GALLERY_MAGIC_CHECK(d, m)     ((d) && ((d)->__magic == (m)))
+
+typedef struct
+{
+       GALLERY_MAGIC;
+       int finished_cnt;
+       int state;              /* 0: operation is over; 1: operation is in process */
+       int popup_op;
+} gl_thread_pipe_data;
+
+
+static pid_t
+_gl_thread_gettid(void)
+{
+       return syscall(__NR_gettid);
+}
+
+static int _gl_thread_operate_medias(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int ret = -1;
+
+       switch (ad->maininfo.medias_op_type) {
+       case GL_MEDIA_OP_DELETE:
+               gl_dbg("Delete!");
+               ret = gl_del_selected(data);
+               break;
+       case GL_MEDIA_OP_MOVE:
+               gl_dbg("Move!");
+               ret = gl_move_selected(data);
+               break;
+       default:
+               gl_dbgE("Unknow media operation mode!");
+               break;
+       }
+
+       if (ret < 0) {
+               gl_dbgE("Operation failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+static int
+_gl_thread_update_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       switch (ad->maininfo.medias_op_type) {
+       case GL_MEDIA_OP_DELETE:
+               gl_dbg("Delete!");
+               gl_update_del_view(data);
+               break;
+       case GL_MEDIA_OP_MOVE:
+               gl_dbg("Move!");
+               gl_update_move_view(data);
+               break;
+       default:
+               gl_dbgE("Unknow media operation mode!");
+               break;
+       }
+
+       return 0;
+}
+
+static void *
+_gl_thread_data_thread(void *data)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int cancel_flag = 0;
+
+       gl_dbg("@@@@@@@@@@ :::: Child thread ID = %d :::: @@@@@@@@@@", _gl_thread_gettid());
+       //Different thread, need to initialize libmedia-info.
+       gl_db_init(ad);
+
+       /* Media movement/deleting operation */
+       _gl_thread_operate_medias(data);
+
+       /*  send finish signal  */
+       gl_thread_pipe_data pipe_data;
+       memset(&pipe_data, 0x00, sizeof(gl_thread_pipe_data));
+       GALLERY_MAGIC_SET(&pipe_data, GALLERY_MAGIC_PIPE_DATA);
+       /* Set over state */
+       pipe_data.state = 0;
+       gl_thread_get_cancel_state(ad, &cancel_flag);
+
+       ecore_pipe_write(ad->pbarinfo.sync_pipe, &pipe_data, sizeof(gl_thread_pipe_data));
+
+       gl_dbg("@@@@@@@@@@ :::: Child thread done :::: @@@@@@@@@@");
+
+       return (void *)0;
+}
+
+static Eina_Bool _gl_thread_del_pbar_idler_cb(void *data)
+{
+       gl_dbg("Delete progressbar...");
+       GL_CHECK_CANCEL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Reset pb_cancel */
+       gl_thread_set_cancel_state(ad, GL_PB_CANCEL_NONE);
+       /* Operation done, destroy progressbar */
+       gl_pb_del_pbar(ad);
+
+       /* Destroy lock */
+       gl_thread_destroy_lock(ad);
+
+       if (ad->pbarinfo.del_pbar_idler) {
+               ecore_idler_del(ad->pbarinfo.del_pbar_idler);
+               ad->pbarinfo.del_pbar_idler = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gl_thread_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+       gl_dbg(":::::::::: Main thread ID = %d ::::::::::", _gl_thread_gettid());
+       GL_CHECK(data);
+       GL_CHECK(buffer);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_thread_pipe_data *p_pipe_data = (gl_thread_pipe_data *) buffer;
+       gl_dbg("Pipe state is %d", p_pipe_data->state);
+
+       if (!GALLERY_MAGIC_CHECK(p_pipe_data, GALLERY_MAGIC_PIPE_DATA)) {
+               gl_dbgE("##### :: Check p_pipe_data Magic failed :: #####");
+               return;
+       }
+
+       int cancel_flag = false;
+       gl_thread_get_cancel_state(ad, &cancel_flag);
+
+       if (p_pipe_data->popup_op)
+       {
+               if (p_pipe_data->state)
+               {
+                       /* Check cancel_flag */
+                       if (cancel_flag != GL_PB_CANCEL_NORMAL) {
+                               gl_dbgE("Failed to kill thread, try again!");
+                               gl_thread_emit_next_signal(ad);
+                               return;
+                       }
+                       char msg[GL_FILE_PATH_LEN_MAX] = { 0, };
+                       gl_item *cur_gitem = NULL;
+                       /* Get selected media */
+                       gl_db_get_item_by_index(ad, p_pipe_data->finished_cnt, true, &cur_gitem);
+                       GL_CHECK(cur_gitem);
+                       GL_CHECK(cur_gitem->item);
+                       GL_CHECK(cur_gitem->item->display_name);
+
+                       if (p_pipe_data->popup_op == GL_POPUP_OP_SAME_ALBUM)
+                       {
+                               snprintf(msg, sizeof(msg), "Cannot move %s to the same album!",
+                                        cur_gitem->item->display_name);
+                       }
+                       else if (p_pipe_data->popup_op == GL_POPUP_OP_DUPLICATED_NAME)
+                       {
+                               snprintf(msg, sizeof(msg), "%s is duplicated, rename it!",
+                                        cur_gitem->item->display_name);
+                       }
+                       else if (p_pipe_data->popup_op == GL_POPUP_OP_PROTECTED_FILE)
+                       {
+                               snprintf(msg, sizeof(msg), "Cannot removed protected file %s!",
+                                        cur_gitem->item->display_name);
+                       }
+                       gl_dbg("Popup description: %s", msg);
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT_MOV_DEL, msg);
+               }
+               else if (ad->popupinfo.popup)
+               {
+                       /*
+                        * If p_pipe_data->state is equal to 0,
+                        * it means thread should be destoryed.
+                        */
+                       evas_object_del(ad->popupinfo.popup);
+                       ad->popupinfo.popup = NULL;
+               }
+       }
+
+       /* Update progressbar state */
+       int all_cnt = gl_db_selected_list_count(ad);
+
+       if (p_pipe_data->state) {
+               /* Check cancel_flag */
+               if (cancel_flag != GL_PB_CANCEL_NORMAL) {
+                       gl_dbgE("Failed to kill thread, try again!");
+                       gl_thread_emit_next_signal(ad);
+                       return;
+               }
+               /* 1. Moving/deleting is in porcess */
+               gl_pb_refresh_thread_pbar(ad, p_pipe_data->finished_cnt, all_cnt);
+               gl_dbg("@@@ finished/all = %d/%d, updating progressbar @@@",
+                      p_pipe_data->finished_cnt, all_cnt);
+               /* Emit signal to notice child thread handle next media */
+               gl_dbg("Emit next signal...");
+               gl_thread_emit_next_signal(ad);
+       } else {
+               /* 2. Moving/deleting is over, show finished count */
+               gl_dbg("@@@ finished: %d, updating progressbar @@@",
+                      ad->pbarinfo.finished_cnt);
+               gl_pb_refresh_thread_pbar(ad, ad->pbarinfo.finished_cnt,
+                                         ad->pbarinfo.finished_cnt);
+               ad->pbarinfo.finished_cnt = 0;
+               gl_dbg("@@@@@@@ :::: Pipe close && Update view :::: @@@@@@@");
+               int cancel_flag = false;
+               bool b_reset = false;
+               gl_thread_get_cancel_state(ad, &cancel_flag);
+               if (cancel_flag == GL_PB_CANCEL_RESET) {
+                       /* Set medias_op_type none to stop refreshing view*/
+                       ad->maininfo.medias_op_type = GL_MEDIA_OP_NONE;
+                       gl_dbgW("Cancel error case, set reset state!");
+                       b_reset = true;
+               }
+
+               /* Use idler to delete progressbar to refresh status totally */
+               if (ad->pbarinfo.del_pbar_idler) {
+                       ecore_idler_del(ad->pbarinfo.del_pbar_idler);
+                       ad->pbarinfo.del_pbar_idler = NULL;
+               }
+               Ecore_Idler *idler= NULL;
+               idler = ecore_idler_add(_gl_thread_del_pbar_idler_cb, ad);
+               ad->pbarinfo.del_pbar_idler = idler;
+
+               int mmc_state = ad->maininfo.mmc_state;
+               int op_type = ad->maininfo.medias_op_type;
+               gl_dbg("MMC state: %d, OP type: %d.", mmc_state, op_type);
+               /* Operate medias related to MMC while moving medias */
+               if (mmc_state == GL_MMC_STATE_REMOVED_MOVING) {
+                       ad->maininfo.mmc_state = GL_MMC_STATE_REMOVED;
+
+                       /**
+                       * Albums: Move/Delete.
+                       *
+                       * Case 1: Source folder does exist, update view.
+                       * Case 2: Source folder is MMC, and it vanished.
+                       */
+                       gl_cluster *cur_album = ad->albuminfo.current_album;
+                       if (cur_album && cur_album->cluster &&
+                           cur_album->cluster->type == MINFO_MMC) {
+                               gl_dbgW("MMC removed, change to albums view!");
+                               gl_pop_to_ctrlbar_ly(ad, true);
+                       } else {
+                               _gl_thread_update_view(ad);
+                       }
+               } else {
+                       /* Operated files on MMC, reset MMC state */
+                       if (mmc_state == GL_MMC_STATE_ADDED_MOVING)
+                               ad->maininfo.mmc_state = GL_MMC_STATE_ADDED;
+                       else if (mmc_state == GL_MMC_STATE_ADDING_MOVING)
+                               ad->maininfo.mmc_state = GL_MMC_STATE_ADDED;
+                       /* Refresh view */
+                       _gl_thread_update_view(ad);
+               }
+
+               /* Free Ecore_Pipe object created */
+               if (ad->pbarinfo.sync_pipe) {
+                       ecore_pipe_del(ad->pbarinfo.sync_pipe);
+                       ad->pbarinfo.sync_pipe = NULL;
+               }
+
+               if (b_reset) {
+                       /* Free selected list */
+                       gl_db_selected_list_finalize(ad);
+                       gl_dbgW("Thread cancellation is over, reset gallery!");
+                       /* Continue remake gallery */
+                       gallery_reset_app(ad, ad->albuminfo.aul_album_id);
+               } else {
+                       /* Set medias_op_type none to stop refreshing view*/
+                       ad->maininfo.medias_op_type = GL_MEDIA_OP_NONE;
+               }
+       }
+}
+
+/*******************************************************
+** Prototype           : gl_thread_emit_next_signal
+** Description         : Emit signal to notice child thread handle next media.
+** Input               : void *data
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_emit_next_signal(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       pthread_mutex_lock(&(ad->pbarinfo.refresh_lock));
+       gl_dbg("refresh_flag: %d.", ad->pbarinfo.refresh_flag);
+       if (ad->pbarinfo.refresh_flag == 0)
+       {
+               ad->pbarinfo.refresh_flag = 1;
+               pthread_cond_signal(&(ad->pbarinfo.refresh_cond));
+       }
+       pthread_mutex_unlock(&(ad->pbarinfo.refresh_lock));
+
+       return 0;
+}
+
+/*******************************************************
+** Prototype           : gl_thread_wait_next_signal
+** Description         : Wait start signal to handle next media.
+** Input               : void *data
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_wait_next_signal(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       pthread_mutex_lock(&(ad->pbarinfo.refresh_lock));
+       gl_dbg("refresh_flag: %d.", ad->pbarinfo.refresh_flag);
+       while (ad->pbarinfo.refresh_flag == 0)
+       {
+               gl_dbg("Thread waiting...");
+               pthread_cond_wait(&(ad->pbarinfo.refresh_cond), &(ad->pbarinfo.refresh_lock));
+       }
+       ad->pbarinfo.refresh_flag = 0;
+       pthread_mutex_unlock(&(ad->pbarinfo.refresh_lock));
+
+       return 0;
+}
+
+/*******************************************************
+** Prototype           : gl_thread_set_cancel_state
+** Description         : Set the value of cancel flag.
+** Input               : void *data
+** Input               : int val
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_set_cancel_state(void *data, int val)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       pthread_mutex_lock(&(ad->pbarinfo.pbar_lock));
+       ad->pbarinfo.pbar_cancel = val;
+       pthread_mutex_unlock(&(ad->pbarinfo.pbar_lock));
+
+       return 0;
+}
+
+/*******************************************************
+** Prototype           : gl_thread_get_cancel_state
+** Description         : Get the value of cancel flag.
+** Input               : void *data
+** Output              : int* val
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_get_cancel_state(void *data, int *val)
+{
+       GL_CHECK_VAL(val, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       pthread_mutex_lock(&(ad->pbarinfo.pbar_lock));
+       *val = ad->pbarinfo.pbar_cancel;
+       pthread_mutex_unlock(&(ad->pbarinfo.pbar_lock));
+
+       return 0;
+}
+
+
+/*******************************************************
+** Prototype           : gl_thread_write_pipe
+** Description         : Write date to pipe in order to make progressbar refreshed
+** Input               : void *data
+** Input               : int finished_cnt
+** Input               : int popup_op
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+void
+gl_thread_write_pipe(void *data, int finished_cnt, int popup_op)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int cancel_flag = false;
+
+       gl_dbg("Wait next signal...");
+       gl_thread_wait_next_signal(ad);
+
+       gl_thread_pipe_data pipe_data;
+       memset(&pipe_data, 0x00, sizeof(gl_thread_pipe_data));
+       GALLERY_MAGIC_SET(&pipe_data, GALLERY_MAGIC_PIPE_DATA);
+
+       pipe_data.state = 1;
+       pipe_data.finished_cnt = finished_cnt;
+       pipe_data.popup_op = popup_op;
+
+       gl_thread_get_cancel_state(ad, &cancel_flag);
+
+       if (cancel_flag == GL_PB_CANCEL_BUTTON ||
+               cancel_flag == GL_PB_CANCEL_MMC ||
+               cancel_flag == GL_PB_CANCEL_ERROR ||
+               cancel_flag == GL_PB_CANCEL_RESET)
+       {
+               //send cancel signal through pipe
+               pipe_data.finished_cnt = -1;
+               /* Set over state */
+               pipe_data.state = 0;
+               ecore_pipe_write(ad->pbarinfo.sync_pipe, &pipe_data, sizeof(gl_thread_pipe_data));
+               //exit the child thread
+               if (cancel_flag == GL_PB_CANCEL_BUTTON)
+               {
+                       gl_dbg("Cancel button tapped, child thread exit!");
+               }
+               else if (cancel_flag == GL_PB_CANCEL_MMC)
+               {
+                       gl_dbg("MMC removed, child thread exit!");
+               }
+               else if (cancel_flag == GL_PB_CANCEL_ERROR)
+               {
+                       gl_dbg("Error happened, child thread exit!");
+               }
+               else if (cancel_flag == GL_PB_CANCEL_RESET) {
+                       gl_dbg("Reset gallery, child thread exit!");
+               }
+
+               pthread_exit((void *)1);
+       }
+       else
+       {
+               gl_dbg("Writing pipe...");
+               ecore_pipe_write(ad->pbarinfo.sync_pipe, &pipe_data, sizeof(gl_thread_pipe_data));
+       }
+}
+
+/*******************************************************
+** Prototype           : gl_thread_gen_data_thread
+** Description         : Create child thread for moving or deleting medias
+** Input               : void *data
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_gen_data_thread(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       pthread_t tid;
+       pthread_attr_t attr;
+       int ret = -1;
+
+       gl_dbg("Creating child thread.");
+       //add pipe for update progressbar status
+       ad->pbarinfo.sync_pipe = ecore_pipe_add(_gl_thread_pipe_cb, ad);
+       //initialize thread attributes
+       ret = pthread_attr_init(&attr);
+       if (ret == 0)
+       {
+               ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+               if (ret == 0)
+               {
+                       //create child thread
+                       ret = pthread_create(&tid, &attr, _gl_thread_data_thread, ad);
+                       if (ret != 0)
+                       {
+                               gl_dbgE("[Error] ##### :: pthread_create failed :: #####");
+                               pthread_attr_destroy(&attr);
+                               return -1;
+                       }
+               }
+       }
+
+       gl_dbg("\n\n[Done] @@@@@@@@@@ :::: pthread_create successfull :::: @@@@@@@@@@\n");
+       pthread_attr_destroy(&attr);
+
+       return 0;
+}
+
+/*******************************************************
+** Prototype           : gl_thread_destroy_lock
+** Description         : Destroy mutex lock.
+** Input               : void *data
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_destroy_lock(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("@@@@@@@@@@ :::: Destroy MUTEX :::: @@@@@@@@@@");
+
+       /**
+       * The variable below was accessed without holding a guarding lock.
+       * In a multithreaded environment, this can lead to a race condition.
+       * Add lock to prevent from RC.
+       */
+       pthread_mutex_lock(&(ad->pbarinfo.refresh_lock));
+       ad->pbarinfo.refresh_flag = 0;
+       pthread_mutex_unlock(&(ad->pbarinfo.refresh_lock));
+
+       pthread_cond_destroy(&(ad->pbarinfo.refresh_cond));
+       pthread_mutex_destroy(&(ad->pbarinfo.pbar_lock));
+       pthread_mutex_destroy(&(ad->pbarinfo.refresh_lock));
+
+       return 0;
+}
+
+/*******************************************************
+** Prototype           : gl_thread_init_lock
+** Description         : Initialize mutex lock
+** Input               : void *data
+** Output              : None
+** Return Value        :
+** Calls               :
+** Called By           :
+**
+**  History            :
+**  1.Date             : 2011/06/10
+**    Author           : Samsung
+**    Modification : Created function
+**
+*********************************************************/
+int
+gl_thread_init_lock(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("@@@@@@@@@@ :::: Initialize MUTEX :::: @@@@@@@@@@");
+
+       pthread_mutex_init(&(ad->pbarinfo.pbar_lock), NULL);
+       pthread_mutex_init(&(ad->pbarinfo.refresh_lock), NULL);
+       pthread_cond_init(&(ad->pbarinfo.refresh_cond), NULL);
+
+       /**
+       * The variable below was accessed without holding a guarding lock.
+       * In a multithreaded environment, this can lead to a race condition.
+       * Add lock to prevent from RC.
+       */
+       pthread_mutex_lock(&(ad->pbarinfo.refresh_lock));
+       ad->pbarinfo.refresh_flag = 0;
+       pthread_mutex_unlock(&(ad->pbarinfo.refresh_lock));
+
+       return 0;
+}
diff --git a/src/util/gl-ui-util.c b/src/util/gl-ui-util.c
new file mode 100755 (executable)
index 0000000..dbf4e46
--- /dev/null
@@ -0,0 +1,2393 @@
+/*
+  * 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://www.tizenopensource.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 <vconf.h>
+#include <vconf-keys.h>
+#include <string.h>
+#include <Ecore_X.h>
+#include <glib.h>
+#include "gl-ui-util.h"
+#include "gl-util.h"
+#include "gl-ext-ug-load.h"
+#include "gl-ext-exec.h"
+#include "gl-button.h"
+#include "gl-gridview.h"
+#include "gl-controlbar.h"
+#include "gl-albums.h"
+#include "gl-listview.h"
+#include "gl-debug.h"
+#include "gl-db-handler.h"
+#include "gl-thread-util.h"
+#include "gl-popup.h"
+#include "gl-progressbar.h"
+#include "gl-strings.h"
+
+#define GL_CBAR_OCCUPIED_SEGMENT 4
+
+#define GL_EDITFIELD_STYLE_DEFAULT GL_CHECKBOX_STYLE_DEFAULT
+#define GL_ENTRY_STYLE_DEFAULT GL_CHECKBOX_STYLE_DEFAULT
+#define GL_NAVIBAR_STYLE_DEFAULT GL_CHECKBOX_STYLE_DEFAULT
+#define GL_TRANS_FINISHED "transition,finished"
+
+static void _gl_ui_newalbum_cancel_cb(void *data, Evas_Object * obj,
+                                      void *event_info);
+void __gl_ui_entry_space_check_cb(void *data, Evas_Object *obj, void *event_info);
+void __gl_ui_entry_maxlen_reached_cb(void *data, Evas_Object *obj, void *event_info);
+static void __gl_editfield_focused_cb(void *data, Evas_Object *obj, void *event_info);
+static void __gl_editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info);
+static void __gl_editfield_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+
+static Evas_Object *
+_gl_ui_create_editfield(void *data, Evas_Object * parent, char *default_label)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       Evas_Object *editfield_ly = NULL;
+       Evas_Object *lay = NULL;
+       Evas_Object *entry = NULL;
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       lay = elm_layout_add(parent);
+       GL_CHECK_NULL(lay);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, GL_EDJ_FILE, GL_GRP_ENTRY);
+
+       /* Single line with no title */
+       editfield_ly = elm_layout_add(lay);
+       if (editfield_ly == NULL) {
+               gl_dbgE("elm_editfield_add failed!");
+               evas_object_del(lay);
+               return NULL;
+       }
+       elm_layout_theme_set(editfield_ly, "layout", "editfield", "gallery");
+       evas_object_size_hint_weight_set(editfield_ly, 1, 1);
+       evas_object_size_hint_align_set(editfield_ly, 1, 0.5);
+       /* Set editfield layout to view layout */
+       elm_object_part_content_set(lay, "entry_part", editfield_ly);
+
+       entry = elm_entry_add(editfield_ly);
+       if (entry == NULL) {
+               gl_dbgE("elm_entry_add failed!");
+               evas_object_del(lay);
+               return NULL;
+       }
+       elm_object_style_set(entry, GL_ENTRY_STYLE_DEFAULT);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       /* Set entry to editfield layout */
+       elm_object_part_content_set(editfield_ly, "elm.swallow.content", entry);
+
+       /* Album name, the length is limited to 255 Chars*/
+       limit_filter_data.max_char_count = GL_ENTRY_STR_CHAR_MAX;
+       limit_filter_data.max_byte_count = 0;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size,
+                                      &limit_filter_data);
+
+       if (gl_set_entry_text(entry, default_label) != 0) {
+               gl_dbgE("gl_set_entry_text failed!");
+               evas_object_del(lay);
+               return NULL;
+       }
+
+       ad->entryinfo.imf_entry = entry;
+       ad->entryinfo.imf_context = elm_entry_imf_context_get(ad->entryinfo.imf_entry);
+
+       gl_dbg("view mode=%d", gl_get_view_mode(ad));
+       evas_object_smart_callback_add(entry, "maxlength,reached",
+                                      __gl_ui_entry_maxlen_reached_cb, ad);
+
+       /* Add space check callback */
+       evas_object_smart_callback_add(entry, "changed",
+                                      __gl_ui_entry_space_check_cb,
+                                      ad);
+       evas_object_smart_callback_add(entry, "focused",
+                                      __gl_editfield_focused_cb, editfield_ly);
+       evas_object_smart_callback_add(entry, "unfocused",
+                                      __gl_editfield_unfocused_cb,
+                                      editfield_ly);
+       elm_object_signal_callback_add(editfield_ly, "elm,eraser,clicked", "elm",
+                                      __gl_editfield_eraser_clicked_cb, entry);
+
+       ad->entryinfo.editfield = editfield_ly;
+
+       return lay;
+}
+
+static void
+_gl_ui_selinfo_destroy_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+       gl_ui_destroy_selinfo(ad);
+
+       if (view_mode == GL_VIEW_ALBUMS_EDIT)
+       {
+               edje_object_signal_emit(_EDJ(ad->albuminfo.edit_layout),
+                                       "elm,swallow_view,state,default", "elm");
+       } else if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                  view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               edje_object_signal_emit(_EDJ(ad->gridinfo.edit_layout),
+                                       "elm,swallow_view,state,thumb_edit_default",
+                                       "elm");
+       } else {
+               gl_dbgE("Wrong view mode!");
+       }
+}
+
+/* Hide input panel and entry cursor */
+static int _gl_ui_hide_imf_input_panel(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata* ad = (gl_appdata*)data;
+
+       if (ad->entryinfo.imf_context)
+               ecore_imf_context_input_panel_hide(ad->entryinfo.imf_context);
+       /* Unfocus to hide cursor */
+       elm_object_focus_set(ad->entryinfo.imf_entry, FALSE);
+
+       return 0;
+}
+
+/**
+* Check album name is valid and remove unuseful characters
+*      1) not only includes space;
+*      2) contains invalid character;
+*      3) it's empty.
+*
+* @param b_new
+*      true: add a new album ; false: rename a album.
+* @param b_enter
+*      true: Enter key pressed ; false: Button Done clicked.
+*
+*/
+static int _gl_ui_get_valid_album_name(void *data, char* album_name,
+                                       bool b_new, bool b_enter)
+{
+       GL_CHECK_VAL(album_name, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata* ad = (gl_appdata*)data;
+       int mode = 0;
+       gl_dbg("Input album name: %s", album_name);
+       char *popup_desc;
+       popup_desc = (char*)calloc(GL_POPUP_STRING_MAX, sizeof(char));
+       if (popup_desc == NULL) {
+               gl_dbg("memory allocation fail");
+               return -1;
+       }
+       /* Check album name length */
+       if (strlen(album_name) == 0) {
+               gl_dbgW("Inserted text is empty!");
+               if (b_enter) {
+                       gl_dbg("Enter key pressed.");
+                       goto INVALID_ALBUM_NAME;
+                       return -1;
+               }
+
+               if (b_new)
+                       mode = GL_POPUP_ALBUM_NEW_EMPTY;
+               else
+                       mode = GL_POPUP_ALBUM_RENAME_EMPTY;
+               snprintf(popup_desc, GL_POPUP_STRING_MAX, "%s.<br>%s",
+                       GL_STR_ENTRY_IS_EMPTY, GL_STR_RETRY_Q);
+               popup_desc[strlen(popup_desc)] = '\0';
+               gl_popup_create_popup(ad, mode, popup_desc);
+               goto INVALID_ALBUM_NAME;
+       }
+       gl_dbg("Inserted album name: %s, length: %d", album_name, strlen(album_name));
+
+       /* Removes leading and trailing whitespace */
+       g_strstrip((gchar*)album_name);
+       if (strlen(album_name) == 0) {
+               gl_dbgW("Album name includes only space!");
+               if (b_enter) {
+                       gl_dbg("Enter key pressed.");
+                       goto INVALID_ALBUM_NAME;
+               }
+
+               if (b_new)
+                       mode = GL_POPUP_ALBUM_NEW_EMPTY;
+               else
+                       mode = GL_POPUP_ALBUM_RENAME_EMPTY;
+               snprintf(popup_desc, GL_POPUP_STRING_MAX, "%s.<br>%s",
+                       GL_STR_INVALID_INPUT_PARAMETER, GL_STR_RETRY_Q);
+               popup_desc[strlen(popup_desc)] = '\0';
+               gl_popup_create_popup(ad, mode, popup_desc);
+               goto INVALID_ALBUM_NAME;
+       }
+
+       /* Check if there is any invalid character in string */
+       if (gl_validate_album_name(album_name) == false) {
+               gl_dbgW("Album name includes invalid character!");
+               if (b_new)
+                       mode = GL_POPUP_ALBUM_NEW_INVALID;
+               else
+                       mode = GL_POPUP_ALBUM_RENAME_INVALID;
+               snprintf(popup_desc, GL_POPUP_STRING_MAX, "%s.<br>%s",
+                       GL_STR_INVALID_INPUT_PARAMETER, GL_STR_RETRY_Q);
+               popup_desc[strlen(popup_desc)] = '\0';
+               gl_popup_create_popup(ad, mode, popup_desc);
+               goto INVALID_ALBUM_NAME;
+       }
+
+       free(popup_desc);
+
+       return 0;
+
+ INVALID_ALBUM_NAME:
+       free(popup_desc);
+       return -1;
+}
+
+/*
+* @param b_enter
+*      True: Enter key on Keyboard pressed, False: Button Done clicked
+*/
+static int _gl_ui_newalbum_done(void *data, bool b_enter)
+{
+       gl_dbg("b_enter: %d", b_enter);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->entryinfo.imf_entry == NULL) {
+               gl_dbgE("Entry is NULL");
+               goto NEW_ALBUM_FAILED;
+       }
+
+       if (ad->entryinfo.imf_context)
+               ecore_imf_context_input_panel_hide(ad->entryinfo.imf_context);
+
+       Evas_Object *entry = ad->entryinfo.imf_entry;
+       char album_name[GL_ALBUM_NAME_LEN_MAX] = { 0, };
+
+       /* Get utf8 format string */
+       if (gl_get_entry_text(entry, album_name, GL_ALBUM_NAME_LEN_MAX) != 0) {
+               gl_dbgE("Get entry text failed!");
+               goto NEW_ALBUM_FAILED;
+       }
+
+       /* Get valid name */
+       if (_gl_ui_get_valid_album_name(ad, album_name, true, b_enter) != 0) {
+               if (b_enter)
+                       _gl_ui_hide_imf_input_panel(ad);
+               return -1;
+       }
+       gl_dbg("Valid album name: %s", album_name);
+
+       /* Check whether the new folder exist */
+       char path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+       /* Get default images path, make new album under it */
+       if (gl_get_default_images_path(dir_path) != 0) {
+               gl_dbgE("Failed to get default image dir path!");
+               goto NEW_ALBUM_FAILED;
+       }
+
+       /* Make dir full path of new album */
+       snprintf(path, GL_DIR_PATH_LEN_MAX, "%s/%s", dir_path, album_name);
+       path[strlen(path)] = '\0';
+       gl_dbg("New dir path: %s", path);
+
+       int res = ecore_file_dir_is_empty(path);
+       gl_dbg("ecore_file_dir_is_empty return value: %d", res);
+       /**
+       * If dir is empty, 1 is returned,
+       * if it contains at least 1 file, 0 is returned.
+       * On failure, -1 is returned.
+       */
+       if (res == 0) {
+               char *popup_desc;
+               popup_desc = (char*)calloc(GL_POPUP_STRING_MAX, sizeof(char));
+               if (popup_desc == NULL) {
+                       gl_dbg("memory allocation fail");
+                       return -1;
+               }
+
+               snprintf(popup_desc, GL_POPUP_STRING_MAX, "%s.<br>%s",
+                       GL_STR_SAME_NAME_ALREADY_IN_USE, GL_STR_RETRY_Q);
+               popup_desc[strlen(popup_desc)] = '\0';
+               gl_popup_create_popup(ad, GL_POPUP_ALBUM_NEW_DUPLICATE,
+                                     popup_desc);
+               free(popup_desc);
+               gl_dbgW("New folder already exists and not NULL, return!");
+               return -1;
+       }
+
+       /* Save new album name */
+       char* new_album = ad->albuminfo.new_album_name;
+       g_strlcpy(new_album, album_name, GL_ALBUM_NAME_LEN_MAX);
+       new_album[GL_ALBUM_NAME_LEN_MAX - 1] = '\0';
+       gl_ui_destroy_imf(ad);
+       /* Move files to dest album */
+       gl_move_to_album(ad);
+       return 0;
+
+ NEW_ALBUM_FAILED:
+       _gl_ui_newalbum_cancel_cb(ad, NULL, NULL);
+       return -1;
+}
+
+static void _gl_ui_newalbum_enter_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Unfocus to hide cursor */
+       elm_object_focus_set(ad->entryinfo.imf_entry, FALSE);
+
+       _gl_ui_newalbum_done(data, true);
+}
+
+static void _gl_ui_newalbum_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       _gl_ui_newalbum_done(data, false);
+}
+
+static void
+_gl_ui_newalbum_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       elm_naviframe_item_pop(ad->maininfo.navi_bar);
+       gl_ui_destroy_imf(ad);
+       gl_ui_update_select_widgets(ad);
+}
+
+static void __gl_ui_rename_album_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK(ad->maininfo.navi_bar);
+       gl_dbg("");
+
+       ad->albuminfo.selected_album = NULL;
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS_EDIT);
+       /* manually popup view after rename album */
+       elm_naviframe_item_pop(ad->maininfo.navi_bar);
+       /* Recover the previous UI */
+       gl_ui_destroy_imf(ad);
+       /* Update edit view */
+       gl_albums_update_items(ad);
+       return;
+}
+
+/*
+* @param b_enter
+*      True: Enter key on Keyboard pressed, False: Button Done clicked
+*/
+static int __gl_ui_rename_album_done(void *data, bool b_enter)
+{
+       gl_dbg("b_enter: %d", b_enter);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       bool b_root_path = false;
+       gl_cluster *album_item = NULL;
+
+       if (gl_get_view_mode(ad) != GL_VIEW_ALBUMS_RENAME)      {
+               gl_dbgE("View mode is wrong!");
+               goto RENAME_FAILED;
+       }
+
+       album_item = ad->albuminfo.selected_album;
+       if (album_item == NULL || album_item->cluster == NULL ||
+           album_item->cluster->uuid == NULL) {
+               gl_dbgE("selected_album is NULL!");
+               goto RENAME_FAILED;
+       }
+
+       char etxt[GL_FILE_NAME_LEN_MAX] = { 0, };
+       /* Get utf8 format string */
+       int ret = -1;
+       ret = gl_get_entry_text(ad->entryinfo.imf_entry, etxt,
+                               GL_FILE_NAME_LEN_MAX);
+       if (ret != 0) {
+               gl_dbgE("Get entry text failed!");
+               goto RENAME_FAILED;
+       }
+
+       /* Get valid name */
+       if (_gl_ui_get_valid_album_name(ad, etxt, false, b_enter) != 0) {
+               if (b_enter)
+                       _gl_ui_hide_imf_input_panel(ad);
+               return -1;
+       }
+
+       gl_dbg("Valid album name: %s", etxt);
+       /* Get src folder path */
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       ret = gl_db_get_folder_fullpath(ad, album_item->cluster->uuid, dir_path);
+       if (ret < 0) {
+               gl_dbgE("gl_db_get_folder_fullpath failed(%d)!", ret);
+               goto RENAME_FAILED;
+       } else {
+               gl_dbg("Src folder: %s", dir_path);
+               if (gl_db_is_root_path(ad, NULL, dir_path)) {
+                       /**
+                       * Root path, couldn't rename root path,
+                       * make the new dest folder
+                       * and move all files for root path to it.
+                       */
+                       gl_dbg("Rename [No Name] album's name.");
+                       b_root_path = true;
+               }
+       }
+
+       /* Get dest folder path */
+       char temp_dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+       if (b_root_path) {
+               /* Get default images path, make dest foler under it */
+               memset(dir_path, 0x00, GL_DIR_PATH_LEN_MAX);
+               if (gl_get_default_images_path(dir_path) != 0) {
+                       gl_dbgW("Failed to get default images path!");
+                       goto RENAME_FAILED;
+               }
+
+               snprintf(temp_dir_path, GL_DIR_PATH_LEN_MAX,  "%s/%s", dir_path, etxt);
+               temp_dir_path[strlen(temp_dir_path)] = '\0';
+       } else {
+               int length = 0;
+               int i = 0;
+
+               memcpy(temp_dir_path, dir_path, GL_DIR_PATH_LEN_MAX);
+               length = strlen(dir_path);
+
+               for (i = length; i >= 0; i--) {
+                       if (temp_dir_path[i] == '/') {
+                               gl_dbg("length=%d, i=%d", length, i);
+                                /* Path like "/root/abc/" */
+                               if (i == length - 1)
+                                       continue;
+                               memcpy(&temp_dir_path[i + 1], etxt,
+                                      strlen(etxt));
+                               temp_dir_path[i + 1+ strlen(etxt)] =  '\0';
+                               break;
+                       }
+               }
+       }
+       gl_dbg("Dest folder: %s", temp_dir_path);
+
+       /* Get selected folder path for rename */
+       char rename_dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       gl_db_get_folder_fullpath(ad, album_item->cluster->uuid, rename_dir_path);
+       if (!g_strcmp0(rename_dir_path, temp_dir_path)) {
+               gl_dbgW("Same as current name!");
+               goto RENAME_FAILED;
+       }
+
+       /**
+       * If dir is empty, 1 is returned,
+       * if it contains at least 1 file, 0 is returned.
+       * On failure, -1 is returned.
+       */
+       if (ecore_file_dir_is_empty(temp_dir_path) == 0) {
+               char *popup_desc;
+               popup_desc = (char*)calloc(GL_POPUP_STRING_MAX, sizeof(char));
+               if (popup_desc == NULL) {
+                       gl_dbg("memory allocation fail");
+                       return -1;
+               }
+
+               snprintf(popup_desc, GL_POPUP_STRING_MAX, "%s.<br>%s",
+                       GL_STR_SAME_NAME_ALREADY_IN_USE, GL_STR_RETRY_Q);
+               popup_desc[strlen(popup_desc)] = '\0';
+               gl_popup_create_popup(ad, GL_POPUP_ALBUM_RENAME_DUPLICATE,
+                                     popup_desc);
+               free(popup_desc);
+               gl_dbgW("New folder already exists and not NULL, return!");
+               return -1;
+       }
+
+       if (b_root_path) {
+               /**
+               * Case 1: Rename virtual album 'No Name'.
+               * It couldn't be done by updating album record in DB directly.
+               * Cuz it would change the folder path of all folder records,
+               * to make them invalid.
+               *
+               * Create new folder under default images path,
+               * Move all medias under root path to new folder.
+               */
+               if (gl_make_new_album(etxt) != 0) {
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                                             GL_STR_UNABLE_TO_RENAME);
+                       gl_dbgE("Failed to make a new directory!");
+                       goto RENAME_FAILED;
+               }
+
+               /* Move medias from 'No Name' album to new album */
+               if (gl_move_root_album(ad, album_item, temp_dir_path) != 0) {
+                       gl_dbg("gl_move_root_album failed!");
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                                             GL_STR_UNABLE_TO_RENAME);
+                       goto RENAME_FAILED;
+               } else {
+                       gl_dbg("New album added, update albums list.");
+                       ad->albuminfo.selected_album = NULL;
+                       gl_db_update_cluster_list(ad);
+               }
+       } else {
+               /**
+               * Case 2: Rename normal album.
+               *
+               *                 Update album record in DB.
+               */
+               ret = minfo_update_cluster_name(ad->maininfo.db_handle,
+                                               album_item->cluster->uuid, etxt);
+               if (ret < 0) {
+                       gl_dbg("minfo_update_cluster_name failed (%d)!", ret);
+                       goto RENAME_FAILED;
+               }
+
+               /**
+               * Change folder name in file system
+               * for some special name, DB update success, but file mv failed.
+               * So, do this first.
+               */
+               if (ecore_file_mv(dir_path, temp_dir_path) == EINA_FALSE) {
+                       gl_dbgE("ecore_file_mv failed!");
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                                             GL_STR_UNABLE_TO_RENAME);
+               }
+       }
+       /* Update memory */
+       if (!b_root_path)
+               g_strlcpy(album_item->cluster->display_name, etxt,
+                         GL_FILE_NAME_LEN_MAX);
+       __gl_ui_rename_album_cancel_cb(ad, NULL, NULL);
+       return 0;
+
+ RENAME_FAILED:
+       __gl_ui_rename_album_cancel_cb(ad, NULL, NULL);
+       return -1;
+}
+
+static void __gl_ui_rename_album_enter_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Unfocus to hide cursor */
+       elm_object_focus_set(ad->entryinfo.imf_entry, FALSE);
+
+       __gl_ui_rename_album_done(data, true);
+}
+
+static void __gl_ui_rename_album_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("");
+       __gl_ui_rename_album_done(data, false);
+}
+
+static bool
+_gl_ui_display_nocontents(void *data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       bool is_video_file_existing = false;
+       bool is_image_file_existing = false;
+       int grid_view_mode = ad->gridinfo.grid_view_mode;
+       gl_item *gitem = NULL;
+       int i = 0;
+       bool ret = false;
+       int view_mode = gl_get_view_mode(ad);
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+
+       if (grid_view_mode == GL_CTRL_SEG_VIDEOS ||
+               grid_view_mode == GL_CTRL_SEG_IMAGES)   /*only check in video or image segment. */
+       {
+               for (i = 1; i <= cnt; i++)
+               {
+                       gl_db_get_item_by_index(ad, i, false, &gitem);
+                       if (gitem == NULL || gitem->item == NULL)
+                       {
+                               gl_dbg("gitem == NULL || gitem->item == NULL");
+                               continue;
+                       }
+
+                       if (grid_view_mode == GL_CTRL_SEG_VIDEOS &&
+                               !is_video_file_existing &&
+                           gitem->item->type == MINFO_ITEM_VIDEO)
+                       {
+                               is_video_file_existing = true;
+                               break;
+                       }
+                       else if (grid_view_mode == GL_CTRL_SEG_IMAGES
+                               && !is_image_file_existing &&
+                               gitem->item->type == MINFO_ITEM_IMAGE)
+                       {
+                               is_image_file_existing = true;
+                               break;
+                       }
+
+               }
+
+               gl_dbg("video file exists->%d, image file exists->%d",
+                       is_video_file_existing, is_image_file_existing);
+               if (grid_view_mode == GL_CTRL_SEG_VIDEOS && !is_video_file_existing)
+               {
+                       if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+                       {
+                               gl_dbg("In edit mode, back to normal view.");
+                               gl_ui_edit_cancel(ad);
+                       }
+
+                       gl_dbg("None video files, show nocontents...");
+                       ret = true;
+               }
+               else if (grid_view_mode == GL_CTRL_SEG_IMAGES && !is_image_file_existing)
+               {
+                       if (view_mode == GL_VIEW_THUMBS_EDIT)
+                       {
+                               gl_dbg("In edit mode, back to normal view.");
+                               gl_ui_edit_cancel(ad);
+                       }
+
+                       gl_dbg("None image files, show nocontents...");
+                       Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+                       if (ad->gridinfo.image_view)
+                       {
+                               evas_object_del(ad->gridinfo.image_view);
+                               ad->gridinfo.image_view = NULL;
+                       }
+                       ad->gridinfo.image_view = noc;
+                       ad->gridinfo.image_nocontents = noc;
+                       elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+                       evas_object_hide(ad->listinfo.video_view);
+                       evas_object_hide(ad->gridinfo.all_view);
+                       evas_object_show(ad->gridinfo.image_view);
+                       elm_object_part_content_set(ad->gridinfo.layout,
+                               "elm.swallow.view", ad->gridinfo.image_view);
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_THUMBS, false);
+                       ret = true;
+               }
+       }
+       return ret;
+}
+
+
+/* Select-all checkbox selected/deselected */
+static void _gl_ui_selall_check_changed(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d.", view_mode);
+
+       gl_item *current = NULL;
+       int i = 0;
+       int item_cnt = 0;
+       int sel_all_cnt = 0;
+       Eina_Bool state = EINA_FALSE;
+       state = elm_check_state_get(obj);
+       gl_dbg("Checkbox state: %d.", state);
+       /* Get all medias count of current album */
+       item_cnt = ad->maininfo.medias_cnt;
+       sel_all_cnt = item_cnt;
+       gl_ctrl_seg_mode seg_mode = ad->albuminfo.seg_mode;
+       minfo_file_type file_type = MINFO_ITEM_NONE;
+       if (view_mode == GL_VIEW_THUMBS_EDIT)
+       {
+               if (seg_mode == GL_CTRL_SEG_IMAGES)
+               {
+                       file_type = MINFO_ITEM_IMAGE;
+                       sel_all_cnt = 0;
+               }
+               else if (seg_mode == GL_CTRL_SEG_VIDEOS)
+               {
+                       file_type = MINFO_ITEM_VIDEO;
+                       sel_all_cnt = 0;
+               }
+       }
+       else if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+       {
+               file_type = MINFO_ITEM_VIDEO;
+               sel_all_cnt = 0;
+       }
+
+       gl_dbg("seg_mode=%d", seg_mode);
+       for (i = 0; i < item_cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i + 1, false, &current);
+               GL_CHECK(current);
+               GL_CHECK(current->item);
+
+               if (current->checked == state && seg_mode == GL_CTRL_SEG_ALL)
+               {
+                       continue;
+               }
+
+               if (view_mode == GL_VIEW_THUMBS_EDIT)
+               {
+                       if ((seg_mode == GL_CTRL_SEG_IMAGES) ||
+                               (seg_mode == GL_CTRL_SEG_VIDEOS))
+                       {
+                               if (current->item->type != file_type)
+                               {
+                                       continue;
+                               }
+
+                               sel_all_cnt++;
+                               if (current->checked == state)
+                               {
+                                       continue;
+                               }
+                       }
+               }
+               else if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+               {
+                       if (current->item->type != file_type)
+                       {
+                               continue;
+                       }
+
+                       sel_all_cnt++;
+                       if (current->checked == state)
+                       {
+                               continue;
+                       }
+               }
+
+               current->checked = state;
+
+               if (view_mode == GL_VIEW_THUMBS_EDIT)
+                       elm_gengrid_item_update(current->elm_item);
+
+               if (state == EINA_TRUE)
+                       gl_db_selected_list_append(ad, current);
+               else
+                       gl_db_selected_list_remove(ad, current);
+
+       }
+
+       /* Update all realized items */
+       if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+               elm_genlist_realized_items_update(ad->gridinfo.edit_view);
+
+       /* Recreate selection info for both cases */
+       if (state == EINA_FALSE)
+               sel_all_cnt = 0;
+       gl_ui_create_selinfo(ad, ad->gridinfo.edit_layout,
+                            ad->gridinfo.nf_it_edit, item_cnt,
+                            sel_all_cnt, false);
+}
+
+/* Select-all background click, selected/deselected checkbox */
+static void _gl_ui_selall_bg_click_cb(void *data, Evas_Object *o,
+                                      const char *emission,
+                                      const char *source)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       Evas_Object *ly = NULL;
+       gl_dbg("view_mode: %d.", view_mode);
+
+       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               ly = ad->gridinfo.edit_layout;
+       } else {
+              gl_dbgE("Wrong view!");
+              return;
+       }
+
+       Evas_Object *check = elm_object_part_content_get(ly, "selectall_check");
+       if (check) {
+               Eina_Bool new_state = EINA_FALSE;
+               Eina_Bool ck_state = elm_check_state_get(check);
+               /* uncheck->check */
+               if (ck_state == EINA_FALSE)
+                       new_state = EINA_TRUE;
+
+               elm_check_state_set(check, new_state);
+
+               _gl_ui_selall_check_changed(ad, check, NULL);
+       } else {
+               gl_dbgE("Get select all checkbox object failed!");
+       }
+}
+
+
+static void
+_gl_ui_edit_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       if (view_mode == GL_VIEW_ALBUMS_EDIT)
+       {
+               if (ad->albuminfo.edit_view)
+               {
+                       evas_object_del(ad->albuminfo.edit_view);
+                       ad->albuminfo.edit_view = NULL;
+                       ad->albuminfo.edit_layout = NULL;
+               }
+
+               gl_db_finalize_albums_selected_list(ad);
+               /**
+               *  after back to albums view from albums edit view,
+               *  option header should be defaultly closed
+               */
+
+               gl_db_get_cluster_list(ad);
+               GL_CHECK(ad->albuminfo.cluster_list);
+
+               gl_albums_change_to_view(ad);
+               gl_ui_destroy_selinfo(ad);
+               if (gl_check_gallery_empty(ad)) {
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  false);
+               } else {
+                       if (ad->albuminfo.cluster_list->edit_cnt == 0) {
+                               gl_dbg("None editable albums, disable items.");
+                               gl_ui_disable_toolbar_item(ad, true,
+                                                          GL_NAVI_ALBUMS,
+                                                          false);
+                       }
+               }
+       }
+       else if (view_mode == GL_VIEW_THUMBS_EDIT)
+       {
+               _gl_destroy_thumbs_edit_view(ad);
+               gl_db_selected_list_finalize(ad);
+
+               gl_set_view_mode(ad, GL_VIEW_THUMBS);
+               if (ad->albuminfo.update_albums_list)
+               {
+                       /*
+                        * Update albums list if MMC added/removed,
+                        */
+                       ad->albuminfo.update_albums_list = false;
+                       gl_refresh_albums_list(ad);
+               }
+
+               gl_grid_change_to_view(ad);
+               gl_ui_destroy_selinfo(ad);
+       }
+       else if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+       {
+               _gl_destroy_thumbs_edit_view(ad);
+               gl_db_selected_list_finalize(ad);
+               gl_set_view_mode(ad, GL_VIEW_VIDEOLIST);
+               if (ad->albuminfo.update_albums_list)
+               {
+                       /*
+                        * Update albums list if MMC added/removed
+                        */
+                       ad->albuminfo.update_albums_list = false;
+                       gl_refresh_albums_list(ad);
+               }
+
+               gl_list_change_to_view(ad);
+               gl_ui_destroy_selinfo(ad);
+       }
+}
+
+/* callback after user tap Cancel button in option header in edit view */
+static void __gl_ui_click_cancel_edit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       GL_CHECK(obj);
+       gl_appdata *ad = (gl_appdata *)data;
+       elm_naviframe_item_pop(ad->maininfo.navi_bar);
+       _gl_ui_edit_cancel_cb(data, obj, event_info);
+       return;
+}
+
+static void
+_gl_ui_edit_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->uginfo.ug_called_by_me || ad->gridinfo.append_idler)
+       {
+               /**
+               * Prevent changed to edit view in wrong way.
+               * 1. When invoke imageviewer UG;
+               * 2. First show thumbnails view, use idler to append other medias.
+               */
+               gl_dbg("UG invoked or appending gridview.");
+               return;
+       }
+
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("mode: %d", view_mode);
+       if (view_mode == GL_VIEW_THUMBS_EDIT)
+       {
+               /* Fixme: maybe we should disable edit button until grid append idler is done */
+               /**
+               * Happen in quickly tap edit button,
+               * it will invoke _gl_ui_edit_cb several time
+               * and push some unuseful views.
+               */
+               gl_dbg("Already in edit mode, return.");
+               return;
+       }
+
+       gl_ui_destroy_notiinfo(ad);
+
+       if (view_mode == GL_VIEW_ALBUMS)
+       {
+               gl_set_view_mode(ad, GL_VIEW_ALBUMS_EDIT);
+
+               ad->albuminfo.edit_layout = gl_ui_create_view_ly(ad->maininfo.navi_bar);
+               ad->albuminfo.edit_view = gl_albums_create_view(ad, ad->albuminfo.edit_layout);
+               elm_object_part_content_set(ad->albuminfo.edit_layout,
+                                      "elm.swallow.view",
+                                      ad->albuminfo.edit_view);
+               edje_object_signal_emit(_EDJ(ad->albuminfo.edit_layout),
+                                       "elm,swallow_view,state,default", "elm");
+               gl_ui_create_title_and_push(ad, ad->maininfo.navi_bar,
+                                           ad->albuminfo.edit_layout,
+                                           GL_NAVI_ALBUMS_EDIT,
+                                           GL_STR_SELECT_ALBUM);
+               return;
+       }
+       else if (view_mode == GL_VIEW_THUMBS)
+       {
+               gl_set_view_mode(ad, GL_VIEW_THUMBS_EDIT);
+               if (ad->gridinfo.grid_view_mode == GL_GRID_ALL)
+                       ad->gridinfo.edit_view = gl_grid_create_view(ad,
+                                                                    ad->maininfo.navi_bar,
+                                                                    GL_GRID_ALL);
+               else
+                       ad->gridinfo.edit_view = gl_grid_create_view(ad,
+                                                                    ad->maininfo.navi_bar,
+                                                                    GL_GRID_IMAGES);
+       }
+       else if (view_mode == GL_VIEW_VIDEOLIST)
+       {
+               gl_set_view_mode(ad, GL_VIEW_VIDEOLIST_EDIT);
+               ad->gridinfo.edit_view = gl_list_create_view(ad, ad->maininfo.navi_bar);
+       }
+
+       ad->gridinfo.edit_layout = gl_ui_create_view_ly(ad->maininfo.navi_bar);
+       evas_object_size_hint_weight_set(ad->gridinfo.edit_layout,
+               EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->gridinfo.edit_layout,
+               EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_part_content_set(ad->gridinfo.edit_layout,
+                       "elm.swallow.view", ad->gridinfo.edit_view);
+       gl_ui_create_title_and_push(ad, ad->maininfo.navi_bar,
+                                   ad->gridinfo.edit_layout,
+                                   GL_NAVI_THUMBS_EDIT, GL_STR_SELECT_ITEM);
+       edje_object_signal_emit(_EDJ(ad->gridinfo.edit_layout),
+                               "elm,swallow_view,state,thumb_edit_default",
+                               "elm");
+       gl_ui_show_selall(ad);
+
+       gl_dbg("Done");
+}
+
+/* move media to album in edit view */
+int gl_ui_move_media_to_album(gl_appdata *ad)
+{
+       GL_CHECK_VAL(ad, -1);
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("");
+
+       if (ad->uginfo.ug_called_by_me || ad->uginfo.app_called_by_me)
+       {
+               gl_dbg("UG or APP is already loaded, return.");
+               return -1;
+       }
+
+       if ((view_mode == GL_VIEW_THUMBS_EDIT) ||
+               (view_mode == GL_VIEW_VIDEOLIST_EDIT))
+       {
+
+               int cnt = gl_db_selected_list_count(ad);
+               if (cnt == 0)
+               {
+                       gl_dbg("No thumbs selected, return!");
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                               GL_STR_NO_FILES_SELECTED);
+                       return -1;
+               }
+
+               gl_popup_create_title_popup(ad, GL_POPUP_THUMB_MOVE,
+                               GL_STR_MOVE, NULL);
+               return 0;
+       }
+       else
+       {
+               gl_dbg("Unknow mode!");
+               return -1;
+       }
+}
+
+static void
+_gl_ui_medias_del_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if (ad->uginfo.ug_called_by_me || ad->uginfo.app_called_by_me)
+       {
+               gl_dbg("UG or APP is already loaded, return.");
+               return;
+       }
+
+       int view_mode = gl_get_view_mode(ad);
+       if ((view_mode == GL_VIEW_THUMBS_EDIT) ||
+               (view_mode == GL_VIEW_VIDEOLIST_EDIT))
+       {
+               int cnt = gl_db_selected_list_count(ad);
+               if (cnt == 0)
+               {
+                       gl_dbg("No thumbs selected, return!");
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT, GL_STR_NO_FILES_SELECTED);
+                       return;
+               }
+
+               gl_del_medias(ad);
+       }
+       else
+       {
+               gl_dbg("Unknow mode!");
+       }
+}
+
+static void
+_gl_ui_albums_del_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       if ((gl_get_view_mode(ad) == GL_VIEW_ALBUMS_EDIT))
+       {
+               int cnt = gl_db_get_albums_selected_cnt(ad);
+               if (cnt == 0)
+               {
+                       gl_dbg("No albums selected, return!");
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                               GL_STR_NO_ALBUMS_SELECTED);
+                       return;
+               }
+               gl_popup_create_albums_del_popup(ad);
+       }
+       else
+       {
+               gl_dbg("Unknow mode!");
+       }
+}
+
+static void
+_gl_ui_notiinfo_destroy_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+
+       gl_ui_destroy_notiinfo(ad);
+}
+
+static int _gl_ui_enable_toolbar_items(gl_appdata *ad, Elm_Object_Item *nf_it)
+{
+       GL_CHECK_VAL(ad, -1);
+       GL_CHECK_VAL(nf_it, -1);
+
+       Elm_Object_Item *cbar_it = NULL;
+       Evas_Object *ctlbar = _gl_ctrl_get_toolbar(nf_it);
+       GL_CHECK_VAL(ctlbar, -1);
+       cbar_it = elm_toolbar_first_item_get(ctlbar);
+       while (cbar_it) {
+               gl_ui_enable_cbar_item(cbar_it);
+               cbar_it = elm_toolbar_item_next_get(cbar_it);
+       }
+
+       return 0;
+}
+
+static int _gl_ui_disable_toolbar_item(void *data, gl_navi_mode mode, bool edit)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (mode == GL_NAVI_ALBUMS) {
+               gl_dbg("GL_NAVI_ALBUMS");
+               /* disable 'edit' item */
+               gl_ui_disable_cbar_item(ad->albuminfo.edit_it);
+       }else if (mode == GL_NAVI_THUMBS) {
+               gl_dbg("GL_NAVI_THUMBS");
+               /* disable 'edit' item */
+               gl_ui_disable_cbar_item(ad->gridinfo.edit_it);
+       } else {
+               gl_dbgE("Unkonw mode");
+               return -1;
+       }
+       return 0;
+}
+
+static int _gl_ui_enable_toolbar_item(void *data, gl_navi_mode mode)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("mode: %d", mode);
+       if (mode == GL_NAVI_ALBUMS) {
+               gl_dbg("GL_NAVI_ALBUMS");
+               /* enable 'edit' item */
+               if (!gl_check_gallery_empty(ad) &&
+                   ad->albuminfo.cluster_list->edit_cnt)
+                       gl_ui_enable_cbar_item(ad->albuminfo.edit_it);
+               else
+                       gl_ui_disable_cbar_item(ad->albuminfo.edit_it);
+       } else if (mode == GL_NAVI_THUMBS) {
+               gl_dbg("GL_NAVI_THUMBS");
+               /* enable 'edit' item */
+               gl_ui_enable_cbar_item(ad->gridinfo.edit_it);
+       } else {
+               gl_dbgE("Unkonw mode");
+               return -1;
+       }
+
+       return 0;
+}
+
+/**
+* Update checkbox state in select-all widget
+*/
+static int _gl_ui_update_selall(void *data, int all_cnt, int selected_cnt)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       gl_item *gitem = NULL;
+       int _all_cnt = 0;
+       int db_all_cnt = 0;
+       gl_ctrl_seg_mode ctl_seg = GL_CTRL_SEG_ALL;
+       minfo_file_type file_type = MINFO_ITEM_NONE;
+       int view_mode = gl_get_view_mode(ad);
+
+       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               /* Get all medias count */
+               db_all_cnt = ad->maininfo.medias_cnt;
+               ctl_seg = ad->albuminfo.seg_mode;
+               if (ctl_seg == GL_CTRL_SEG_ALL) {
+                       _all_cnt = db_all_cnt;
+               } else {
+                       /* Get all count in diff segments */
+                       if (ctl_seg == GL_CTRL_SEG_IMAGES)
+                               file_type = MINFO_ITEM_IMAGE;
+                       else if (ctl_seg == GL_CTRL_SEG_VIDEOS)
+                               file_type = MINFO_ITEM_VIDEO;
+
+                       for (i = 1; i <= db_all_cnt; i++) {
+                               gl_db_get_item_by_index(ad, i, false,
+                                                       &gitem);
+                               if (gitem && gitem->item &&
+                                   (gitem->item->type == file_type))
+                                       _all_cnt++;
+                       }
+               }
+       } else {
+               gl_dbg("Wrong view mode!");
+               return 0;
+       }
+
+       /**
+       * Set checkbox state
+       * except in albums edit view and selectioninfo view
+       */
+       gl_dbg("selected_cnt/_all_cnt = %d/%d", selected_cnt, _all_cnt);
+       Evas_Object *ly = NULL;
+       Evas_Object *check = NULL;
+       Eina_Bool state = EINA_FALSE;
+
+       if (selected_cnt == _all_cnt) {
+               /* Set checkbox checked */
+               state = EINA_TRUE;
+       } else {
+               /* Set checkbox unchecked */
+               state = EINA_FALSE;
+       }
+
+       ly = ad->gridinfo.edit_layout;
+       check = elm_object_part_content_get(ly, "selectall_check");
+       if (check)
+               elm_check_state_set(check, state);
+       else
+               return -1;
+
+       return 0;
+}
+
+/**
+* Update selectioinfo widget and view related to it
+*/
+static int _gl_ui_update_view_selinfo(void *data, int selected_cnt)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *sel_edj = NULL;
+       const char *emis = NULL;
+       Evas_Object *v_edj = NULL;
+       const char *v_emis = NULL;
+       int view_mode = gl_get_view_mode(ad);
+
+       sel_edj = _EDJ(ad->popupinfo.selinfo_ly);
+
+       if (selected_cnt > 0) {
+               if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                       view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+                       v_edj = _EDJ(ad->gridinfo.edit_layout);
+                       v_emis = "elm,swallow_view,state,moveup_view";
+               } else if (view_mode == GL_VIEW_ALBUMS_EDIT) {
+                       emis = "elm,selectioninfo,portrait";
+                       v_emis = "elm,swallow_view,state,moveup_albums_default";
+                       v_edj = _EDJ(ad->albuminfo.edit_layout);
+               }
+               /* Set selectioninfo widget style */
+               edje_object_signal_emit(sel_edj, emis, "elm");
+               /* Move view up while selectioninfo shown. */
+               edje_object_signal_emit(v_edj, v_emis, "elm");
+       } else {
+               if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                       view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+                       v_edj = _EDJ(ad->gridinfo.edit_layout);
+                       v_emis = "elm,swallow_view,state,thumb_edit_default";
+               } else if (view_mode == GL_VIEW_ALBUMS_EDIT) {
+                       v_edj = _EDJ(ad->albuminfo.edit_layout);
+                       v_emis = "elm,swallow_view,state,default";
+               }
+               /* Restore view while selectioninfo vanished. */
+               edje_object_signal_emit(v_edj, v_emis, "elm");
+       }
+       return 0;
+}
+
+/**
+* Create a new notify widget
+* b_selinfo, True: Create selectioninfo, False: Create notificationinfo.
+*/
+static int _gl_ui_add_notify(void *data, Evas_Object *parent, bool b_selinfo)
+{
+       gl_dbg("b_selinfo: %d.", b_selinfo);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (b_selinfo)
+               gl_ui_destroy_selinfo(ad);
+       else
+               gl_ui_destroy_notiinfo(ad);
+
+       ad->popupinfo.selinfo = elm_notify_add(parent);
+       elm_notify_orient_set(ad->popupinfo.selinfo,
+                             ELM_NOTIFY_ORIENT_BOTTOM);
+       evas_object_size_hint_weight_set(ad->popupinfo.selinfo,
+                                        EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->popupinfo.selinfo,
+                                       EVAS_HINT_FILL,
+                                       EVAS_HINT_FILL);
+
+       ad->popupinfo.selinfo_ly = elm_layout_add(parent);
+       /* Set custom theme to notify layout */
+       elm_layout_theme_set(ad->popupinfo.selinfo_ly, "standard",
+                            "selectioninfo",
+                            "selectioninfo_viewer");
+
+       evas_object_size_hint_weight_set(ad->popupinfo.selinfo_ly,
+                                        EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->popupinfo.selinfo_ly,
+                                       EVAS_HINT_FILL,
+                                       EVAS_HINT_FILL);
+       /* Set the content of the notify widget */
+       elm_object_content_set(ad->popupinfo.selinfo,
+                              ad->popupinfo.selinfo_ly);
+
+       if (!b_selinfo) {
+               /* Add callbacks for notificationinfo */
+               evas_object_smart_callback_add(ad->popupinfo.selinfo,
+                                              "timeout",
+                                              _gl_ui_notiinfo_destroy_cb,
+                                              ad);
+               elm_notify_timeout_set(ad->popupinfo.selinfo, 2);
+       } else {
+               /* Add callbacks for selectioninfo */
+               evas_object_smart_callback_add(ad->popupinfo.selinfo,
+                                              "timeout",
+                                              _gl_ui_selinfo_destroy_cb, ad);
+               elm_notify_timeout_set(ad->popupinfo.selinfo, 3);
+       }
+       return 0;
+}
+
+static void __gl_ui_move_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_ui_move_media_to_album(data);
+       return;
+}
+
+/* pause gallery and change view to background after tap Back button in albums view */
+static void __gl_ui_change_to_background_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       gl_dbg("Back button clicked, change view to background.");
+       GL_CHECK(data);
+       Evas_Object *win = (Evas_Object *) data;
+       elm_win_lower(win);
+       return;
+}
+
+static int __gl_ui_append_object_item(Evas_Object *cbar, Evas_Object *object)
+{
+       Elm_Object_Item *item = elm_toolbar_item_append(cbar, NULL, NULL, NULL,
+                                                       NULL);
+       if (object)
+               elm_object_item_part_content_set(item, "object", object);
+       else
+
+               elm_object_item_disabled_set(item, EINA_TRUE);
+       return 0;
+}
+
+static void __gl_ui_trans_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbgW("view_mode: %d", view_mode);
+       evas_object_smart_callback_del(obj, GL_TRANS_FINISHED,
+                                      __gl_ui_trans_finished_cb);
+
+       if (view_mode == GL_VIEW_ALBUMS_EDIT) {
+               elm_gengrid_clear(ad->albuminfo.view);
+       } else if (view_mode == GL_VIEW_ALBUMS_RENAME) {
+               elm_gengrid_clear(ad->albuminfo.edit_view);
+       } else if (view_mode == GL_VIEW_THUMBS_EDIT) {
+               if (ad->entryinfo.entry_mode != GL_ENTRY_NONE)
+                       return;
+               if (ad->albuminfo.seg_mode == GL_CTRL_SEG_ALL)
+                       elm_gengrid_clear(ad->gridinfo.all_view);
+               else if (ad->albuminfo.seg_mode == GL_CTRL_SEG_IMAGES)
+                       elm_gengrid_clear(ad->gridinfo.image_view);
+       } else if (view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               if (ad->entryinfo.entry_mode != GL_ENTRY_NONE)
+                       return;
+               elm_genlist_clear(ad->listinfo.video_view);
+       }
+}
+
+/**
+ *  Use naviframe api to push albums view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_albums(void *data, Evas_Object *parent,
+                                   Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_ALBUMS");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Elm_Object_Item *edit_it = NULL;
+       Elm_Object_Item *add_it = NULL;
+       Evas_Object *end_btn = NULL;
+       Evas_Object *bot_bar = NULL;
+
+       /* create tool controlbar downside */
+       bot_bar = _gl_ctrl_create_toolbar(ad, obj);
+       GL_CHECK_VAL(bot_bar, -1);
+       /* add edit item */
+       edit_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_EDIT, NULL,
+                                         _gl_ui_edit_cb, ad);
+       ad->albuminfo.edit_it = edit_it;
+       gl_ui_enable_cbar_item(edit_it);
+       __gl_ui_append_object_item(bot_bar, NULL);
+       __gl_ui_append_object_item(bot_bar, NULL);
+
+       /**
+       *  add End button in navigation var first view in galery
+       *   with style "naviframe/back_btn/gallery"
+       *  so after tap this button,gallery is paused
+       *  but change view to background
+       */
+       GL_CHECK_VAL(ad->maininfo.win, -1);
+       end_btn = _gl_but_create_but(obj, GL_BUT_NONE, GL_BUTTON_STYLE_NAVI_PRE);
+       evas_object_smart_callback_add(end_btn, "clicked",
+                                      __gl_ui_change_to_background_cb,
+                                      ad->maininfo.win);
+
+       /* Disable items in exit mode */
+       if (ad->maininfo.app_exit_mode) {
+               gl_ui_disable_cbar_item(edit_it);
+               gl_ui_disable_cbar_item(add_it);
+       }
+       /* Push view to stack */
+       nf_it = elm_naviframe_item_push(parent, title, end_btn, NULL, obj, NULL);
+       ad->albuminfo.nf_it = nf_it;
+       /* Set tool controlbar to bottom */
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_CONTROLBAR,
+                                        bot_bar);
+       return 0;
+}
+
+/**
+ *  Use naviframe api to push albums edit view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_albums_edit(void *data, Evas_Object *parent,
+                                        Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_ALBUMS_EDIT");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Elm_Object_Item *cancel_it = NULL;
+       Elm_Object_Item *del_it = NULL;
+       Evas_Object *bot_bar = NULL;
+
+       /* create tool controlbar downside */
+       bot_bar = _gl_ctrl_create_toolbar(ad, obj);
+       GL_CHECK_VAL(bot_bar, -1);
+
+       /* Add delete item */
+       del_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_DELETE, NULL,
+                                        _gl_ui_albums_del_cb, ad);
+       gl_ui_disable_cbar_item(del_it);
+       __gl_ui_append_object_item(bot_bar, NULL);
+       __gl_ui_append_object_item(bot_bar, NULL);
+
+       /* use Cancel button */
+       cancel_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_CANCEL, NULL,
+                                           __gl_ui_click_cancel_edit_cb, ad);
+       /* Add transition finished callback */
+       evas_object_smart_callback_add(parent, GL_TRANS_FINISHED,
+                                      __gl_ui_trans_finished_cb, ad);
+       /* Push to stack */
+       nf_it = elm_naviframe_item_push(parent, title, NULL, NULL,
+                                       obj, NULL);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_PREB_BTN, NULL);
+
+       ad->albuminfo.nf_it_edit = nf_it;
+       /* Set tool bar to bottom */
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_CONTROLBAR,
+                                        bot_bar);
+       return 0;
+}
+
+/**
+ *  Use naviframe api to push thumbnails view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_thumbs(void *data, Evas_Object *parent,
+                                   Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_THUMBS");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Elm_Object_Item *edit_it = NULL;
+       Evas_Object *bot_bar = NULL;
+       Evas_Object *segment = NULL;
+
+       /* create tool controlbar downside */
+       bot_bar = _gl_ctrl_create_toolbar(ad, obj);
+       GL_CHECK_VAL(bot_bar, -1);
+       /* add 'Back' item */
+       if (ad->maininfo.medias_cnt) {
+               /* add 'Edit' item */
+               edit_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_EDIT,
+                                                 NULL, _gl_ui_edit_cb, ad);
+               ad->gridinfo.edit_it = edit_it;
+               /* add segment */
+               segment = _gl_ctrl_create_segment(ad, bot_bar);
+               if(segment)
+                       __gl_ui_append_object_item(bot_bar, segment);
+       }
+#if 1
+       nf_it = elm_naviframe_top_item_get(parent);
+       /* For the instant transition, use the xxx_insert_after API */
+       nf_it = elm_naviframe_item_insert_after(parent, nf_it, title,
+                                               NULL, NULL, obj, NULL);
+#else
+       /* Push to stack */
+       nf_it = elm_naviframe_item_push(parent, title, NULL, NULL, obj, NULL);
+#endif
+       ad->gridinfo.nf_it = nf_it;
+       /* Set tool bar to bottom */
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_CONTROLBAR,
+                                        bot_bar);
+       return 0;
+}
+
+
+/**
+ *  Use naviframe api to push thumbnails eidt view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_thumbs_edit(void *data, Evas_Object *parent,
+                                        Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_THUMBS_EDIT");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Elm_Object_Item *del_it = NULL;
+       Elm_Object_Item *move_it = NULL;
+       Elm_Object_Item *cancel_it = NULL;
+       Evas_Object *bot_bar = NULL;
+
+       /* create tool controlbar downside */
+       bot_bar = _gl_ctrl_create_toolbar(ad, obj);
+       GL_CHECK_VAL(bot_bar, -1);
+       /* Add 'Delete' item */
+       del_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_DELETE, NULL,
+                                        _gl_ui_medias_del_cb, ad);
+       gl_ui_disable_cbar_item(del_it);
+       /* Add 'Move' item */
+       move_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_MOVE, NULL,
+                                         __gl_ui_move_cb, ad);
+       gl_ui_disable_cbar_item(move_it);
+       /* use Cancel button */
+       cancel_it = elm_toolbar_item_append(bot_bar, GL_CBAR_ICON_CANCEL, NULL,
+                                           __gl_ui_click_cancel_edit_cb, ad);
+       /* Add transition finished callback */
+       evas_object_smart_callback_add(parent, GL_TRANS_FINISHED,
+                                      __gl_ui_trans_finished_cb, ad);
+       /* Push to stack */
+       nf_it = elm_naviframe_item_push(parent, title, NULL, NULL, obj,
+                                       NULL);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_PREB_BTN, NULL);
+
+       ad->gridinfo.nf_it_edit = nf_it;
+       /* Set tool bar to bottom */
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_CONTROLBAR,
+                                        bot_bar);
+
+       return 0;
+}
+
+/**
+ *  Use naviframe api to push albums rename view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_albums_rename(void *data, Evas_Object *parent,
+                                          Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_ALBUMS_RENAME");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Evas_Object *done_btn = NULL;
+       Evas_Object *cancel_btn = NULL;
+
+       /* Add transition finished callback */
+       evas_object_smart_callback_add(parent, GL_TRANS_FINISHED,
+                                      __gl_ui_trans_finished_cb, ad);
+       nf_it = elm_naviframe_item_push(parent, title, NULL, NULL, obj, NULL);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_PREB_BTN, NULL);
+       /* Add 'Cancel' button */
+       cancel_btn = _gl_but_create_but(obj, GL_BUT_CANCEL,
+                                       GL_BUTTON_STYLE_NAVI_TITLE);
+       GL_CHECK_VAL(cancel_btn, -1);
+       evas_object_smart_callback_add(cancel_btn, "clicked",
+                                      __gl_ui_rename_album_cancel_cb, ad);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_TITLE_RIGHT_BTN,
+                                        cancel_btn);
+       /* Add 'Done' button */
+       done_btn = _gl_but_create_but(obj, GL_BUT_DONE,
+                                     GL_BUTTON_STYLE_NAVI_TITLE);
+       GL_CHECK_VAL(done_btn, -1);
+       evas_object_smart_callback_add(done_btn, "clicked",
+                                      __gl_ui_rename_album_done_cb, ad);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_TITLE_LEFT_BTN,
+                                        done_btn);
+       ad->entryinfo.done_btn = done_btn;
+       return 0;
+}
+
+/**
+ *  Use naviframe api to push new album view to stack.
+ *  @param obj is the content to be pushed.
+ */
+static int __gl_ui_push_view_albums_new(void *data, Evas_Object *parent,
+                                       Evas_Object *obj, char *title)
+{
+       gl_dbg("GL_NAVI_ALBUMS_NEW");
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Elm_Object_Item *nf_it = NULL;
+       Evas_Object *done_btn = NULL;
+       Evas_Object *cancel_btn = NULL;
+
+       nf_it = elm_naviframe_item_push(parent, title, NULL, NULL, obj, NULL);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_PREB_BTN, NULL);
+       /* Add 'Cancel' button */
+       cancel_btn = _gl_but_create_but(obj, GL_BUT_CANCEL,
+                                       GL_BUTTON_STYLE_NAVI_TITLE);
+       GL_CHECK_VAL(cancel_btn, -1);
+       evas_object_smart_callback_add(cancel_btn, "clicked",
+                                      _gl_ui_newalbum_cancel_cb, ad);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_TITLE_RIGHT_BTN,
+                                        cancel_btn);
+       /* Add 'Done' button */
+       done_btn = _gl_but_create_but(obj, GL_BUT_DONE,
+                                     GL_BUTTON_STYLE_NAVI_TITLE);
+       GL_CHECK_VAL(done_btn, -1);
+       evas_object_smart_callback_add(done_btn, "clicked",
+                                      _gl_ui_newalbum_done_cb, ad);
+       elm_object_item_part_content_set(nf_it, GE_NAVIFRAME_TITLE_LEFT_BTN,
+                                        done_btn);
+       ad->entryinfo.done_btn = done_btn;
+       return 0;
+}
+
+int gl_ui_reset_toolbar_item(void *data, gl_ctrl_seg_mode seg_mode, bool force)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       bool is_zero = false;
+
+       gl_dbg("changed between tool tab(all/image/video)");
+       if (seg_mode == GL_CTRL_SEG_VIDEOS)
+               is_zero = gl_db_is_item_cnt_zero(ad, MINFO_ITEM_VIDEO);
+       else if (seg_mode == GL_CTRL_SEG_IMAGES)
+               is_zero = gl_db_is_item_cnt_zero(ad, MINFO_ITEM_IMAGE);
+
+       Elm_Object_Item *ctl_it = NULL;
+       ctl_it = ad->gridinfo.edit_it;
+
+       /* none items, disable 'edit' item */
+       if (is_zero) {
+               gl_ui_disable_cbar_item(ctl_it);
+       } else {
+               gl_ui_enable_cbar_item(ctl_it);
+       }
+       return 0;
+}
+
+int gl_ui_disable_toolbar_item(void *data, bool disabled, gl_navi_mode mode,
+                              bool edit)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("Title button disabled: %d.", disabled);
+       if (disabled)
+               _gl_ui_disable_toolbar_item(data, mode, edit);
+       else
+               _gl_ui_enable_toolbar_item(data, mode);
+
+       return 0;
+}
+
+int gl_ui_disable_cbar_item(Elm_Object_Item *it)
+{
+       if (it)
+               elm_object_item_disabled_set(it, EINA_TRUE);
+       return 0;
+}
+
+int gl_ui_enable_cbar_item(Elm_Object_Item *it)
+{
+       if(it)
+               elm_object_item_disabled_set(it, EINA_FALSE);
+       return 0;
+}
+
+int gl_ui_disable_toolbar_items(void *data, Elm_Object_Item *nf_it)
+{
+       GL_CHECK_VAL(data, -1);
+       GL_CHECK_VAL(nf_it, -1);
+
+       Elm_Object_Item *cbar_it = NULL;
+       Evas_Object *ctlbar = _gl_ctrl_get_toolbar(nf_it);
+       cbar_it = elm_toolbar_last_item_get(ctlbar);
+       GL_CHECK_VAL(cbar_it, -1);
+       cbar_it = elm_toolbar_item_prev_get(cbar_it);
+       while (cbar_it) {
+               gl_ui_disable_cbar_item(cbar_it);
+               cbar_it = elm_toolbar_item_prev_get(cbar_it);
+       }
+
+       return 0;
+}
+
+/* The maximun length reached callback */
+void __gl_ui_entry_maxlen_reached_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       gl_dbg("Entry maximum length reached, vibrate device.");
+       GL_CHECK(data);
+       /* Vibrate device if maximum length reached */
+       gl_play_vibration(data);
+}
+
+static void __gl_editfield_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(obj);
+       GL_CHECK(data);
+       if (!elm_entry_is_empty(obj)) {
+               gl_dbg("Show eraser.");
+               elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       }
+}
+
+static void __gl_editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       GL_CHECK(data);
+       gl_dbg("Hide eraser.");
+       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+}
+
+static void __gl_editfield_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       GL_CHECK(data);
+       gl_dbg("Clear emtry after eraser clicked.");
+       elm_entry_entry_set(data, "");
+}
+
+/*
+* Callback registered to signal 'changed' of entry.
+* It would get the entry string and check whether it's different
+* with original string or not, if so, enable 'Done' button, other disable it.
+*/
+void __gl_ui_entry_space_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK(ad);
+       GL_CHECK(ad->entryinfo.editfield);
+       GL_CHECK(ad->entryinfo.done_btn);
+       const char *entry_str = NULL;
+
+       /* Show/hide eraser */
+       if (elm_object_focus_get(ad->entryinfo.editfield)) {
+               if (elm_entry_is_empty(obj)) {
+                       gl_dbg("Show eraser.");
+                       elm_object_signal_emit(ad->entryinfo.editfield,
+                                              "elm,state,eraser,hide", "elm");
+               } else {
+                       gl_dbg("Hide eraser.");
+                       elm_object_signal_emit(ad->entryinfo.editfield,
+                                              "elm,state,eraser,show", "elm");
+               }
+       }
+
+       /* Get entry string. */
+       GL_CHECK(ad->entryinfo.imf_entry);
+       entry_str = elm_entry_entry_get(ad->entryinfo.imf_entry);
+       GL_CHECK(entry_str);
+       /**
+       * Changes entry string to utf-8 encoding format,
+       * other some special characters cannot be showed correctly.
+       */
+       char *entry_utf8 = elm_entry_markup_to_utf8(entry_str);
+       GL_CHECK(entry_utf8);
+       /**
+       *  Removes leading and trailing whitespace
+       *  to avoid showing popup when new name is only composed by space
+       *  or avoid showing popup in the case when after trip leading and trailing space,
+       *  new name is same as existing name
+       */
+       g_strstrip((gchar*)entry_utf8);
+       GL_CHECK(entry_utf8);
+       gl_dbg("New entry string without space: [%s]", entry_utf8);
+
+       bool b_disabled = false;
+       /**
+       * If entry string is empty, disable 'Done' button,
+       * including create album and rename album.
+       */
+       if (!strlen(entry_utf8)) {
+               gl_dbg("Entry string is empty!");
+               b_disabled = true;
+       }
+
+       gl_dbg("En/Disable Done button[%d]", b_disabled);
+       elm_object_disabled_set(ad->entryinfo.done_btn, b_disabled);
+
+       /* Free string got from elm_entry_markup_to_utf8() */
+       if (entry_utf8) {
+               free(entry_utf8);
+               entry_utf8 = NULL;
+       }
+}
+
+int gl_ui_cancel_rename_album(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("");
+       __gl_ui_rename_album_cancel_cb(data, NULL, NULL);
+
+       return 0;
+}
+
+int
+gl_ui_cancel_new_album(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_dbg("");
+       _gl_ui_newalbum_cancel_cb(data, NULL, NULL);
+
+       return 0;
+}
+
+int
+gl_ui_move_to_newalbum(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *editfield_ly = NULL;
+       gl_dbg("");
+
+       ad->entryinfo.entry_mode = GL_ENTRY_NEW_ALBUM;
+       editfield_ly = gl_ui_create_view_ly(ad->maininfo.navi_bar);
+       Evas_Object *entry_ly = _gl_ui_create_editfield(ad, editfield_ly, NULL);
+       evas_object_smart_callback_add(ad->entryinfo.imf_entry, "activated",
+                                      _gl_ui_newalbum_enter_cb, ad);
+       elm_object_part_content_set(editfield_ly, "elm.swallow.view", entry_ly);
+       edje_object_signal_emit(_EDJ(editfield_ly),
+                               "elm,swallow_view,state,default", "elm");
+       ad->entryinfo.imf_ly = NULL;
+       gl_ui_create_title_and_push(ad, ad->maininfo.navi_bar, editfield_ly,
+                                   GL_NAVI_ALBUMS_NEW, GL_STR_NEW_ALBUM);
+       elm_entry_cursor_line_end_set(ad->entryinfo.imf_entry);
+       elm_object_focus_set(ad->entryinfo.imf_entry, TRUE);
+       ecore_imf_context_input_panel_show(ad->entryinfo.imf_context);
+
+       return 0;
+}
+
+int gl_ui_rename_album(gl_cluster *album_item)
+{
+       GL_CHECK_VAL(album_item, -1);
+       GL_CHECK_VAL(album_item->cluster, -1);
+       GL_CHECK_VAL(album_item->cluster->display_name, -1);
+       GL_CHECK_VAL(album_item->ad, -1);
+       gl_appdata *ad = (gl_appdata *)album_item->ad;
+       int view_mode = gl_get_view_mode(ad);
+       Evas_Object *editfield_ly = NULL;
+       Evas_Object *entry_ly = NULL;
+       gl_dbg("");
+       if(ad->maininfo.rename_album_job) {
+               ecore_job_del(ad->maininfo.rename_album_job);
+               ad->maininfo.rename_album_job = NULL;
+       }
+       if (view_mode != GL_VIEW_ALBUMS_EDIT) {
+               gl_dbgE("Unexpected view mode(%d)!", view_mode);
+               return -1;
+       }
+
+       /* save album selected for rename */
+       ad->albuminfo.selected_album = album_item;
+
+       gl_set_view_mode(ad, GL_VIEW_ALBUMS_RENAME);
+
+       editfield_ly = gl_ui_create_view_ly(ad->maininfo.navi_bar);
+       entry_ly = _gl_ui_create_editfield(ad, editfield_ly,
+                                          album_item->cluster->display_name);
+       evas_object_smart_callback_add(ad->entryinfo.imf_entry, "activated",
+                                      __gl_ui_rename_album_enter_cb, ad);
+       elm_object_part_content_set(editfield_ly, "elm.swallow.view", entry_ly);
+       edje_object_signal_emit(_EDJ(editfield_ly),
+                               "elm,swallow_view,state,default", "elm");
+       ad->entryinfo.imf_ly = NULL;
+       gl_ui_create_title_and_push(ad, ad->maininfo.navi_bar, editfield_ly,
+                                   GL_NAVI_ALBUMS_RENAME, GL_STR_CHNAGE_NAME);
+       elm_entry_cursor_line_end_set(ad->entryinfo.imf_entry);
+       elm_object_focus_set(ad->entryinfo.editfield, TRUE);
+       ecore_imf_context_input_panel_show(ad->entryinfo.imf_context);
+       return 0;
+}
+
+int gl_ui_create_title_and_push(void *data, Evas_Object *parent,
+                               Evas_Object *obj, gl_navi_mode mode, char *title)
+{
+       GL_CHECK_VAL(obj, -1);
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+
+       if (mode == GL_NAVI_ALBUMS)
+               __gl_ui_push_view_albums(data, parent, obj, title);
+       else if (mode == GL_NAVI_ALBUMS_EDIT)
+               __gl_ui_push_view_albums_edit(data, parent, obj, title);
+       else if (mode == GL_NAVI_THUMBS)
+               __gl_ui_push_view_thumbs(data, parent, obj, title);
+       else if (mode == GL_NAVI_THUMBS_EDIT)
+               __gl_ui_push_view_thumbs_edit(data, parent, obj, title);
+       else if (mode == GL_NAVI_ALBUMS_RENAME)
+               __gl_ui_push_view_albums_rename(data, parent, obj, title);
+       else if (mode == GL_NAVI_ALBUMS_NEW)
+               __gl_ui_push_view_albums_new(data, parent, obj, title);
+       gl_dbg("Done");
+       return 0;
+}
+
+bool
+gl_ui_display_nocontents(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       return _gl_ui_display_nocontents(ad);
+}
+
+Evas_Object *
+gl_ui_load_edj(Evas_Object * parent, const char *file, const char *group)
+{
+       Evas_Object *eo = NULL;
+       int r = 0;
+
+       eo = elm_layout_add(parent);
+       if (eo)
+       {
+               r = elm_layout_file_set(eo, file, group);
+               if (!r)
+               {
+                       evas_object_del(eo);
+                       return NULL;
+               }
+
+               evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       }
+
+       return eo;
+}
+
+int gl_ui_edit_cancel(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       Elm_Object_Item *nf_it = NULL;
+
+       if (view_mode == GL_VIEW_ALBUMS_EDIT ||
+           view_mode == GL_VIEW_ALBUMS_RENAME) {
+               if (view_mode != GL_VIEW_ALBUMS_EDIT) {
+                       gl_dbg("GL_VIEW_ALBUMS_xxx->Edit");
+                       gl_set_view_mode(ad, GL_VIEW_ALBUMS_EDIT);
+               }
+               nf_it = ad->albuminfo.nf_it;
+       } else if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                  view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               nf_it = ad->gridinfo.nf_it;
+       }
+       elm_naviframe_item_pop_to(nf_it);
+       _gl_ui_edit_cancel_cb(ad, NULL, NULL);
+
+       return 0;
+}
+
+/* Back to normal thumbnail view */
+int gl_ui_back_to_normal(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       _gl_destroy_thumbs_edit_view(ad);
+       elm_naviframe_item_pop_to(ad->gridinfo.nf_it);
+       _gl_ui_edit_cancel_cb(ad, NULL, NULL);
+
+       return 0;
+}
+
+Evas_Object *gl_ui_create_nocontents_full(void *data)
+{
+       GL_CHECK_NULL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       Evas_Object *noc_lay = NULL;
+       char label_str[GL_POPUP_DESC_LEN_MAX] = { 0, };
+
+       if (ad->maininfo.app_exit_mode == GL_APP_EXIT_NONE) {
+               int grid_mode = ad->gridinfo.grid_view_mode;
+               switch (grid_mode) {
+               case GL_GRID_ALL:
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char *)(GL_STR_NO_ITEMS));
+                       break;
+               case GL_GRID_VIDEOS:
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char *)(GL_STR_NO_VIDEOS));
+                       break;
+               case GL_GRID_IMAGES:
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char *)(GL_STR_NO_IMAGES));
+                       break;
+               case GL_GRID_ALBUMS:
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char *)(GL_STR_NO_ALBUMS));
+                       break;
+               default:
+                       snprintf(label_str, sizeof(label_str), "%s",
+                                (char *)(GL_STR_NO_CONTENTS));
+                       break;
+               }
+       } else {
+               /* It's in Usb Mass Storage mode */
+               snprintf(label_str, sizeof(label_str), "%s<br>%s",
+                        (char *)(GL_STR_NO_CONTENTS),
+                        (char *)(GL_STR_UNABLE_USE_IN_UMS_MODE));
+       }
+
+       gl_dbg("Nocontents label: %s", label_str);
+       /* Full view nocontents */
+       noc_lay = elm_layout_add(ad->maininfo.navi_bar);
+       GL_CHECK_NULL(noc_lay);
+       elm_object_part_text_set(noc_lay, "elm.text", label_str);
+       elm_layout_theme_set(noc_lay, "layout", "nocontents", "gallery");
+
+       return noc_lay;
+}
+
+/**
+* Add new notify widget, select-all widget and set view state.
+*
+* b_update, if true, update text only, other recreate notify widget
+*/
+int gl_ui_create_selinfo(void *data, Evas_Object *parent, Elm_Object_Item *nf_it,
+                         int all_cnt, int selected_cnt, bool b_update)
+{
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       GL_CHECK_VAL(nf_it, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       char text[GL_POPUP_DESC_LEN_MAX] = { 0, };
+
+       gl_dbg("selected_cnt/all_cnt = %d/%d", selected_cnt, all_cnt);
+       if (selected_cnt > all_cnt) {
+               gl_ui_destroy_selinfo(ad);
+               gl_dbgE("selected_cnt > all_cnt!");
+               return -1;
+       }
+
+       /* Create new notify widget */
+       if (b_update == false)
+               _gl_ui_add_notify(ad, parent, true);
+
+       /* Reuse old notify widget in update case */
+       GL_CHECK_VAL(ad->popupinfo.selinfo, -1);
+       GL_CHECK_VAL(ad->popupinfo.selinfo_ly, -1);
+
+       /* Update state of checkbox in select-all widget */
+       _gl_ui_update_selall(ad, all_cnt, selected_cnt);
+
+       /* Update notify widget and view related to it */
+       _gl_ui_update_view_selinfo(ad, selected_cnt);
+
+       if (selected_cnt > 0) {
+               /* Enable/Disable control bar buttons */
+               _gl_ui_enable_toolbar_items(ad, nf_it);
+               snprintf(text, sizeof(text), "%s (%d)", GL_STR_SELECTED,
+                        selected_cnt);
+               /* Set the text for notify */
+               edje_object_part_text_set(_EDJ(ad->popupinfo.selinfo_ly),
+                                         "elm.text", text);
+               evas_object_show(ad->popupinfo.selinfo);
+       } else {
+               /* Disable control bar buttons */
+               gl_ui_disable_toolbar_items(ad, nf_it);
+               gl_ui_destroy_selinfo(ad);
+       }
+
+       return 0;
+}
+
+int
+gl_ui_destroy_selinfo(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       /* The selectioninfo_ly was filled in selectioninfo, so delete selectioninfo_ly first. */
+       if (ad->popupinfo.selinfo_ly)
+       {
+               evas_object_del(ad->popupinfo.selinfo_ly);
+               ad->popupinfo.selinfo_ly = NULL;
+       }
+
+       if (ad->popupinfo.selinfo)
+       {
+               evas_object_smart_callback_del(ad->popupinfo.selinfo,
+                               "timeout", _gl_ui_selinfo_destroy_cb);
+               evas_object_del(ad->popupinfo.selinfo);
+               ad->popupinfo.selinfo = NULL;
+       }
+
+       return 0;
+}
+
+/**
+* Update checkbox state and add click signal to Select-all widget.
+* Show arrow button in thumbnails/list edit mode.
+*/
+int gl_ui_show_selall(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       Eina_Bool ck_state = EINA_FALSE;
+       Evas_Object *view_ly = NULL;
+       char *sig = "selectall_show";
+
+       gl_dbg("view_mode: %d.", view_mode);
+       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               view_ly = ad->gridinfo.edit_layout;
+               if (ad->maininfo.medias_cnt == gl_db_selected_list_count(ad))
+                       ck_state = EINA_TRUE;
+               if (view_mode == GL_VIEW_VIDEOLIST_EDIT)
+                       sig = "selectall_show_video";
+       } else {
+               gl_dbgE("Wrong view!");
+               return -1;
+       }
+
+       const char *text = NULL;
+       text = edje_object_part_text_get(_EDJ(view_ly), "selectall_text");
+       if (text == NULL || g_strcmp0(text, GL_STR_SELECT_ALL))
+               edje_object_part_text_set(_EDJ(view_ly), "selectall_text",
+                                         GL_STR_SELECT_ALL);
+
+       Evas_Object *old_check = NULL;
+       old_check = elm_object_part_content_unset(view_ly, "selectall_check");
+       if (old_check)
+               evas_object_del(old_check);
+
+       Evas_Object *check = elm_check_add(view_ly);
+       elm_object_style_set(check, GL_CHECKBOX_STYLE_DEFAULT);
+       evas_object_propagate_events_set(check, EINA_FALSE);
+       elm_check_state_set(check, ck_state);
+
+       elm_object_part_content_set(view_ly, "selectall_check", check);
+       evas_object_smart_callback_add(check, "changed",
+                                      _gl_ui_selall_check_changed, ad);
+       edje_object_signal_emit(_EDJ(view_ly), sig, "elm");
+
+       /* Add signal to select-all bg */
+       edje_object_signal_callback_del(_EDJ(view_ly), "elm,action,click",
+                                       "selectall_bg",
+                                       _gl_ui_selall_bg_click_cb);
+       edje_object_signal_callback_add(_EDJ(view_ly), "elm,action,click",
+                                       "selectall_bg",
+                                       _gl_ui_selall_bg_click_cb, ad);
+
+       return 0;
+}
+
+/* Update checkbox state of Select-all and selectioninfo */
+int gl_ui_update_select_widgets(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Update checkbox state of Select-all */
+       gl_ui_show_selall(ad);
+       /* Update selectioninfo */
+       int cnt = ad->maininfo.medias_cnt;
+       int sel_cnt = gl_db_selected_list_count(ad);
+       gl_ui_create_selinfo(ad, ad->gridinfo.edit_layout,
+                            ad->gridinfo.nf_it_edit, cnt, sel_cnt, false);
+       return 0;
+}
+
+int gl_ui_create_notiinfo(void *data, Evas_Object *parent,
+                          gl_ui_notify_mode n_mode)
+{
+       GL_CHECK_VAL(parent, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       const char *text = NULL;
+       gl_dbg("");
+
+       _gl_ui_add_notify(ad, parent, false);
+       GL_CHECK_VAL(ad->popupinfo.selinfo, -1);
+       GL_CHECK_VAL(ad->popupinfo.selinfo_ly, -1);
+
+       edje_object_signal_emit(_EDJ(ad->popupinfo.selinfo_ly),
+                               "elm,selectioninfo,portrait", "elm");
+
+       switch (n_mode) {
+       case GL_UI_NOTIFY_DELETED:
+               text = GL_STR_DELETED;
+               break;
+       case GL_UI_NOTIFY_REMOVED:
+               text = GL_STR_REMOVED;
+               break;
+       case GL_UI_NOTIFY_ADDED:
+               text = GL_STR_ADDED;
+               break;
+       case GL_UI_NOTIFY_MOVED:
+               text = GL_STR_MOVED;
+               break;
+       default:
+               gl_dbgE("GL_UI_NOTIFY_xxx, Error mode!");
+               break;
+       }
+
+       edje_object_part_text_set(_EDJ(ad->popupinfo.selinfo_ly), "elm.text",
+                                 text);
+       evas_object_show(ad->popupinfo.selinfo);
+
+       return 0;
+}
+
+int
+gl_ui_destroy_notiinfo(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       /* The selectioninfo_ly was filled in selectioninfo, so delete selectioninfo_ly first. */
+       if (ad->popupinfo.selinfo_ly)
+       {
+               evas_object_del(ad->popupinfo.selinfo_ly);
+               ad->popupinfo.selinfo_ly = NULL;
+       }
+
+       if (ad->popupinfo.selinfo)
+       {
+               evas_object_smart_callback_del(ad->popupinfo.selinfo,
+                               "timeout", _gl_ui_notiinfo_destroy_cb);
+               evas_object_del(ad->popupinfo.selinfo);
+               ad->popupinfo.selinfo = NULL;
+       }
+
+       return 0;
+}
+
+int gl_ui_destroy_imf(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode = %d", view_mode);
+
+       if (ad->entryinfo.imf_entry) {
+               evas_object_smart_callback_del(ad->entryinfo.imf_entry,
+                                              "maxlength,reached",
+                                              __gl_ui_entry_maxlen_reached_cb);
+               if (ad->entryinfo.entry_mode == GL_ENTRY_NEW_ALBUM)
+                       evas_object_smart_callback_del(ad->entryinfo.imf_entry,
+                                                      "activated",
+                                                      _gl_ui_newalbum_enter_cb);
+               else
+                       evas_object_smart_callback_del(ad->entryinfo.imf_entry,
+                                                      "changed",
+                                                      __gl_ui_entry_space_check_cb);
+       }
+       ad->entryinfo.entry_mode = GL_ENTRY_NONE;
+
+       if (ad->entryinfo.imf_context)
+               ecore_imf_context_input_panel_hide(ad->entryinfo.imf_context);
+
+       if (ad->entryinfo.editfield)
+               evas_object_hide(ad->entryinfo.editfield);
+
+       if (ad->entryinfo.imf_ly) {
+               evas_object_del(ad->entryinfo.imf_ly);
+               ad->entryinfo.imf_ly = NULL;
+       }
+
+       ad->entryinfo.imf_entry = NULL;
+       ad->entryinfo.imf_context = NULL;
+       ad->entryinfo.editfield = NULL;
+
+       return 0;
+}
+
+Evas_Object *gl_ui_create_main_ly(Evas_Object *parent)
+{
+       GL_CHECK_NULL(parent);
+       Evas_Object *layout = NULL;
+
+       layout = elm_layout_add(parent);
+       GL_CHECK_NULL(layout);
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, layout);
+       evas_object_show(layout);
+
+       return layout;
+}
+
+Evas_Object *gl_ui_create_naviframe(Evas_Object *parent)
+{
+       GL_CHECK_NULL(parent);
+       Evas_Object *navi_bar = NULL;
+
+       navi_bar = elm_naviframe_add(parent);
+       gl_dbg("elm_naviframe_add:done");
+       /* Use custom style to set bg color black(0 0 0 255). */
+       elm_object_style_set(navi_bar, GL_NAVIBAR_STYLE_DEFAULT);
+       evas_object_show(navi_bar);
+       gl_dbg("elm_object_style_set: done");
+
+       return navi_bar;
+}
+
+Evas_Object *gl_ui_create_view_ly(Evas_Object *parent)
+{
+       gl_dbg("");
+       GL_CHECK_NULL(parent);
+
+       Evas_Object *layout = NULL;
+       layout = gl_ui_load_edj(parent, GL_EDJ_FILE, GL_GRP_VIEW_LAYOUT);
+       GL_CHECK_NULL(layout);
+       evas_object_show(layout);
+
+       return layout;
+}
+
+int _gl_ui_elm_bg_file_set(Evas_Object *bg, gl_item *git)
+{
+       if (git == NULL || git->item == NULL || git->ad == NULL) {
+               gl_dbgE("Invalid item :%p", git);
+               elm_bg_file_set(bg, GL_DEFAULT_THUMB_ICON, NULL);
+               return -1;
+       }
+
+       char *path = NULL;
+       path = _gl_get_thumb(git->ad, git->item->file_url,
+                            &git->item->thumb_url);
+       if (path) {
+               elm_bg_file_set(bg, path, NULL);
+               free(path);
+               path = NULL;
+       } else {
+               elm_bg_file_set(bg, git->item->thumb_url, NULL);
+       }
+
+       return 0;
+}
diff --git a/src/util/gl-util.c b/src/util/gl-util.c
new file mode 100755 (executable)
index 0000000..6eed77f
--- /dev/null
@@ -0,0 +1,1892 @@
+/*
+  * 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://www.tizenopensource.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 <sys/statvfs.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <errno.h>
+#include <devman_haptic.h>
+#include <media-thumbnail.h>
+#include "gl-debug.h"
+#include "gallery.h"
+#include "gl-albums.h"
+#include "gl-gridview.h"
+#include "gl-listview.h"
+#include "gl-util.h"
+#include "gl-ui-util.h"
+#include "gl-controlbar.h"
+#include "gl-thread-util.h"
+#include "gl-popup.h"
+#include "gl-progressbar.h"
+#include "gl-ext-ug-load.h"
+#include "gl-ext-exec.h"
+#include "gl-strings.h"
+
+#define GL_FILE_COPY_BUF_MAX 16384
+#define GL_CREATE_DIR_MASK_DEFAULT 0775
+#define GL_DESKTOP_CONTENT_LEN_MAX 128
+/* Time for displaying progressbar UI compeletely */
+#define GL_TIMER_INTERVAL_PBAR_SHOWED 0.5
+#define GL_TIMER_INTERVAL_UMS_UPDATE 2.0
+#define GL_TIMER_INTERVAL_VIBRATION 0.5
+
+/* Use timer to show progressbar totally before write pipe */
+static Eina_Bool _gl_start_thread_op_timer_cb(void *data)
+{
+       gl_dbg("Emit START signal...");
+       GL_CHECK_CANCEL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Emit signal to notice child thread to handle next item. */
+       gl_thread_emit_next_signal(ad);
+       if (ad->pbarinfo.start_thread_timer) {
+               ecore_timer_del(ad->pbarinfo.start_thread_timer);
+               ad->pbarinfo.start_thread_timer = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/**
+* Use thread to move/delete medias
+* for displaying progrssabar UI
+*/
+static int _gl_use_thread_operate_medias(void *data, char *pbar_title, int all_cnt, int op_type)
+{
+       gl_dbg("all_cnt: %d, op_type: %d.", all_cnt, op_type);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* Initialize thread mutex lock */
+       gl_thread_init_lock(ad);
+       /* Make progressbar */
+       gl_pb_make_thread_pbar(ad, ad->maininfo.win, pbar_title);
+       /* Set pb_cancel, indicates thread operation is beginning */
+       gl_thread_set_cancel_state(ad, GL_PB_CANCEL_NORMAL);
+       /* Initialize progressbar */
+       gl_pb_refresh_thread_pbar(ad, 0, all_cnt);
+       /* Use timer to emit next signal to show progressbarbar totally */
+       if (ad->pbarinfo.start_thread_timer) {
+               ecore_timer_del(ad->pbarinfo.start_thread_timer);
+               ad->pbarinfo.start_thread_timer = NULL;
+       }
+       Ecore_Timer *timer = NULL;
+       timer = ecore_timer_add(GL_TIMER_INTERVAL_PBAR_SHOWED,
+                               _gl_start_thread_op_timer_cb, ad);
+       ad->pbarinfo.start_thread_timer = timer;
+       /* Set media operation type */
+       ad->maininfo.medias_op_type = op_type;
+       /* Generate child thread */
+       gl_thread_gen_data_thread(ad);
+       return 0;
+}
+
+static void _gl_db_update_noti_cb(keynode_t *key, void *data)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbgW("VCONFKEY_FILEMANAGER_DB_STATUS changed!");
+       int mmc_state = -1;
+
+       vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state);
+
+       if (mmc_state == -1)
+       {
+               gl_dbg("Error when check MMC Status");
+               return;
+       }
+
+       if (mmc_state == VCONFKEY_SYSMAN_MMC_MOUNTED)
+       {
+               gl_dbg("mmc_state[%d] : VCONFKEY_SYSMAN_MMC_MOUNTED", mmc_state);
+               if (ad->maininfo.mmc_state == GL_MMC_STATE_REMOVED)
+                       ad->maininfo.mmc_state = GL_MMC_STATE_ADDING_MOVING;
+               else
+                       ad->maininfo.mmc_state = GL_MMC_STATE_ADDED;
+
+               if (ad->maininfo.ums_update_timer) {
+                       /**
+                       * MMC noti callback also would be invoked
+                       * if USB disconnected in UMS mode,
+                       * Return to prevent from refreshing view twice.
+                       */
+                       gl_dbgW("View would be update in _gl_ums_update_timer_cb.");
+                       return;
+               }
+
+               gl_update_view(ad, GL_UPDATE_VIEW_MMC_ADDED);
+
+               /* Update popup content after albums list updated */
+               if (ad->popupinfo.popup &&
+                   (ad->popupinfo.popup_mode == GL_POPUP_THUMB_MOVE)) {
+                       gl_dbg("Add MMC albums to popup.");
+                       gl_popup_update_content(ad, GL_POPUP_THUMB_MOVE);
+               }
+       }
+       else if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED ||
+                mmc_state == VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED)
+       {
+               gl_dbg("mmc_state[%d] : VCONFKEY_SYSMAN_MMC_REMOVED", mmc_state);
+               if (ad->maininfo.mmc_state == GL_MMC_STATE_ADDED_MOVING)
+               {
+                       /*
+                        * Set pb_cancel status,
+                        * indicates MMC removed while moving or deleting.
+                        */
+                       gl_thread_set_cancel_state(ad, GL_PB_CANCEL_MMC);
+                       /* MMC moved while moving or deleting */
+                       ad->maininfo.mmc_state = GL_MMC_STATE_REMOVED_MOVING;
+               } else if (ad->maininfo.mmc_state == GL_MMC_STATE_REMOVED_MOVING) {
+                       gl_dbgW("View updated on GL_MMC_STATE_ADDED_MOVING");
+                       return;
+               } else
+               {
+                       /* MMC is extracted */
+                       ad->maininfo.mmc_state = GL_MMC_STATE_REMOVED;
+               }
+
+               if (ad->maininfo.ums_update_timer) {
+                       /**
+                       * MMC noti callback also would be invoked
+                       * if USB disconnected in UMS mode,
+                       * Return to prevent from refreshing view twice.
+                       */
+                       gl_dbgW("View would be update in _gl_ums_update_timer_cb.");
+                       return;
+               }
+
+               gl_update_view(ad, GL_UPDATE_VIEW_MMC_REMOVED);
+
+               /* Update popup content after albums list updated */
+               if (ad->popupinfo.popup &&
+                   (ad->popupinfo.popup_mode == GL_POPUP_THUMB_MOVE)) {
+                       gl_dbg("Remove MMC albums from popup.");
+                       gl_popup_update_content(ad, GL_POPUP_THUMB_MOVE);
+               }
+       }
+}
+
+static Eina_Bool
+_gl_ums_update_timer_cb(void *data)
+{
+       gl_dbg("Timer callback invoked, try to update view.");
+       GL_CHECK_CANCEL(data);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       gl_update_view(data, GL_UPDATE_VIEW_NORMAL);
+
+       if (ad->maininfo.ums_update_timer) {
+               ecore_timer_del(ad->maininfo.ums_update_timer);
+               ad->maininfo.ums_update_timer = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gl_mass_storage_noti_cb(keynode_t * key, void *data)
+{
+       GL_CHECK(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int mass_storage_state = -1;
+       gl_dbg("");
+
+       vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &mass_storage_state);
+       if (mass_storage_state == -1)
+       {
+               gl_dbgE("Error when check MASS STORAGE Status");
+               return;
+       }
+
+       if (mass_storage_state == VCONFKEY_USB_STORAGE_STATUS_UMS_ON ||
+           mass_storage_state == VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON)
+       {
+               /* Close app. */
+               gl_dbg("VCONFKEY_USB_STORAGE_STATUS_UMS(_MMC)_ON");
+               elm_exit();
+       }
+       else if (mass_storage_state == VCONFKEY_USB_STORAGE_STATUS_OFF)
+       {
+               /**
+               * Update view in 2 seconds,
+               * media-server scan file system and insert records to DB,
+               * it takes some time.
+               */
+               gl_dbg("VCONFKEY_USB_STORAGE_STATUS_OFF,update view in 2secs.");
+               if (ad->maininfo.ums_update_timer) {
+                       ecore_timer_del(ad->maininfo.ums_update_timer);
+                       ad->maininfo.ums_update_timer = NULL;
+               }
+               Ecore_Timer *ums_timer = NULL;
+               ums_timer = ecore_timer_add(GL_TIMER_INTERVAL_UMS_UPDATE,
+                                           _gl_ums_update_timer_cb, data);
+               ad->maininfo.ums_update_timer = ums_timer;
+       }
+}
+
+/*
+* Display nocontents view in image or video segment.
+*/
+static int
+_gl_display_iv_nocontents(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       bool is_image_file_existing = false;
+       int grid_view_mode = ad->gridinfo.grid_view_mode;
+       int cnt = 0;
+       gl_item *gitem = NULL;
+       int i = 0;
+
+       if (grid_view_mode == GL_CTRL_SEG_VIDEOS)
+       {
+               gl_dbg("list view, already created nocontents in update function");
+               return 0;
+       }
+
+
+       /* Get all medias count of current gridview */
+       cnt = ad->maininfo.medias_cnt;
+
+       if (grid_view_mode == GL_CTRL_SEG_IMAGES)       //only check in image segment.
+       {
+               for (i = 1; i <= cnt; i++)
+               {
+                       gl_db_get_item_by_index(ad, i, false, &gitem);
+                       if (gitem == NULL || gitem->item == NULL)
+                       {
+                               gl_dbg("gitem == NULL || gitem->item == NULL");
+                               continue;
+                       }
+
+                       if (!is_image_file_existing && gitem->item->type == MINFO_ITEM_IMAGE)
+                       {
+                               is_image_file_existing = true;
+                               break;
+                       }
+               }
+
+               gl_dbg("image file exists->%d", is_image_file_existing);
+               if (grid_view_mode == GL_CTRL_SEG_IMAGES && !is_image_file_existing)
+               {
+                       if (ad->gridinfo.image_nocontents)
+                       {
+                               gl_dbg("(image_grid_view)nocontents already exists...");
+                       }
+                       else
+                       {
+                               gl_dbg("None image files, show nocontents...");
+                               Evas_Object *noc = gl_ui_create_nocontents_full(ad);
+                               /**
+                               * delete image_grid_view before assign nocontents to image_grid_view,
+                               * other when back to albums view, it's frozen.
+                               */
+                               if (ad->gridinfo.image_view)
+                               {
+                                       evas_object_del(ad->gridinfo.image_view);
+                                       ad->gridinfo.image_view = NULL;
+                               }
+                               ad->gridinfo.image_view = noc;
+                               ad->gridinfo.image_nocontents = noc;
+                               elm_object_part_content_unset(ad->gridinfo.layout, "elm.swallow.view");
+                               evas_object_hide(ad->listinfo.video_view);
+                               evas_object_hide(ad->gridinfo.all_view);
+                               evas_object_show(ad->gridinfo.image_view);
+                               elm_object_part_content_set(ad->gridinfo.layout,
+                                               "elm.swallow.view", ad->gridinfo.image_view);
+                       }
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_THUMBS, false);
+               }
+       }
+
+       return 0;
+}
+
+/**
+* @param: b_update_albums_list
+*      True: Update albums list and medias list, then update normal view.
+*      False: Get new medias for current view from DB
+*                then update view to synchronize data with Myfile.
+*                Use case:
+*              Update edit gridview/listview.
+*/
+static int _gl_update_thumb_items(void *data, bool b_update_albums_list)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       bool b_edit_m = false;
+
+       gl_dbg("view_mode: %d, b_update_albums_list: %d.", view_mode,
+              b_update_albums_list);
+       if (view_mode == GL_VIEW_THUMBS_EDIT ||
+           view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               gl_dbg("Edit view.");
+               b_edit_m = true;
+       }
+
+       /**
+       * 1, Update albums list and medias_elist,
+       * 2, Update medias_elist.
+       */
+       if (b_update_albums_list)
+               gl_refresh_albums_list(ad);
+       else
+               gl_db_update_item_list(ad);
+
+       if (ad->maininfo.medias_cnt == 0) {
+               /* All items deleted, change to albms view */
+               gl_pop_to_ctrlbar_ly(ad, !b_update_albums_list);
+       } else {
+               if (view_mode == GL_VIEW_VIDEOLIST) {
+                       gl_list_update_view(ad);
+               } else if (gl_ui_display_nocontents(ad)) {
+                       gl_dbg("none video/image, show nocontents");
+                       /* Remove invalid widgets */
+                       gl_del_invalid_widgets(ad, GL_INVALID_NEW_ENTRY_NOC);
+               } else if (view_mode == GL_VIEW_THUMBS) {
+                       gl_grid_update_items(ad);
+               } else if (view_mode == GL_VIEW_THUMBS_EDIT) {
+                       gl_grid_change_to_edit(ad);
+               } else {
+                       gl_list_change_to_edit(ad);
+               }
+
+               /* Normal view, return */
+               if (!b_edit_m)
+                       return 0;
+
+               /* Remove invalid widgets if none medias selected */
+               if (gl_db_selected_list_count(ad) == 0)
+                       gl_del_invalid_widgets(ad, GL_INVALID_NEW_ENTRY);
+
+               /**
+               * Update albums list when change to normal view.
+               * Maybe some empty albums exist.
+               */
+               if (!b_update_albums_list) {
+                       gl_dbg("Update albums list when cancelled.");
+                       ad->albuminfo.update_albums_list = true;
+               } else if (ad->popupinfo.popup_mode == GL_POPUP_THUMB_MOVE) {
+                       gl_popup_update_content(ad, GL_POPUP_THUMB_MOVE);
+               }
+       }
+
+       return 0;
+}
+
+/*
+*   return file extension, f.e. jpg; then return new path without ext.
+*/
+static bool
+_gl_get_file_ext(const char *file_path, char *file_ext, char *new_path)
+{
+       int i = 0;
+
+       for (i = strlen(file_path); i >= 0; i--)
+       {
+               if ((file_path[i] == '.') && (i < GL_FILE_PATH_LEN_MAX))
+               {
+                       g_strlcpy(file_ext, &file_path[i + 1], GL_FILE_EXT_LEN_MAX);
+                       g_strlcpy(new_path, file_path, i + 1);
+                       new_path[i] = '\0';
+                       gl_dbg("path without extension :%s", new_path);
+                       return true;
+               }
+
+               if (file_path[i] == '/')        //meet the dir. no ext
+               {
+                       return true;
+               }
+       }
+       return true;
+}
+
+/* Check if there is any MMC file contained in select_medias_elist */
+static bool _gl_check_mmc_file_selected(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_item *gitem = NULL;
+       int i = 0;
+       int on_mmc = -1;
+       int cnt = gl_db_selected_list_count(ad);
+       for (i = 0; i < cnt; i++) {
+               gitem = NULL;
+               on_mmc = -1;
+
+               gitem = gl_db_selected_list_get_nth(ad, i);
+               /* File on MMC is selected */
+               if (gitem && gitem->item && gitem->item->file_url) {
+                       on_mmc = strncmp(GL_ROOT_PATH_MMC,
+                                        gitem->item->file_url,
+                                        strlen(GL_ROOT_PATH_MMC));
+                       if (on_mmc == 0)
+                               return true;;
+               }
+       }
+       return false;
+}
+
+/* Stop vibrate device */
+static int _gl_stop_vibration(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int ret = -1;
+
+       if (ad->entryinfo.haptic_handle > 0) {
+               ret = device_haptic_stop_play(ad->entryinfo.haptic_handle);
+               if (ret != 0)
+                       gl_dbgE("device_haptic_stop_play failed[%d]!", ret);
+
+               ret = device_haptic_close(ad->entryinfo.haptic_handle);
+               if (ret != 0)
+                       gl_dbgE("device_haptic_close failed[%d]!", ret);
+               ad->entryinfo.haptic_handle = 0;
+       }
+
+       return 0;
+}
+
+static Eina_Bool _gl_vibration_timer_cb(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       _gl_stop_vibration(data);
+
+       if (ad->entryinfo.vibration_timer) {
+               ecore_timer_del(ad->entryinfo.vibration_timer);
+               ad->entryinfo.vibration_timer = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/* copy of function "ecore_file_cp" from the file "ecore_file.c" for lock debugging */
+/**
+ * Copy a file
+ * @param  src The name of the source file
+ * @param  dst The name of the destination file
+ * @return EINA_TRUE on success, EINA_FALSE on failure
+ */
+Eina_Bool
+gl_file_cp(const char *src, const char *dst)
+{
+       GL_CHECK_FALSE(src);
+       GL_CHECK_FALSE(dst);
+       gl_dbg("src: %s", src);
+       gl_dbg("dest: %s", dst);
+
+       FILE *f1, *f2;
+       char buf[GL_FILE_COPY_BUF_MAX] = { 0, };
+       char realpath1[GL_FILE_PATH_LEN_MAX] = { 0, };
+       char realpath2[GL_FILE_PATH_LEN_MAX] = { 0, };
+       size_t num;
+       Eina_Bool ret = EINA_TRUE;
+
+       if (!realpath(src, realpath1))
+       {
+               gl_dbg("src path is not real, return!");
+               return EINA_FALSE;
+       }
+       if (realpath(dst, realpath2) && !strcmp(realpath1, realpath2))
+       {
+               gl_dbg("dst path is not real, return!");
+               return EINA_FALSE;
+       }
+
+       f1 = fopen(src, "rb");
+       if (!f1)
+       {
+               gl_dbg("Can't open src file, return!");
+               return EINA_FALSE;
+       }
+       f2 = fopen(dst, "wb+");
+       if (!f2)
+       {
+               gl_dbg("Can't open dst file, return!");
+               fclose(f1);
+               return EINA_FALSE;
+       }
+       while ((num = fread(buf, 1, sizeof(buf), f1)) > 0)
+       {
+               if (num > sizeof(buf))
+               {
+                       fclose(f1);
+                       fclose(f2);
+                       return EINA_FALSE;
+               }
+               if (fwrite(buf, 1, num, f2) != num)
+               {
+                       gl_dbg("fwrite failed, return");
+                       ret = EINA_FALSE;
+               }
+       }
+       fclose(f1);
+       fclose(f2);
+       return ret;
+}
+
+/* one copy of function "ecore_file_mv" from the file "ecore_file.c" for lock debugging */
+/*
+* Use gl_file_mv() to move medias to other album.
+* Media-server, which is different with libmedia-info, watches src and dest folder,
+* it updates libmedia-service DB asynchronously.
+* While move/copy mass data in My Files appliation,
+* After move/copy done in My files, check the dest folder in Gallery.
+* You'll find its content is changing.
+* gl_file_mv() operate libmedia-info DB synchronously, so it's faster than media-server.
+*/
+
+/*
+*  stop using "rename" when moving from mmc to phone for correct db update.
+*/
+Eina_Bool gl_file_mv(void *data, const char *src, const char *dst, int type)
+{
+       GL_CHECK_FALSE(src);
+       GL_CHECK_FALSE(dst);
+       int ret = -1;
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("\n\tSrc: %s\n\t Dest: %s", src, dst);
+
+       /* Move thumb first */
+       if ((ret = minfo_move_media(ad->maininfo.db_handle, src, dst, type)) < 0) {
+               gl_dbgE("Move media thumbnail failed[%d]!", ret);
+               return EINA_FALSE;
+       }
+
+       /*
+        * From->To: MMC->MMC or Phone->Phone
+        */
+       if (rename(src, dst)) {
+               /*
+                * File cannot be moved directly because
+                * it resides on a different mount point.
+                */
+               if (errno == EXDEV) {
+                       /*
+                        * From->To: MMC->Phone or Phone->MMC
+                        */
+                       gl_dbgW("errno = EXDEV(%d): Cross-device link", errno);
+                       struct stat st;
+
+                       /*
+                        * Make sure this is a regular file before
+                        * we do anything fancy.
+                        */
+                       stat(src, &st);
+                       if (S_ISREG(st.st_mode)) {
+                               /*
+                                * Copy to dst file
+                                */
+                               if (!ecore_file_cp(src, dst)) {
+                                       gl_dbgE("Copy file failed[%d]!", errno);
+                                       return EINA_FALSE;
+                               }
+
+
+                               /*
+                                * Delete src file
+                                */
+                               if (!ecore_file_unlink(src))
+                                       gl_dbgE("Delete file failed[%d]!", errno);
+
+                               return EINA_TRUE;
+                       }
+                       gl_dbgE("S_ISREG fail[%d]!", errno);
+                       return EINA_FALSE;
+               }
+
+               gl_dbgE("Fail[%d]!", errno);
+               return EINA_FALSE;
+       }
+
+       return EINA_TRUE;
+}
+
+bool
+gl_validate_album_name(const char *new_name)
+{
+       GL_CHECK_FALSE(new_name);
+       char invalid_chars[] = { '/', '\\', ':', '*', '?', '"', '<', '>', '|', '\0' };
+       char *ptr = invalid_chars;
+
+       gl_dbg("new album name is %s\n", new_name);
+       while (*ptr != '\0')
+       {
+               gl_dbg("invalid character is %c", *ptr);
+               if (strchr(new_name, (*ptr)) != NULL)
+               {
+                       return false;
+               }
+               ++ptr;
+       }
+
+       return true;
+}
+
+int
+gl_get_entry_text(Evas_Object * entry, char *entry_text, int len_max)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(entry_text, -1);
+       GL_CHECK_VAL(entry, -1);
+
+       memset(entry_text, 0x00, len_max);
+
+       char *entry_str = (char *)elm_entry_entry_get(entry);
+       if (entry_str)
+       {
+               if (strlen(entry_str) == 0)
+               {
+                       gl_dbg("Entry string is empty!");
+               }
+               else
+               {
+                       char *entry_utf8 = elm_entry_markup_to_utf8(entry_str); // changes user input to utf-8 encoding format
+                       if (entry_utf8 == NULL)
+                       {
+                               gl_dbgE("Make entry string to UTF8 failed!");
+                               return -1;
+                       }
+                       else if (strlen(entry_utf8) == 0)
+                       {
+                               gl_dbg("Entry text is empty!");
+                       }
+                       else
+                       {
+                               g_strlcpy(entry_text, entry_utf8, len_max);
+                               entry_text[len_max - 1] = '\0';
+                       }
+
+                       free(entry_utf8);
+                       entry_utf8 = NULL;
+               }
+       }
+       else
+       {
+               gl_dbgE("Get entry string failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+/**
+* Change utf8 string to markup, then set it as entry text.
+* To fix special character "&" issue,  to convert "&" to "&amp;". f.e.
+* Myfiles->rename folder to AB&C->Gallery/Rename ->displayed as "AB"
+*/
+int gl_set_entry_text(Evas_Object *entry, char *entry_text)
+{
+       GL_CHECK_VAL(entry, -1);
+       char *entry_makeup = NULL;
+       gl_dbg("Entry UTF8 text: %s.", entry_text);
+
+       if (entry_text) {
+               entry_makeup = elm_entry_utf8_to_markup(entry_text);
+               if (entry_makeup == NULL) {
+                       gl_dbgE("Make utf8 string to makeup failed!");
+                       return -1;
+               }
+               gl_dbg("Entry makeup text: %s.", entry_makeup);
+       }
+       /* Empty string set if entry_makeup is NULL */
+       elm_entry_entry_set(entry, entry_makeup);
+
+       if (entry_makeup) {
+               free(entry_makeup);
+               entry_makeup = NULL;
+       }
+
+       return 0;
+}
+
+int
+gl_get_default_images_path(char *directory_path)
+{
+       int len = 0;
+       GL_CHECK_VAL(directory_path, -1);
+
+       len = snprintf(directory_path, GL_DIR_PATH_LEN_MAX, "%s",
+                      GL_ROOT_PATH_PHONE);
+       if (len < 0) {
+               gl_dbgE("snprintf returns failure!");
+               return -1;
+       } else {
+               directory_path[len] = '\0';
+               len = -1;
+       }
+
+       len = g_strlcat(directory_path, GL_DEFAULT_PATH_IMAGES,
+                       GL_DIR_PATH_LEN_MAX);
+       if (len >= GL_DIR_PATH_LEN_MAX) {
+               gl_dbgE("strlcat returns failure(%d)!", len);
+               return -1;
+       }
+       gl_dbg("Default images path: %s.", directory_path);
+
+       return 0;
+}
+
+int gl_get_selected_files_path_str(void *data, gchar sep_c, char **path_str, int *sel_cnt)
+{
+       GL_CHECK_VAL(path_str, -1);
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->selectedinfo.medias_elist, GL_UG_FAIL);
+       GString *selected_path_list = g_string_new(NULL);
+       gl_item *current = NULL;
+       int selected_item_cnt = 0;
+       Eina_List *l = NULL;
+
+       EINA_LIST_FOREACH(ad->selectedinfo.medias_elist, l, current) {
+               if (current == NULL || current->item == NULL) {
+                       if (selected_path_list) {
+                               g_string_free(selected_path_list, true);
+                               selected_path_list = NULL;
+                       }
+                       return -1;
+               }
+               selected_item_cnt++;
+               g_string_append(selected_path_list, current->item->file_url);
+               g_string_append_c(selected_path_list, sep_c);
+
+       }
+       gl_dbg("Selected items count: %d.", selected_item_cnt);
+       if (sel_cnt)
+               *sel_cnt = selected_item_cnt;
+       int len = strlen(selected_path_list->str);
+       g_string_truncate(selected_path_list, len - 1);
+       /**
+       * Frees the memory allocated for the GString.
+       * If free_segment is true it also frees the character data.
+       * If it's false, the caller gains ownership of the buffer
+       * and must free it after use with g_free().
+       */
+       *path_str = g_string_free(selected_path_list, false);
+       GL_CHECK_VAL(*path_str, -1);
+       gl_dbg("Total string:\n\n\t>>@@:> %s <:@@<<\n", *path_str);
+       return 0;
+}
+
+int
+gl_make_dir(const char *dir_full_path)
+{
+       GL_CHECK_VAL(dir_full_path, -1);
+
+       return mkdir(dir_full_path, GL_CREATE_DIR_MASK_DEFAULT);
+}
+
+int
+gl_make_new_album(const char *name)
+{
+       gl_dbg("");
+       char path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+       if (gl_get_default_images_path(dir_path) != 0)
+       {
+               gl_dbg("FAIL to get dir path");
+               return -1;
+       }
+
+       snprintf(path, GL_DIR_PATH_LEN_MAX, "%s/%s", dir_path, name);
+       path[strlen(path)] = '\0';
+       gl_dbg("Making %s directory", path);
+
+       if (ecore_file_dir_is_empty(path) == -1)        // new folder doesn't exist
+       {
+               if (ecore_file_dir_is_empty(dir_path) == -1)    // default images folder doesn't exist
+               {
+                       gl_dbgE("[Error] Default images path[%s] doesn't exist. Create it...");
+                       gl_make_dir(dir_path);
+               }
+
+               return gl_make_dir(path);
+       }
+       else
+       {
+               gl_dbg("new folder already exists, no need to make!");
+               return 0;
+       }
+}
+
+int
+gl_move_media_item(gl_item * gitem, char *new_dir_name, bool is_full_path, int *popup_op)
+{
+       gl_dbg("Move media item START>>>");
+       char new_path[GL_FILE_PATH_LEN_MAX] = { 0, };
+       char ext[GL_FILE_EXT_LEN_MAX] = { 0, };
+       char new_path_noext[GL_FILE_PATH_LEN_MAX] = { 0, };
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       if (gitem == NULL || gitem->item == NULL || gitem->item->uuid == NULL ||
+           popup_op == NULL)
+       {
+               gl_dbg("gitem == NULL || gitem->item == NULL");
+               return -1;
+       }
+
+       *popup_op = GL_POPUP_OP_NONE;
+
+       if (is_full_path)
+       {
+               if (!gitem->item->file_url ||
+                       !strlen(gitem->item->file_url) ||
+                       !gitem->item->display_name)
+               {
+                       gl_dbg("file url or name is error.");
+                       return -1;
+               }
+               snprintf(new_path, sizeof(new_path), "%s/%s",
+                       new_dir_name, (char *)(gitem->item->display_name));
+               gl_dbg("New path : %s", new_path);
+
+               if (!strcmp(new_path, gitem->item->file_url))   //do not need to move. ("All" album case)
+               {
+                       //create popup in pipe callback
+                       *popup_op = GL_POPUP_OP_SAME_ALBUM;
+                       gl_dbg("File already in destination, do not need to move, just return...");
+                       return -1;
+               }
+               else if (ecore_file_exists(new_path))   // return true if file exists, rename new file.
+               {
+                       //add item id to set different file path
+                       _gl_get_file_ext(new_path, ext, new_path_noext);
+                       memset(new_path, 0x00, GL_FILE_PATH_LEN_MAX);
+                       /* Checkme: Use numeric to replace string */
+                       snprintf(new_path, sizeof(new_path), "%s_%s.%s",
+                                new_path_noext, gitem->item->uuid, ext);
+                       gl_dbg("Different file has same path, create new one : %s", new_path);
+                       //create popup in pipe callback
+                       *popup_op = GL_POPUP_OP_DUPLICATED_NAME;
+               }
+       }
+       else
+       {
+               if (gl_get_default_images_path(dir_path) != 0)
+               {
+                       gl_dbg("FAIL to get dir path!");
+                       return -1;
+               }
+               snprintf(new_path, GL_FILE_PATH_LEN_MAX, "%s/%s/%s",
+                               dir_path, new_dir_name, (char *)(gitem->item->display_name));
+       }
+
+       new_path[strlen(new_path)] = '\0';
+
+       // stop using "rename" when moving from mmc to phone for correct db update.
+       if (gl_file_mv(gitem->ad, gitem->item->file_url, new_path,
+                                       gitem->item->type) == EINA_FALSE)
+       {
+               gl_dbg("Move media item OVER<<<");
+               return -1;
+       }
+       else
+       {
+               gl_dbg("Move media item OVER<<<");
+               return 0;
+       }
+}
+
+/**
+* Check if there is any media in Gallery.
+*
+* False returned if none medias exist, other return True.
+*/
+bool gl_check_gallery_empty(void* data)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       if (ad->albuminfo.cluster_list == NULL) {
+               gl_dbgE("ad->albuminfo.cluster_list == NULL");
+               return true;
+       }
+
+       Eina_List *clist = ad->albuminfo.cluster_list->clist;
+       if (clist == NULL) {
+               gl_dbgW("Albums list is invalid!");
+               return true;
+       }
+
+       int len = eina_list_count(clist);
+       if (len == 0) {
+               gl_dbgW("Albums list is empty!");
+               return true;
+       }
+       return false;
+}
+
+bool gl_is_image_valid(void *data, char *filepath)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_FALSE(filepath);
+
+       Evas_Object *image = NULL;
+       int width = 0;
+       int height = 0;
+       Evas *evas = NULL;
+
+       evas = evas_object_evas_get(ad->maininfo.win);
+       GL_CHECK_FALSE(evas);
+
+       image = evas_object_image_add(evas);
+       GL_CHECK_FALSE(image);
+
+       evas_object_image_filled_set(image, 0);
+       evas_object_image_load_scale_down_set(image, 0);
+       evas_object_image_file_set(image, filepath, NULL);
+       evas_object_image_size_get(image, &width, &height);
+       if(image) {
+               evas_object_del(image);
+               image = NULL;
+       }
+
+       if (width <= 0 || height <= 0) {
+               gl_dbg("Cannot load file : %s", filepath);
+               return false;
+       }
+
+       return true;
+}
+
+bool
+gl_is_rotation_locked(void)
+{
+       int lock = -1;
+
+       if (!vconf_get_bool(VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, &lock))
+       {
+               gl_dbg("Rotation locked state[%d].", lock);
+               return lock;
+       }
+       else
+       {
+               gl_dbgE("Get rotation lock state failed!");
+               return false;
+       }
+}
+
+/*
+* Check MMC state(Inserted/Removed) for Move/Delete.
+*/
+int
+gl_check_mmc_state(void *data, char *dest_folder)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* MMC hasn't been inserted */
+       if (ad->maininfo.mmc_state == GL_MMC_STATE_REMOVED)
+               return 0;
+
+       int on_mmc = -1;
+       /**
+       *  Albums: Move/Delete.
+       */
+       /* Move files to MMC album */
+       if (dest_folder) {
+               on_mmc = strncmp(GL_ROOT_PATH_MMC, dest_folder,
+                                strlen(GL_ROOT_PATH_MMC));
+               if (on_mmc == 0)
+                       goto ON_MMC;
+       }
+
+       gl_cluster *cur_album = ad->albuminfo.current_album;
+       char src_folder_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       GL_CHECK_VAL(cur_album, -1);
+       GL_CHECK_VAL(cur_album->cluster, -1);
+       /* Move files from MMC album */
+       GL_CHECK_VAL(cur_album->cluster->uuid, -1);
+       gl_db_get_folder_fullpath(ad, cur_album->cluster->uuid,
+                                 src_folder_path);
+       on_mmc = strncmp(GL_ROOT_PATH_MMC, src_folder_path,
+                        strlen(GL_ROOT_PATH_MMC));
+       /* Check MMC files selected in album [All albums] */
+       if (on_mmc == 0) {
+               goto ON_MMC;
+       } else if (!g_strcmp0(cur_album->cluster->uuid, GL_ALBUM_ALL_ID)) {
+               gl_dbg("In album [All albums].");
+               if (_gl_check_mmc_file_selected(ad))
+                       goto ON_MMC;
+       }
+       return 0;
+
+ ON_MMC:
+       gl_dbgW("Operate medias on MMC!");
+       ad->maininfo.mmc_state = GL_MMC_STATE_ADDED_MOVING;
+       return 0;
+}
+
+int gl_reg_db_update_noti(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int error_code = -1;
+       int mmc_state = -1;
+
+       vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &mmc_state);
+       /* Save the init status of MMC */
+       if (mmc_state == VCONFKEY_SYSMAN_MMC_MOUNTED)
+       {
+               gl_dbg("###### :::::: MMC loaded! :::::: ######");
+               ad->maininfo.mmc_state = GL_MMC_STATE_ADDED;
+       }
+       else if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED ||
+                mmc_state ==  VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED)
+       {
+               gl_dbg("###### :::::: MMC removed! :::::: ######");
+               ad->maininfo.mmc_state = GL_MMC_STATE_REMOVED;
+       }
+
+       gl_dbg("Enable the noti handle for DB update status!");
+       /* Set DB update status callback */
+       error_code = vconf_notify_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS,
+                                             _gl_db_update_noti_cb, ad);
+       if (error_code == -1) {
+               gl_dbgE("vconf_notify_key_changed for DB_STATUS failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+int gl_dereg_db_update_noti(void)
+{
+       int error_code = -1;
+
+       gl_dbg("Disable the noti handle for DB update status!");
+       error_code = vconf_ignore_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS,
+                                             _gl_db_update_noti_cb);
+       if (error_code == -1) {
+               gl_dbgE("vconf_ignore_key_changed for DB_STATUS failed!");
+               return -1;
+       }
+
+       return 0;
+}
+
+int
+gl_reg_mass_storage_noti(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int error_code = -1;
+       gl_dbg("Enable the noti handle for Mass storage Status!\n");
+
+       error_code = vconf_notify_key_changed(VCONFKEY_USB_STORAGE_STATUS,
+               _gl_mass_storage_noti_cb, ad);
+       if (error_code == -1)
+       {
+               gl_dbgE("vconf_notify_key_changed for VCONFKEY_FILEMANAGER_MMC_STATUS FAIL!");
+       }
+
+       return 0;
+}
+
+int
+gl_dereg_mass_storage_noti(void)
+{
+       int error_code = -1;
+       gl_dbg("Disable the noti handle for Mass storage Status!\n");
+
+       error_code = vconf_ignore_key_changed(VCONFKEY_USB_STORAGE_STATUS,
+               _gl_mass_storage_noti_cb);
+       if (error_code == -1)
+       {
+               gl_dbgE("_gl_mass_storage_noti_cb free for VCONFKEY_FILEMANAGER_MMC_STATUS FAIL!");
+       }
+
+       return 0;
+}
+
+//mass storage check
+int
+gl_get_mass_storage_state(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int mass_storage_state = -1;
+       int exit_mode = GL_APP_EXIT_NONE;
+       gl_dbg("");
+
+       if (!vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &mass_storage_state))
+       {
+               gl_dbg("current mass_storage status : %d", mass_storage_state);
+               if (mass_storage_state == VCONFKEY_USB_STORAGE_STATUS_UMS_ON ||
+                   mass_storage_state == VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON)
+               {
+                       gl_dbg("mmc_state[%d] : VCONFKEY_USB_STORAGE_STATUS_UMS_ON or VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON", mass_storage_state);
+                       // mass storage mode activated
+                       exit_mode = GL_APP_EXIT_MASS_STORAGE;
+               }
+       }
+
+       ad->maininfo.app_exit_mode = exit_mode;
+
+       return 0;
+}
+
+/*
+* Get view mode of app
+*/
+int
+gl_get_view_mode(void *data)
+{
+       GL_CHECK_VAL(data, GL_VIEW_NONE);
+       gl_appdata *ad = (gl_appdata *)data;
+       return ad->maininfo.view_mode;
+}
+
+/*
+* Set view mode of app
+*/
+int
+gl_set_view_mode(void *data, int mode)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       ad->maininfo.view_mode = mode;
+       return 0;
+}
+
+int gl_del_invalid_widgets(void *data, int invalid_m)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("");
+       if (ad->popupinfo.popup) {
+               /* Remove popup */
+               evas_object_del(ad->popupinfo.popup);
+               ad->popupinfo.popup = NULL;
+       } else if (ad->uginfo.ug_called_by_me) {
+               /* Destroy UG */
+               gl_dbg("Destroy UG!");
+               if (ad->uginfo.ug_called_by_me) {
+                       ug_destroy(ad->uginfo.ug_called_by_me);
+                       ad->uginfo.ug_called_by_me = NULL;
+               }
+               if (ad->uginfo.gallery_ug_called_by_me) {
+                       ug_destroy(ad->uginfo.gallery_ug_called_by_me);
+                       ad->uginfo.gallery_ug_called_by_me = NULL;
+               }
+       }
+
+       switch (invalid_m) {
+       case GL_INVALID_RENAME_ALBUM:
+               /* gl_ui_edit_cancel pop navigationbar */
+               gl_dbgW("Destroy Rename album view!");
+               elm_naviframe_item_pop(ad->maininfo.navi_bar);
+               gl_set_view_mode(ad, GL_VIEW_ALBUMS_EDIT);
+               gl_ui_destroy_imf(ad);
+               break;
+       case GL_INVALID_NEW_ENTRY:
+       case GL_INVALID_NEW_ENTRY_NOC:
+               if (ad->entryinfo.entry_mode == GL_ENTRY_NEW_ALBUM) {
+                       gl_dbg("Destroy New album!");
+                       if (invalid_m == GL_INVALID_NEW_ENTRY)
+                               elm_naviframe_item_pop(ad->maininfo.navi_bar);
+                       gl_ui_destroy_imf(ad);
+                       Evas_Object *edit_ly = NULL;
+                       edit_ly = ad->gridinfo.edit_layout;
+                       const char *sig = NULL;
+                       sig = "elm,swallow_view,state,thumb_edit_default";
+                       edje_object_signal_emit(_EDJ(edit_ly), sig, "elm");
+               }
+               break;
+       default:
+               ad->entryinfo.entry_mode = GL_ENTRY_NONE;
+               break;
+       }
+       return 0;
+}
+
+int
+gl_del_medias(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Get all selected medias count */
+       int cnt = gl_db_selected_list_count(ad);
+       /* Check MMC state for cancel operation */
+       gl_check_mmc_state(ad, NULL);
+       gl_dbg("MMC state: %d.", ad->maininfo.mmc_state);
+       _gl_use_thread_operate_medias(ad, GL_STR_DELETING, cnt,
+                                     GL_MEDIA_OP_DELETE);
+
+       return 0;
+}
+
+/* Delete medias */
+int gl_del_selected(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       /* Get all selected medias count */
+       int cnt = gl_db_selected_list_count(ad);
+       gl_item *gitem = NULL;
+       int i = 0;
+       int popup_op = GL_POPUP_OP_NONE;
+
+       /* Removed media from selected_media_elist */
+       for (i = 1; i <= cnt; i++) {
+               gl_db_get_item_by_index(ad, i, true, &gitem);
+               if (gitem != NULL && gitem->item != NULL)
+                       gl_db_remove_item(gitem);
+               else
+                       gl_dbgE("Invalid item!");
+
+               gl_dbg("Write pipe, make progressbar updated!");
+               gl_thread_write_pipe(ad, i, popup_op);
+               gitem = NULL;
+       }
+
+       return 0;
+}
+
+/* Update view after deleting process done */
+int gl_update_del_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_db_selected_list_finalize(ad);
+
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d.", view_mode);
+
+       gl_refresh_albums_list(ad);
+
+       if (ad->maininfo.medias_cnt > 0) {
+               /* Deleting process done, change to normal view */
+               gl_ui_edit_cancel(ad);
+
+               if (view_mode == GL_VIEW_THUMBS_EDIT)
+                       _gl_display_iv_nocontents(ad);
+
+               /* Add notification */
+               gl_ui_create_notiinfo(ad, ad->gridinfo.layout,
+                                     GL_UI_NOTIFY_DELETED);
+       } else {
+               gl_dbgW("Empty album, change to Albums view!");
+               gl_albums_comeback_from_view(ad);
+               elm_naviframe_item_pop_to(ad->albuminfo.nf_it);
+               if (gl_check_gallery_empty(ad)) {
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               } else if (ad->albuminfo.cluster_list->edit_cnt == 0) {
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               }
+
+               gl_ui_destroy_selinfo(ad);
+
+               /* Add notification */
+               gl_ui_create_notiinfo(ad, ad->albuminfo.layout,
+                                     GL_UI_NOTIFY_DELETED);
+       }
+
+       return 0;
+}
+
+int
+gl_remove_album(void *data, gl_cluster * album_item)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int res = -1;
+       char dir_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+
+       if (album_item == NULL || album_item->cluster == NULL ||
+           album_item->cluster->uuid == NULL) {
+               gl_dbgE("Invalid album!");
+               return GL_DB_FAIL;
+       }
+
+       gl_dbg("Remove album: %s, id=%s, cluster_index=%d",
+              album_item->cluster->display_name, album_item->cluster->uuid,
+              album_item->index);
+       // get folder path of album
+       res = gl_db_get_folder_fullpath(ad, album_item->cluster->uuid, dir_path);
+       if (res < 0)
+       {
+               gl_dbg("get folder fullpath failed, error=%d", res);
+               return GL_DB_FAIL;
+       }
+       else
+       {
+               gl_dbg("folder fullpath: %s", dir_path);
+       }
+       // remove all items in the album from file system and db
+       gl_db_get_item_list(ad, album_item, GL_GET_ALL_RECORDS,
+                           GL_GET_UNTIL_LAST_RECORD);
+       if (ad->albuminfo.cluster_list)
+       {
+               ad->albuminfo.cluster_list->cur_pos = album_item->index;
+       }
+
+       gl_item *gitem = NULL;
+       int i = 0;
+       /* Get all medias count of current album */
+       int cnt = ad->maininfo.medias_cnt;
+       gl_dbg("cnt: %d", cnt);
+       /* Remove files, minfo_delete_cluster would delete medias record */
+       for (i = cnt; i >= 1; i--) {
+               gl_db_get_item_by_index(ad, i, false, &gitem);
+               if (gitem && gitem->item && gitem->item->file_url) {
+                       if (!ecore_file_unlink(gitem->item->file_url))
+                               gl_dbgE("ecore_file_unlink failed!");
+               }
+       }
+
+       // remove album from db
+       res = minfo_delete_cluster(ad->maininfo.db_handle,
+                                                               album_item->cluster->uuid);
+       if (res < 0)
+       {
+               gl_dbg("minfo_delete_cluster failed, error=%d", res);
+       }
+
+       // remove album from file system
+       if (ecore_file_rmdir(dir_path) == EINA_FALSE)
+       {
+               gl_dbg("ecore_file_rmdir failed!");
+               return GL_DB_FAIL;
+       }
+
+       return GL_DB_SUCCESS;
+}
+
+int
+gl_del_albums(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *album_item = NULL;
+       int cnt = gl_db_get_albums_selected_cnt(ad);
+       int i = 0;
+       int ret = -1;
+       gl_dbg("");
+       // delete albums
+
+       Eina_List *selected_list = ad->albuminfo.selected_albums_elist;
+       if ((selected_list == NULL) || (eina_list_count(selected_list) == 0))
+       {
+               gl_dbg("zero length, return!");
+               return -1;
+       }
+       else
+       {
+               gl_dbg("cnt= %d, list length=%d", cnt, eina_list_count(selected_list));
+       }
+       for (i = 0; i < cnt; i++)
+       {
+               album_item = eina_list_nth(selected_list, i);
+
+               if (album_item && album_item->cluster &&
+                   album_item->cluster->uuid) {
+                       gl_dbg("Delete album: %s, id=%s, cluster_index=%d",
+                              album_item->cluster->display_name,
+                              album_item->cluster->uuid, album_item->index);
+                       ret = gl_remove_album(ad, album_item);
+                       if (ret < 0)
+                       {
+                               gl_dbg("gl_remove_album failed, error=%d", ret);
+                       }
+               }
+       }
+
+       // update the albums view
+       gl_ui_edit_cancel(ad);
+
+       //add notification
+       gl_ui_create_notiinfo(ad, ad->albuminfo.layout,
+                             GL_UI_NOTIFY_DELETED);
+       return 0;
+}
+
+int gl_refresh_albums_list(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_cluster *old_current_album = ad->albuminfo.current_album;
+       char cluster_id[GL_MTYPE_ITEN_ID_LEN_MAX] = { 0, };
+       int i = 0;
+       gl_cluster *current = NULL;
+       bool b_get_cur_album = false;
+       /* Albums list would be update, reset flag */
+       ad->albuminfo.update_albums_list = false;
+
+       /* Save cluster ID to set new current_album from new albums list */
+       if (old_current_album && old_current_album->cluster &&
+           old_current_album->cluster->uuid) {
+               g_strlcpy(cluster_id, old_current_album->cluster->uuid,
+                         GL_MTYPE_ITEN_ID_LEN_MAX);
+               b_get_cur_album = true;
+       } else {
+               gl_dbg("None album selected, current album is unavailable.");
+       }
+
+       gl_db_get_cluster_list(ad);
+       /* need to reset current album */
+       ad->albuminfo.current_album = NULL;
+       ad->albuminfo.cluster_list->cur_pos = 0;
+
+       if (b_get_cur_album) {
+               gl_db_get_cluster_by_id(ad, cluster_id, &current, &i);
+               if(current && current->cluster) {
+                       ad->albuminfo.cluster_list->cur_pos = i;
+                       ad->albuminfo.current_album = current;
+                       gl_dbg("Reset current album: %s",
+                              current->cluster->display_name);
+                       gl_db_update_item_list(ad);
+                       return 0;
+               } else {
+                       /* Clear items list if current album doesn't exist */
+                       if (ad->selectedinfo.medias_elist)
+                               gl_db_selected_list_finalize(ad);
+                       gl_db_clear_item_list(ad);
+                       ad->maininfo.medias_cnt = 0;
+               }
+       }
+
+       return 0;
+}
+
+/**
+* Move files under root album [/opt/media or /opt/storage/sdcard] to a newly created album.
+* Used in 'Rename' album case.
+*/
+int
+gl_move_root_album(void* data, gl_cluster* cur_album, char* dest_path)
+{
+       GL_CHECK_VAL(data, -1);
+       GL_CHECK_VAL(cur_album, -1);
+       GL_CHECK_VAL(cur_album->cluster, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+
+       /* Get all medias of current album */
+       gl_db_get_item_list(ad, cur_album, GL_GET_ALL_RECORDS,
+                           GL_GET_ALL_RECORDS);
+
+       Eina_List* tmp_elist = NULL;
+       gl_item* gitem = NULL;
+       int popup_op = GL_POPUP_OP_NONE;
+       GL_CHECK_VAL(ad->maininfo.medias_elist, -1);
+
+       /* Move medias of album to dest folder */
+       EINA_LIST_FOREACH(ad->maininfo.medias_elist, tmp_elist, gitem)
+       {
+               if (gitem && gitem->item)
+               {
+                       gl_dbg("Move [%s]", gitem->item->file_url);
+                       if (gl_move_media_item(gitem, dest_path, true, &popup_op) != 0)
+                       {
+                               gl_dbgW("Failed to move this item");
+                       }
+
+                       gitem = NULL;
+               }
+               else
+               {
+                       gl_dbgE("Invalid item!");
+                       gl_db_clear_item_list(ad);
+                       return -1;
+               }
+       }
+
+       /* Free item list */
+       gl_db_clear_item_list(ad);
+
+    return 0;
+}
+
+/* 'Move medias' is only available in tab Albums */
+int gl_move_selected(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int i = 0;
+       /* Get selected medias count */
+       int cnt = gl_db_selected_list_count(ad);
+       gl_item *gitem = NULL;
+       int popup_op = GL_POPUP_OP_NONE;
+
+       for (i = 1; i <= cnt; i++)
+       {
+               gl_db_get_item_by_index(ad, i, true, &gitem);
+               if (gitem && gitem->item)
+               {
+                       gl_dbg("Selected [%s]", gitem->item->file_url);
+                       if (gl_move_media_item(gitem, ad->albuminfo.dest_folder, true, &popup_op) != 0)
+                       {
+                               gl_dbg("Failed to move this item");
+                       }
+                       gl_dbg("File Moved:::::::%d/%d-->try to update progressbar", i, cnt);
+               }
+               else
+               {
+                       gl_dbg("Invalid item!");
+               }
+
+               gl_dbg("Write pipe, make progressbar updated!");
+               gl_thread_write_pipe(ad, i, popup_op);
+
+               popup_op = GL_POPUP_OP_NONE;
+       }
+
+       return 0;
+}
+
+int gl_move_to_album(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       char folder_fullpath[GL_DIR_PATH_LEN_MAX] = { 0, };
+       char default_path[GL_DIR_PATH_LEN_MAX] = { 0, };
+       gl_cluster *cur_album = ad->albuminfo.current_album;
+       int cnt = gl_db_selected_list_count(ad);
+
+       /**
+        * 'move_album_id == NULL' is new album case,
+        * other move/save to some existed album.
+        */
+       if (ad->albuminfo.move_album_id == NULL) {
+               gl_dbg("---Popup list item: New album---");
+               ad->albuminfo.move_new_album = true;
+
+               if (gl_make_new_album(ad->albuminfo.new_album_name) != 0)
+               {
+                       gl_popup_create_popup(ad, GL_POPUP_NOBUT,
+                                       GL_STR_SAME_NAME_ALREADY_IN_USE);
+                       gl_dbgE("Failed to make a new directory!");
+                       gl_ui_update_select_widgets(ad);
+                       return -1;
+               }
+               if (gl_get_default_images_path(default_path) != 0)
+               {
+                       gl_dbgE("Failed to get default images path!");
+                       gl_ui_update_select_widgets(ad);
+                       return -1;
+               }
+               snprintf(folder_fullpath, GL_DIR_PATH_LEN_MAX, "%s/%s",
+                       default_path, ad->albuminfo.new_album_name);
+               /* add cluster record, sometimes it cannot be got while refresh cluster list. */
+               gl_db_add_cluster(ad, folder_fullpath);
+       } else {
+               ad->albuminfo.move_new_album = false;
+               gl_db_get_folder_fullpath(ad, ad->albuminfo.move_album_id,
+                                         folder_fullpath);
+               free(ad->albuminfo.move_album_id);
+               ad->albuminfo.move_album_id = NULL;
+       }
+
+       if (cur_album == NULL || cur_album->cluster == NULL)
+       {
+               gl_dbgE("[Error] Current album is NULL!");
+               gl_ui_update_select_widgets(ad);
+               return -1;
+       }
+
+       memset(ad->albuminfo.dest_folder, 0x00, GL_DIR_PATH_LEN_MAX);
+       g_strlcpy(ad->albuminfo.dest_folder, folder_fullpath, GL_DIR_PATH_LEN_MAX);
+       /* Check MMC state for cancel operation */
+       gl_check_mmc_state(ad, folder_fullpath);
+       gl_dbg("MMC state: %d.", ad->maininfo.mmc_state);
+       _gl_use_thread_operate_medias(ad, GL_STR_MOVING, cnt,
+                                     GL_MEDIA_OP_MOVE);
+       return 0;
+}
+
+/* Update view after moving process done */
+int gl_update_move_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d", view_mode);
+       gl_db_selected_list_finalize(ad);
+       gl_ui_destroy_selinfo(ad);
+       /* Update albums list and items list */
+       gl_refresh_albums_list(ad);
+
+       if (ad->maininfo.medias_cnt > 0) {
+               gl_ui_back_to_normal(ad);
+
+               /* Nocontents view created when update video list */
+               if (view_mode != GL_VIEW_VIDEOLIST)
+                       gl_ui_display_nocontents(ad);
+
+               /* Add notification */
+               gl_ui_create_notiinfo(ad, ad->gridinfo.layout,
+                                     GL_UI_NOTIFY_MOVED);
+       } else {
+               gl_dbgW("Empty current album, change to albums view!");
+               /* No file exists after moving done, change to albums view */
+               gl_albums_comeback_from_view(ad);
+               elm_naviframe_item_pop_to(ad->albuminfo.nf_it);
+
+               if (gl_check_gallery_empty(ad)) {
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               } else if (ad->albuminfo.cluster_list->edit_cnt == 0) {
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+               } else {
+                       gl_ui_disable_toolbar_item(ad, false, GL_NAVI_ALBUMS,
+                                                  false);
+               }
+               /* Add notification */
+               gl_ui_create_notiinfo(ad, ad->albuminfo.layout,
+                                     GL_UI_NOTIFY_MOVED);
+       }
+
+       return 0;
+}
+
+Eina_Bool gl_update_view(void *data, int mode)
+{
+       GL_CHECK_FALSE(data);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d", view_mode);
+       if (mode == GL_UPDATE_VIEW_NONE) {
+               gl_dbg("Don't need to update");
+               return EINA_FALSE;
+       }
+       /* reset internationalization */
+       int r = appcore_set_i18n(PACKAGE, LOCALEDIR);
+       if (r) {
+               gl_dbgE("appcore_set_i18n failed!");
+               return EINA_FALSE;
+       }
+
+       if (view_mode == GL_VIEW_ALBUMS ||
+                  view_mode == GL_VIEW_ALBUMS_EDIT ||
+                  view_mode == GL_VIEW_ALBUMS_RENAME) {
+               /* Albums list should be updated first */
+               gl_albums_update_view(ad);
+       } else if (view_mode == GL_VIEW_THUMBS ||
+                  view_mode == GL_VIEW_VIDEOLIST) {
+               gl_cluster *cur_album = ad->albuminfo.current_album;
+
+               /* MMC removed, change to albums view if in mmc album */
+               if (mode == GL_UPDATE_VIEW_MMC_REMOVED && cur_album &&
+                   cur_album->cluster &&
+                   cur_album->cluster->type == MINFO_MMC) {
+                       gl_dbgW("MMC removed, change to albums view!");
+                       gl_pop_to_ctrlbar_ly(ad, true);
+                       return EINA_TRUE;
+               }
+
+               /* Albums list should be updated first */
+               _gl_update_thumb_items(ad, true);
+       } else if (view_mode == GL_VIEW_THUMBS_EDIT ||
+                  view_mode == GL_VIEW_VIDEOLIST_EDIT) {
+               /* Check thread operation case */
+               if (ad->pbarinfo.sync_pipe) {
+                       gl_dbgW("Thread operation is in process!");
+                       return EINA_TRUE;
+               }
+
+               gl_cluster *cur_album = ad->albuminfo.current_album;
+               /* MMC removed, change to albums view if in mmc album */
+               if (mode == GL_UPDATE_VIEW_MMC_REMOVED && cur_album &&
+                   cur_album->cluster &&
+                   cur_album->cluster->type == MINFO_MMC) {
+                       gl_dbgW("MMC removed, change to albums view!");
+                       gl_pop_to_ctrlbar_ly(ad, true);
+                       return EINA_TRUE;
+               }
+
+               /* Albums list should be updated first */
+               _gl_update_thumb_items(ad, true);
+               return EINA_TRUE;
+       }
+       return EINA_TRUE;
+}
+
+int _gl_destroy_thumbs_edit_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       GL_CHECK_VAL(ad->gridinfo.edit_view, -1);
+       evas_object_del(ad->gridinfo.edit_view);
+       ad->gridinfo.edit_view = NULL;
+       ad->gridinfo.edit_layout = NULL;
+       return 0;
+}
+
+int gl_destroy_thumbs_view(void *data)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int view_mode = gl_get_view_mode(ad);
+       gl_dbg("view_mode: %d.", view_mode);
+
+       gl_del_invalid_widgets(ad, GL_INVALID_NONE);
+
+       if(ad->gridinfo.edit_view) {
+               _gl_destroy_thumbs_edit_view(ad);
+               gl_db_selected_list_finalize(ad);
+       } else {
+               gl_albums_del_grid_append_idler(ad);
+       }
+       gl_ui_destroy_selinfo(ad);
+       /* destroy imf */
+       gl_ui_destroy_imf(ad);
+
+       gl_grid_clear_view(ad);
+       gl_list_clear_view(ad);
+
+       ad->albuminfo.current_album = NULL;
+       ad->albuminfo.seg_mode = GL_CTRL_SEG_ALL;
+
+       /* Pop to controlbar layout */
+       elm_naviframe_item_pop_to(ad->albuminfo.nf_it);
+
+       return 0;
+}
+
+/**
+* b_update_albums_list
+*      True: Update albums list. False: Albums list already updated.
+*
+* It's in thumbnails view, video list view, or selectioinfo view.
+* Destroy invalid widegets or UGs.
+* Pop current invalid view to controlbar layout,
+* to show Albums view.
+*/
+int gl_pop_to_ctrlbar_ly(void *data, bool b_update_albums_list)
+{
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       gl_dbg("b_update_albums_list: %d", b_update_albums_list);
+
+       /* Destroy thumbnails/video_list view then pop to ctrlbar_ly */
+       gl_destroy_thumbs_view(ad);
+
+       /* Update albums list */
+       if (b_update_albums_list)
+               gl_refresh_albums_list(ad);
+
+       if (gl_check_gallery_empty(ad)) {
+               /* None albums exist, Change to albums view. */
+               gl_dbgW("Empty Gallery, change to Albums view.");
+               gl_albums_comeback_from_view(ad);
+               /* None albums, disable edit button/controlbar */
+               gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS, true);
+       } else {
+               /* Change to albums view. */
+               gl_dbg("Change to Albums view.");
+               gl_albums_comeback_from_view(ad);
+               /* None editable albums, disable edit button */
+               if (ad->albuminfo.cluster_list->edit_cnt == 0)
+                       gl_ui_disable_toolbar_item(ad, true, GL_NAVI_ALBUMS,
+                                                  true);
+       }
+       return 0;
+}
+
+/* Vibrate device */
+int gl_play_vibration(void *data)
+{
+       gl_dbg("");
+       GL_CHECK_VAL(data, -1);
+       gl_appdata *ad = (gl_appdata *)data;
+       int ret = -1;
+       int effectvibe_pattern = EFFCTVIBE_NOTIFICATION;
+
+       if (ad->entryinfo.haptic_handle > 0) {
+               gl_dbg("Remove previous haptic handle.");
+               _gl_stop_vibration(ad);
+       }
+
+       ret = device_haptic_open(DEV_IDX_0, 0);
+       if (ad->entryinfo.haptic_handle < 0) {
+               gl_dbgE("device_haptic_open failed[%d]!", ret);
+               return -1;
+       }
+       ad->entryinfo.haptic_handle = ret;
+
+       if (ad->entryinfo.vibration_timer) {
+               ecore_timer_del(ad->entryinfo.vibration_timer);
+               ad->entryinfo.vibration_timer = NULL;
+       }
+       Ecore_Timer *vibration_timer = NULL;
+       vibration_timer = ecore_timer_add(GL_TIMER_INTERVAL_VIBRATION,
+                                         _gl_vibration_timer_cb, data);
+       ad->entryinfo.vibration_timer = vibration_timer;
+
+       ret = device_haptic_play_pattern(ad->entryinfo.haptic_handle,
+                                        effectvibe_pattern, 1,
+                                        HAPTIC_FEEDBACK_LEVEL_5);
+
+       if (ret != 0) {
+               gl_dbgE("device_haptic_play_pattern failed[%d]!", ret);
+               return -1;
+       }
+
+       return 0;
+}
+
+char *_gl_get_thumb(void *data, const char *file_path, char **thumb_path)
+{
+       GL_CHECK_NULL(thumb_path);
+       if (*thumb_path && ecore_file_exists(*thumb_path) &&
+           (ecore_file_size(*thumb_path) > 0)) {
+               return NULL;
+       } else if (*thumb_path) {
+               gl_dbgW("Wrong thumb path[%s]", *thumb_path);
+               free(*thumb_path);
+               *thumb_path = NULL;
+       }
+
+       char *new_path = calloc(1, GL_FILE_PATH_LEN_MAX);
+       GL_CHECK_NULL(new_path);
+       if (data == NULL || file_path == NULL) {
+               snprintf(new_path, GL_FILE_PATH_LEN_MAX, "%s",
+                        GL_DEFAULT_THUMB_ICON);
+               return new_path;
+       }
+
+       gl_appdata *ad = (gl_appdata *)data;
+       minfo_get_thumb_path(ad->maininfo.db_handle, file_path, new_path,
+                            GL_FILE_PATH_LEN_MAX);
+       gl_dbgW("New path[%s]", new_path);
+       if (ecore_file_exists(new_path) && (ecore_file_size(new_path) > 0)) {
+               *thumb_path = new_path;
+               return NULL;
+       } else {
+               int ret = -1;
+               ret = thumbnail_request_from_db(file_path, new_path,
+                                               GL_FILE_PATH_LEN_MAX);
+               if (ret < 0) {
+                       memset(new_path, 0x00, GL_FILE_PATH_LEN_MAX);
+                       snprintf(new_path, GL_FILE_PATH_LEN_MAX, "%s",
+                                GL_DEFAULT_THUMB_ICON);
+                       return new_path;
+               } else {
+                       *thumb_path = new_path;
+                       gl_dbgW("New path[%s]", new_path);
+                       return NULL;
+               }
+       }
+}