Merge with devel/home/master
authorSung-jae Park <nicesj.park@samsung.com>
Thu, 16 Oct 2014 05:59:43 +0000 (14:59 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Thu, 16 Oct 2014 06:09:12 +0000 (15:09 +0900)
Replace package name with libdynamicbox_viewer

[model] Redwood,Kiran,B3(Wearable)
[binary_type] AP
[customer] Docomo/Orange/ATT/Open
[issue#] N/A
[problem]
[cause]
[solution]
[team] HomeTF
[request]
[horizontal_expansion]

Change-Id: I5d142e7d2c8df41b2df9914fa3f37170554f0159

453 files changed:
CMakeLists.txt
doc/dynamicbox_viewer_doc.h
include/desc_parser.h
include/dynamicbox.h
include/dynamicbox_internal.h [new file with mode: 0644]
include/fb.h
include/livebox.h [deleted file]
include/livebox_internal.h [deleted file]
include/master_rpc.h
include/provider_cmd_list.h [deleted file]
include/util.h
live.viewer/CMakeLists.txt
live.viewer/LICENSE [new file with mode: 0644]
live.viewer/NOTICE [new file with mode: 0644]
live.viewer/com.samsung.w-add-viewer.rule [new file with mode: 0644]
live.viewer/com.samsung.w-add-viewer.xml [new file with mode: 0644]
live.viewer/dbox.app-dbox.only/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.app-dbox.only/include/instance.h [new file with mode: 0644]
live.viewer/dbox.app-dbox.only/src/instance.c [new file with mode: 0644]
live.viewer/dbox.app-dbox.only/src/main.c [new file with mode: 0644]
live.viewer/dbox.app-template/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.app-template/src/main.c [new file with mode: 0644]
live.viewer/dbox.app/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.desktop.in [new file with mode: 0644]
live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.ini [new file with mode: 0644]
live.viewer/dbox.app/data/elm_demo_tizen.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/access.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/autoscroll.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/button.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/calendar.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/check.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/colorpalette.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/colorplane.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/colorselector.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/controlbar.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/ctxpopup.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/datefield.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/dayselector.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/dnd.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/entry.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/floating.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/fonteffecttest.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/fonttest.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/gengrid_customized_theme.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_color.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_externals.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_macro.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_progress_style.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_swipe.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/genlist_variable_size.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/index.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/label.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/multibuttonentry.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/multitouch.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/naviframe.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/nocontents.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/popup_custom.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/progressbar_custom.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/progressbar_default.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/progressbar_macro.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/radio.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/radio_custom.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/segmentcontrol.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/slider.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/slider_custom.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/slider_default.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/slider_volume.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style_button.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style_ctxpopup_camera.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style_ctxpopup_imageeditor.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style_navibar.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/style_popup.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/tickernoti.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/tizen-dark-inc.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/transit.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/vi.edc [new file with mode: 0644]
live.viewer/dbox.app/data/groups/video.edc [new file with mode: 0644]
live.viewer/dbox.app/include/access.h [new file with mode: 0644]
live.viewer/dbox.app/include/autoscroll.h [new file with mode: 0644]
live.viewer/dbox.app/include/bubble.h [new file with mode: 0644]
live.viewer/dbox.app/include/button.h [new file with mode: 0644]
live.viewer/dbox.app/include/center_popup.h [new file with mode: 0644]
live.viewer/dbox.app/include/check.h [new file with mode: 0644]
live.viewer/dbox.app/include/colorclass.h [new file with mode: 0644]
live.viewer/dbox.app/include/colorselector.h [new file with mode: 0644]
live.viewer/dbox.app/include/config.h [new file with mode: 0644]
live.viewer/dbox.app/include/config_abort.h [new file with mode: 0644]
live.viewer/dbox.app/include/config_mirror.h [new file with mode: 0644]
live.viewer/dbox.app/include/config_scrolling.h [new file with mode: 0644]
live.viewer/dbox.app/include/controlbar_animation.h [new file with mode: 0644]
live.viewer/dbox.app/include/controlbar_vertical.h [new file with mode: 0644]
live.viewer/dbox.app/include/ctxpopup.h [new file with mode: 0644]
live.viewer/dbox.app/include/datetime.h [new file with mode: 0644]
live.viewer/dbox.app/include/debug.h [new file with mode: 0644]
live.viewer/dbox.app/include/dialoguegroup.h [new file with mode: 0644]
live.viewer/dbox.app/include/dnd.h [new file with mode: 0644]
live.viewer/dbox.app/include/dnd_gengrid_box.h [new file with mode: 0644]
live.viewer/dbox.app/include/dnd_genlist_gengrid.h [new file with mode: 0644]
live.viewer/dbox.app/include/dnd_layout_genlist.h [new file with mode: 0644]
live.viewer/dbox.app/include/drawer.h [new file with mode: 0644]
live.viewer/dbox.app/include/elmdemo_test.h [new file with mode: 0644]
live.viewer/dbox.app/include/elmdemo_util.h [new file with mode: 0644]
live.viewer/dbox.app/include/elmglviewgears.h [new file with mode: 0644]
live.viewer/dbox.app/include/entry.h [new file with mode: 0644]
live.viewer/dbox.app/include/fake-tizen.h [new file with mode: 0644]
live.viewer/dbox.app/include/fastscroll.h [new file with mode: 0644]
live.viewer/dbox.app/include/floating.h [new file with mode: 0644]
live.viewer/dbox.app/include/fonteffecttest.h [new file with mode: 0644]
live.viewer/dbox.app/include/fonttest.h [new file with mode: 0644]
live.viewer/dbox.app/include/gengrid.h [new file with mode: 0644]
live.viewer/dbox.app/include/genlist.h [new file with mode: 0644]
live.viewer/dbox.app/include/handler.h [new file with mode: 0644]
live.viewer/dbox.app/include/imageslider.h [new file with mode: 0644]
live.viewer/dbox.app/include/index.h [new file with mode: 0644]
live.viewer/dbox.app/include/indicator.h [new file with mode: 0644]
live.viewer/dbox.app/include/instance.h [new file with mode: 0644]
live.viewer/dbox.app/include/label.h [new file with mode: 0644]
live.viewer/dbox.app/include/label_colorstyles.h [new file with mode: 0644]
live.viewer/dbox.app/include/label_ellipsis.h [new file with mode: 0644]
live.viewer/dbox.app/include/label_linebreakmodes.h [new file with mode: 0644]
live.viewer/dbox.app/include/label_slide.h [new file with mode: 0644]
live.viewer/dbox.app/include/label_textstyles.h [new file with mode: 0644]
live.viewer/dbox.app/include/layout.h [new file with mode: 0644]
live.viewer/dbox.app/include/map.h [new file with mode: 0644]
live.viewer/dbox.app/include/multibuttonentry.h [new file with mode: 0644]
live.viewer/dbox.app/include/naviframe.h [new file with mode: 0644]
live.viewer/dbox.app/include/panes.h [new file with mode: 0644]
live.viewer/dbox.app/include/popup.h [new file with mode: 0644]
live.viewer/dbox.app/include/progressbar.h [new file with mode: 0644]
live.viewer/dbox.app/include/progressbar_custom.h [new file with mode: 0644]
live.viewer/dbox.app/include/radio.h [new file with mode: 0644]
live.viewer/dbox.app/include/searchbar.h [new file with mode: 0644]
live.viewer/dbox.app/include/segmentcontrol.h [new file with mode: 0644]
live.viewer/dbox.app/include/selectioninfo.h [new file with mode: 0644]
live.viewer/dbox.app/include/slider.h [new file with mode: 0644]
live.viewer/dbox.app/include/slider_custom.h [new file with mode: 0644]
live.viewer/dbox.app/include/slider_default.h [new file with mode: 0644]
live.viewer/dbox.app/include/slider_volume.h [new file with mode: 0644]
live.viewer/dbox.app/include/style_button.h [new file with mode: 0644]
live.viewer/dbox.app/include/test_fontchange.h [new file with mode: 0644]
live.viewer/dbox.app/include/test_genlist.h [new file with mode: 0644]
live.viewer/dbox.app/include/testmode.h [new file with mode: 0644]
live.viewer/dbox.app/include/theme.h [new file with mode: 0644]
live.viewer/dbox.app/include/tickernoti.h [new file with mode: 0644]
live.viewer/dbox.app/include/toolbar.h [new file with mode: 0644]
live.viewer/dbox.app/include/toolbar_mix.h [new file with mode: 0644]
live.viewer/dbox.app/include/toolbar_tab.h [new file with mode: 0644]
live.viewer/dbox.app/include/toolbar_tool.h [new file with mode: 0644]
live.viewer/dbox.app/include/transit.h [new file with mode: 0644]
live.viewer/dbox.app/include/util.h [new file with mode: 0644]
live.viewer/dbox.app/include/vi.h [new file with mode: 0644]
live.viewer/dbox.app/include/video.h [new file with mode: 0644]
live.viewer/dbox.app/include/wallpaper.h [new file with mode: 0644]
live.viewer/dbox.app/include/window.h [new file with mode: 0644]
live.viewer/dbox.app/res/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.app/src/access.c [new file with mode: 0644]
live.viewer/dbox.app/src/autoscroll.c [new file with mode: 0644]
live.viewer/dbox.app/src/bubble.c [new file with mode: 0644]
live.viewer/dbox.app/src/button.c [new file with mode: 0644]
live.viewer/dbox.app/src/center_popup.c [new file with mode: 0644]
live.viewer/dbox.app/src/check.c [new file with mode: 0644]
live.viewer/dbox.app/src/colorclass.c [new file with mode: 0644]
live.viewer/dbox.app/src/colorselector.c [new file with mode: 0644]
live.viewer/dbox.app/src/colorselector_components.c [new file with mode: 0644]
live.viewer/dbox.app/src/colorselector_palette.c [new file with mode: 0644]
live.viewer/dbox.app/src/colorselector_plane.c [new file with mode: 0644]
live.viewer/dbox.app/src/config.c [new file with mode: 0644]
live.viewer/dbox.app/src/config_abort.c [new file with mode: 0644]
live.viewer/dbox.app/src/config_mirror.c [new file with mode: 0644]
live.viewer/dbox.app/src/config_scrolling.c [new file with mode: 0644]
live.viewer/dbox.app/src/ctxpopup.c [new file with mode: 0644]
live.viewer/dbox.app/src/datetime.c [new file with mode: 0644]
live.viewer/dbox.app/src/dialoguegroup.c [new file with mode: 0644]
live.viewer/dbox.app/src/dnd.c [new file with mode: 0644]
live.viewer/dbox.app/src/dnd_gengrid_box.c [new file with mode: 0644]
live.viewer/dbox.app/src/dnd_genlist_gengrid.c [new file with mode: 0644]
live.viewer/dbox.app/src/dnd_layout_genlist.c [new file with mode: 0644]
live.viewer/dbox.app/src/drawer.c [new file with mode: 0644]
live.viewer/dbox.app/src/elmdemo_test.c [new file with mode: 0644]
live.viewer/dbox.app/src/elmdemo_util.c [new file with mode: 0644]
live.viewer/dbox.app/src/elmglviewgears.c [new file with mode: 0644]
live.viewer/dbox.app/src/entry.c [new file with mode: 0644]
live.viewer/dbox.app/src/fake_tizen.c [new file with mode: 0644]
live.viewer/dbox.app/src/fastscroll.c [new file with mode: 0644]
live.viewer/dbox.app/src/floating.c [new file with mode: 0644]
live.viewer/dbox.app/src/fonteffecttest.c [new file with mode: 0644]
live.viewer/dbox.app/src/fonttest.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid_customized_incheck.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid_customized_theme.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid_default.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid_gridtext.c [new file with mode: 0644]
live.viewer/dbox.app/src/gengrid_groupindex.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_check.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_collection.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_color.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_dialogue.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_dialogue_appitem.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_dialogue_item.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_edit.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_editfield.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_expandable.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_fastscroll.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_normal.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_radio.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_scroll_jump.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_separator.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_swipe.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_theme.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/genlist_variable_height.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_bubble.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_externals.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_grouptitle.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_music_player_style.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_pinchzoom.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/removed/genlist_variable_width.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist/test/genlist_sample.c [new file with mode: 0644]
live.viewer/dbox.app/src/genlist_normal.c [new file with mode: 0644]
live.viewer/dbox.app/src/handler.c [new file with mode: 0644]
live.viewer/dbox.app/src/htt.c [new file with mode: 0644]
live.viewer/dbox.app/src/imageslider.c [new file with mode: 0644]
live.viewer/dbox.app/src/index.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_4_way.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_horizontal.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_horizontal_loop.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_slider.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_vertical.c [new file with mode: 0644]
live.viewer/dbox.app/src/index_vertical_loop.c [new file with mode: 0644]
live.viewer/dbox.app/src/indicator.c [new file with mode: 0644]
live.viewer/dbox.app/src/instance.c [new file with mode: 0644]
live.viewer/dbox.app/src/label.c [new file with mode: 0644]
live.viewer/dbox.app/src/label_colorstyles.c [new file with mode: 0644]
live.viewer/dbox.app/src/label_ellipsis.c [new file with mode: 0644]
live.viewer/dbox.app/src/label_linebreakmodes.c [new file with mode: 0644]
live.viewer/dbox.app/src/label_slide.c [new file with mode: 0644]
live.viewer/dbox.app/src/label_textstyles.c [new file with mode: 0644]
live.viewer/dbox.app/src/layout.c [new file with mode: 0644]
live.viewer/dbox.app/src/layout_nocontent_styles.c [new file with mode: 0644]
live.viewer/dbox.app/src/list.c [new file with mode: 0644]
live.viewer/dbox.app/src/main.c [new file with mode: 0644]
live.viewer/dbox.app/src/map.c [new file with mode: 0644]
live.viewer/dbox.app/src/multibuttonentry.c [new file with mode: 0644]
live.viewer/dbox.app/src/naviframe.c [new file with mode: 0644]
live.viewer/dbox.app/src/panes.c [new file with mode: 0644]
live.viewer/dbox.app/src/popup.c [new file with mode: 0644]
live.viewer/dbox.app/src/progressbar.c [new file with mode: 0644]
live.viewer/dbox.app/src/progressbar_custom.c [new file with mode: 0644]
live.viewer/dbox.app/src/progressbar_default.c [new file with mode: 0644]
live.viewer/dbox.app/src/radio.c [new file with mode: 0644]
live.viewer/dbox.app/src/searchbar.c [new file with mode: 0644]
live.viewer/dbox.app/src/searchbar_external.c [new file with mode: 0644]
live.viewer/dbox.app/src/searchbar_no_search_icon.c [new file with mode: 0644]
live.viewer/dbox.app/src/searchbar_normal.c [new file with mode: 0644]
live.viewer/dbox.app/src/searchbar_vi.c [new file with mode: 0644]
live.viewer/dbox.app/src/segmentcontrol.c [new file with mode: 0644]
live.viewer/dbox.app/src/selectioninfo.c [new file with mode: 0644]
live.viewer/dbox.app/src/slider.c [new file with mode: 0644]
live.viewer/dbox.app/src/slider_custom.c [new file with mode: 0644]
live.viewer/dbox.app/src/slider_default.c [new file with mode: 0644]
live.viewer/dbox.app/src/slider_volume.c [new file with mode: 0644]
live.viewer/dbox.app/src/style_button.c [new file with mode: 0644]
live.viewer/dbox.app/src/test/genlist_test_all_styles.c [new file with mode: 0644]
live.viewer/dbox.app/src/test/genlist_test_sweep_edit.c [new file with mode: 0644]
live.viewer/dbox.app/src/test/test_fontchange.c [new file with mode: 0644]
live.viewer/dbox.app/src/test/testmode.c [new file with mode: 0644]
live.viewer/dbox.app/src/theme.c [new file with mode: 0644]
live.viewer/dbox.app/src/tickernoti.c [new file with mode: 0644]
live.viewer/dbox.app/src/toolbar.c [new file with mode: 0644]
live.viewer/dbox.app/src/toolbar_mix.c [new file with mode: 0644]
live.viewer/dbox.app/src/toolbar_tab.c [new file with mode: 0644]
live.viewer/dbox.app/src/toolbar_tool.c [new file with mode: 0644]
live.viewer/dbox.app/src/transit.c [new file with mode: 0644]
live.viewer/dbox.app/src/util.c [new file with mode: 0644]
live.viewer/dbox.app/src/vi.c [new file with mode: 0644]
live.viewer/dbox.app/src/video.c [new file with mode: 0644]
live.viewer/dbox.app/src/video_gesture.c [new file with mode: 0644]
live.viewer/dbox.app/src/video_player.c [new file with mode: 0644]
live.viewer/dbox.app/src/wallpaper.c [new file with mode: 0644]
live.viewer/dbox.app/src/window.c [new file with mode: 0644]
live.viewer/dbox.calendar/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.calendar/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.calendar/data/w_calendar_icon.edc [new file with mode: 0644]
live.viewer/dbox.calendar/include/main.h [new file with mode: 0644]
live.viewer/dbox.calendar/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.calendar/src/main.c [new file with mode: 0644]
live.viewer/dbox.calendar/src/virtual_canvas.c [new file with mode: 0644]
live.viewer/dbox.image/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.image/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.image/data/hello.edc [new file with mode: 0644]
live.viewer/dbox.image/include/main.h [new file with mode: 0644]
live.viewer/dbox.image/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.image/src/main.c [new file with mode: 0644]
live.viewer/dbox.image/src/virtual_canvas.c [new file with mode: 0644]
live.viewer/dbox.scroller/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.scroller/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.scroller/data/scroller.edc [new file with mode: 0644]
live.viewer/dbox.scroller/include/genlist06.h [new file with mode: 0644]
live.viewer/dbox.scroller/include/main.h [new file with mode: 0644]
live.viewer/dbox.scroller/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.scroller/src/genlist06.c [new file with mode: 0644]
live.viewer/dbox.scroller/src/main.c [new file with mode: 0644]
live.viewer/dbox.simple/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.simple/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.simple/data/simple.edc [new file with mode: 0644]
live.viewer/dbox.simple/include/main.h [new file with mode: 0644]
live.viewer/dbox.simple/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.simple/src/main.c [new file with mode: 0644]
live.viewer/dbox.text/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.text/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.text/data/hello.edc [new file with mode: 0644]
live.viewer/dbox.text/include/main.h [new file with mode: 0644]
live.viewer/dbox.text/src/main.c [new file with mode: 0644]
live.viewer/dbox.transit/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.transit/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.transit/data/transit.edc [new file with mode: 0644]
live.viewer/dbox.transit/include/main.h [new file with mode: 0644]
live.viewer/dbox.transit/include/transit04.h [new file with mode: 0644]
live.viewer/dbox.transit/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.transit/src/main.c [new file with mode: 0644]
live.viewer/dbox.transit/src/transit04.c [new file with mode: 0644]
live.viewer/dbox.video/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.video/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.video/data/hello.edc [new file with mode: 0644]
live.viewer/dbox.video/include/main.h [new file with mode: 0644]
live.viewer/dbox.video/include/player.h [new file with mode: 0644]
live.viewer/dbox.video/src/main.c [new file with mode: 0644]
live.viewer/dbox.video/src/player.c [new file with mode: 0644]
live.viewer/dbox.win/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.win/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/dbox.win/data/hello.edc [new file with mode: 0644]
live.viewer/dbox.win/include/main.h [new file with mode: 0644]
live.viewer/dbox.win/include/virtual_canvas.h [new file with mode: 0644]
live.viewer/dbox.win/src/main.c [new file with mode: 0644]
live.viewer/include/debug.h [deleted file]
live.viewer/include/dlist.h [deleted file]
live.viewer/include/lb.h [deleted file]
live.viewer/include/live_scroller.h [deleted file]
live.viewer/include/main.h [deleted file]
live.viewer/include/scroller.h [deleted file]
live.viewer/include/util.h [deleted file]
live.viewer/live.viewer.xml [deleted file]
live.viewer/packaging/com.samsung.w-add-viewer.manifest [new file with mode: 0644]
live.viewer/packaging/com.samsung.w-add-viewer.spec [new file with mode: 0644]
live.viewer/packaging/live.viewer.spec [deleted file]
live.viewer/res/CMakeLists.txt [deleted file]
live.viewer/res/live-viewer.edc [deleted file]
live.viewer/src/dlist.c [deleted file]
live.viewer/src/lb.c [deleted file]
live.viewer/src/live_scroller.c [deleted file]
live.viewer/src/main.c [deleted file]
live.viewer/src/scroller.c [deleted file]
live.viewer/src/util.c [deleted file]
live.viewer/viewer/CMakeLists.txt [new file with mode: 0644]
live.viewer/viewer/com.samsung.w-add-viewer.desktop.in [new file with mode: 0644]
live.viewer/viewer/data/CMakeLists.txt [new file with mode: 0644]
live.viewer/viewer/data/dynamicbox.edc [new file with mode: 0644]
live.viewer/viewer/data/w_add_viewer.edc [new file with mode: 0644]
live.viewer/viewer/include/dynamicbox_evas.h [new file with mode: 0644]
live.viewer/viewer/include/main.h [new file with mode: 0644]
live.viewer/viewer/po/CMakeLists.txt [new file with mode: 0644]
live.viewer/viewer/po/ar.po [new file with mode: 0644]
live.viewer/viewer/po/as.po [new file with mode: 0644]
live.viewer/viewer/po/az.po [new file with mode: 0644]
live.viewer/viewer/po/bg.po [new file with mode: 0644]
live.viewer/viewer/po/bn.po [new file with mode: 0644]
live.viewer/viewer/po/ca.po [new file with mode: 0644]
live.viewer/viewer/po/cs.po [new file with mode: 0644]
live.viewer/viewer/po/da.po [new file with mode: 0644]
live.viewer/viewer/po/de_DE.po [new file with mode: 0644]
live.viewer/viewer/po/el_GR.po [new file with mode: 0644]
live.viewer/viewer/po/en.po [new file with mode: 0644]
live.viewer/viewer/po/en_PH.po [new file with mode: 0644]
live.viewer/viewer/po/en_US.po [new file with mode: 0644]
live.viewer/viewer/po/es_ES.po [new file with mode: 0644]
live.viewer/viewer/po/es_MX.po [new file with mode: 0644]
live.viewer/viewer/po/et.po [new file with mode: 0644]
live.viewer/viewer/po/eu.po [new file with mode: 0644]
live.viewer/viewer/po/fa.po [new file with mode: 0644]
live.viewer/viewer/po/fi.po [new file with mode: 0644]
live.viewer/viewer/po/fil.po [new file with mode: 0644]
live.viewer/viewer/po/fr_CA.po [new file with mode: 0644]
live.viewer/viewer/po/fr_FR.po [new file with mode: 0644]
live.viewer/viewer/po/ga.po [new file with mode: 0644]
live.viewer/viewer/po/gl.po [new file with mode: 0644]
live.viewer/viewer/po/gu.po [new file with mode: 0644]
live.viewer/viewer/po/he.po [new file with mode: 0644]
live.viewer/viewer/po/hi.po [new file with mode: 0644]
live.viewer/viewer/po/hr.po [new file with mode: 0644]
live.viewer/viewer/po/hu.po [new file with mode: 0644]
live.viewer/viewer/po/hy.po [new file with mode: 0644]
live.viewer/viewer/po/id.po [new file with mode: 0644]
live.viewer/viewer/po/is.po [new file with mode: 0644]
live.viewer/viewer/po/it_IT.po [new file with mode: 0644]
live.viewer/viewer/po/ja_JP.po [new file with mode: 0644]
live.viewer/viewer/po/ka.po [new file with mode: 0644]
live.viewer/viewer/po/khmer.po [new file with mode: 0644]
live.viewer/viewer/po/kk.po [new file with mode: 0644]
live.viewer/viewer/po/kn.po [new file with mode: 0644]
live.viewer/viewer/po/ko_KR.po [new file with mode: 0644]
live.viewer/viewer/po/lo.po [new file with mode: 0644]
live.viewer/viewer/po/lt.po [new file with mode: 0644]
live.viewer/viewer/po/lv.po [new file with mode: 0644]
live.viewer/viewer/po/mk.po [new file with mode: 0644]
live.viewer/viewer/po/ml.po [new file with mode: 0644]
live.viewer/viewer/po/mr.po [new file with mode: 0644]
live.viewer/viewer/po/ms.po [new file with mode: 0644]
live.viewer/viewer/po/my.po [new file with mode: 0644]
live.viewer/viewer/po/nb.po [new file with mode: 0644]
live.viewer/viewer/po/ne.po [new file with mode: 0644]
live.viewer/viewer/po/nl_NL.po [new file with mode: 0644]
live.viewer/viewer/po/or.po [new file with mode: 0644]
live.viewer/viewer/po/pa.po [new file with mode: 0644]
live.viewer/viewer/po/pl.po [new file with mode: 0644]
live.viewer/viewer/po/pt_BR.po [new file with mode: 0644]
live.viewer/viewer/po/pt_PT.po [new file with mode: 0644]
live.viewer/viewer/po/ro.po [new file with mode: 0644]
live.viewer/viewer/po/ru_RU.po [new file with mode: 0644]
live.viewer/viewer/po/sinhala.po [new file with mode: 0644]
live.viewer/viewer/po/sk.po [new file with mode: 0644]
live.viewer/viewer/po/sl.po [new file with mode: 0644]
live.viewer/viewer/po/sq.po [new file with mode: 0644]
live.viewer/viewer/po/sr.po [new file with mode: 0644]
live.viewer/viewer/po/sv.po [new file with mode: 0644]
live.viewer/viewer/po/ta.po [new file with mode: 0644]
live.viewer/viewer/po/te.po [new file with mode: 0644]
live.viewer/viewer/po/th.po [new file with mode: 0644]
live.viewer/viewer/po/tr_TR.po [new file with mode: 0644]
live.viewer/viewer/po/uk.po [new file with mode: 0644]
live.viewer/viewer/po/update-po.sh [new file with mode: 0644]
live.viewer/viewer/po/ur.po [new file with mode: 0644]
live.viewer/viewer/po/uz.po [new file with mode: 0644]
live.viewer/viewer/po/vi.po [new file with mode: 0644]
live.viewer/viewer/po/zh_CN.po [new file with mode: 0644]
live.viewer/viewer/po/zh_HK.po [new file with mode: 0644]
live.viewer/viewer/po/zh_TW.po [new file with mode: 0644]
live.viewer/viewer/src/dynamicbox_evas.c [new file with mode: 0644]
live.viewer/viewer/src/main.c [new file with mode: 0644]
livebox-viewer.pc.in [deleted file]
packaging/libdynamicbox_viewer.manifest [moved from packaging/liblivebox-viewer.manifest with 100% similarity]
packaging/libdynamicbox_viewer.spec [moved from packaging/liblivebox-viewer.spec with 78% similarity]
src/client.c
src/desc_parser.c
src/dynamicbox.c
src/dynamicbox_internal.c [new file with mode: 0644]
src/fb.c
src/fb_wayland.c
src/file_service.c
src/livebox.c [deleted file]
src/master_rpc.c
src/util.c

index 333d2c0..6b259bf 100644 (file)
@@ -1,5 +1,5 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(livebox-viewer C)
+PROJECT(dynamicbox_viewer C)
 
 SET(PREFIX ${CMAKE_INSTALL_PREFIX})
 SET(EXEC_PREFIX "\${prefix}")
@@ -22,20 +22,20 @@ pkg_check_modules(pkgs REQUIRED
        com-core
        sqlite3
        db-util
-       livebox-service
+       dynamicbox_service
        vconf
 )
 
 SET(BUILD_SOURCE
-       src/dlist.c
-       src/livebox.c
-       src/util.c
-       src/desc_parser.c
-       src/master_rpc.c
        src/client.c
-       src/file_service.c
        src/conf.c
+       src/desc_parser.c
+       src/dlist.c
        src/dynamicbox.c
+       src/dynamicbox_internal.c
+       src/file_service.c
+       src/master_rpc.c
+       src/util.c
 )
 
 IF (X11_SUPPORT)
@@ -72,7 +72,7 @@ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline -g"
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
 
 ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
-ADD_DEFINITIONS("-DLOG_TAG=\"LIVEBOX_VIEWER\"")
+ADD_DEFINITIONS("-DLOG_TAG=\"DYNAMICBOX_VIEWER\"")
 ADD_DEFINITIONS("-DNDEBUG")
 ADD_DEFINITIONS("-D_USE_ECORE_TIME_GET")
 #ADD_DEFINITIONS("-DFLOG")
@@ -92,7 +92,7 @@ SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${PROJECT_NAME}
 
 INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib)
 INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/livebox.h DESTINATION include/${PROJECT_NAME})
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/dynamicbox.h DESTINATION include/dynamicbox_viewer)
+               
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/include/dynamicbox.h DESTINATION include/${PROJECT_NAME})
+
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "lib${PROJECT_NAME}")
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME "libdynamicbox_viewer")
index d7ee1cc..bc13a86 100644 (file)
@@ -29,7 +29,7 @@
  * The Dynamic Box is the widget of the TIZEN.
  *
  * It works as a small application displayed on other applications' (such as homescreen, lockscreen, etc ...) view.
- * Each Dynamic Box can have (not a mandatory option) a Glance Bar (progressive disclosure) in which more detailed information can be found.
+ * Each Dynamic Box can have (not a mandatory option) a Glance Bar (Glance Bar) in which more detailed information can be found.
  * The content of Glance Bar can be exposed when a certain gesture (e.g., flick-down) has been applied to the Dynamic Box.
  * If you are interested in developing a dynamic box, there are things you should know prior to making any source code for the box.
  * To make your Dynamic Box added to any Dynamic Box viewer application (e.g., live panel in our case), then you need to create and prepare    
@@ -44,9 +44,9 @@
  * Passing an image file (whose name is the previously given name) is the basic method for providing contents to the viewer.
  * But if you want play animation or handles user event in real-time, you can use the buffer type.
  *
- * And you should prepare the content of the Progressive Disclosure.
- * The Progressive Dislcosure is only updated by the "buffer" type. so you should prepare the layout script for it.
- * If you didn't install any script file for progressive disclosure, the viewer will ignore the "flick down" event from your dynamic box.
+ * And you should prepare the content of the Glance Bar.
+ * The Glance Bar is only updated by the "buffer" type. so you should prepare the layout script for it.
+ * If you didn't install any script file for Glance Bar, the viewer will ignore the "flick down" event from your dynamic box.
  *
  * @subsubsection DynamicBox 1.1 Dynamic Box
  * Live box is a default content of your widget. It always displays on the screen and updated periodically.
@@ -55,9 +55,9 @@
  * @image html stock.png Stock Dynamic Box
  * @image html twitter.png Twitter Dynamic Box
  *
- * @subsubsection ProgressiveDisclosure 1.2 Progressive Disclosure
- * @image html PD.png Progressive Disclosure
- * Progressive disclosure will be displayed when a user flicks down a dynamic box. (basically it depends on the implementation of the view applications)
+ * @subsubsection GlanceBar 1.2 Glance Bar
+ * @image html PD.png Glance Bar
+ * Glance Bar will be displayed when a user flicks down a dynamic box. (basically it depends on the implementation of the viewer applications)
  * To supports this, a developer should prepare the layout script (EDJE only for the moment) of the dynamic box's Glance Bar. (or you can use the buffer directly)
  * Data provider supports EDJE script but the developer can use various scripts if (which is BIG IF) their interpreters can be implemented based on evas & ecore.
  *
@@ -82,7 +82,7 @@
  *
  * @subsubsection ImageFormat 2.1 Via image file
  * This is the basic method for providing content of a dynamic box to the viewer application.
- * But this can be used only for the dynamic box. (Unavailable for the progressive disclosure).
+ * But this can be used only for the dynamic box. (Unavailable for the Glance Bar).
  * When your dynamic box is created, the provider will assign an unique ID for your dynamic box(it would be a filename).
  * You should keep that ID until your dynamic box is running. The ID will be passed to you via dynamicbox_create function.
  * \image html image_format.png
  * This type is only supported for 3rd party dynamic box such as OSP and WEB.
  * Inhouse(EFL) dynamic box is not able to use this buffer type for the box content.
  *
- * @subsection PackageNTools 3. How can I get the development packages or tools?
- *
- * @subsection DevelopDynamicBox 4. How can I write a new dynamic box
- *
- * @subsection TestDynamicBox 5. How can I test my dynamic box
- *
- * @subsection DynamicBoxDirectory 6. Dynamic Box directory hierachy
+ * @subsection DynamicBoxDirectory 3. Dynamic Box directory hierachy
  * @image html preload_folder.png
  * @image html download_folder.png
+ *
+ * @subsection WritingViewerApp 4. Writing a new application for displaying Dynamic Boxes
+ * If you want install dynamic boxes on your application screen, you should initialize the viewer system first.
+ *
+ * @code
+ * extern int dynamicbox_init(void *disp, int prevent_overwrite, double event_filter, int use_thread);
+ * @endcode
+ *
+ * @a disp should be current display object. if we are on X11 based windowing system, it will give you a Display Object, when you connect to X Server.
+ * Viewer application also needs it to preparing rendering buffer to display contents of dynamic boxes.
+ *
+ * @a prevent_overwirte flag is used for image or script type dynamic boxes.
+ * If this option is turn on, the viewer library will copy the image file of dyanmic box content to "reader" folder.
+ * To prevent from overwriting content image file.
+ *
+ * @a event_filter is used for feeding events.
+ * Basically, the dynamic box can be feed touch event by viewer application or master widget controller. (aka, data-provider-master).
+ * If a viewer feeds event to the dynamic box, it could more slow than data-provider-master's direct feeding.
+ * But sometimes, the viewer requires to feeds event by itself.
+ * In that case, we should choose the feeding option. feeding every events can be slow down.
+ * To save it, this event_filter will be used. if the event is generated in this time-gap, it will be ignored.
+ *
+ * @a use_thread if this flag is turned on, the viewer library will create a new thread for handling the IPC packets only.
+ * It will helps to increase the throughput of main thread. because it will not be interrupted to handles IPC packets.
+ *
+ * After the viewer is initiated, you can create a new box and locate it in your screen.
+ *
+ * Opposite function is "dynamicbox_fini"
+ *
+ * @code
+ * extern int dynamicbox_fini(void);
+ * @endcode
+ *
+ * Here is a sample code
+ *
+ * @code
+ * #include <stdio.h>
+ * #include <errno.h>
+ * #include <dynamicbox.h>
+ * #include <app.h>
+ *
+ * #include <dlog.h>
+ *
+ * int errno;
+ *
+ * static bool _create_cb(void *data)
+ * {
+ *      int ret;
+ *     ret = dynamicbox_init(NULL, 1, 0.0f, 1);
+ *      if (ret != DBOX_STATUS_ERROR_NONE) {
+ *          LOGE("Failed to initialize the dynamic box viewer");
+ *      }
+ *      return true;
+ * }
+ *
+ * static void _terminate_cb(void *data)
+ * {
+ *     dynamicbox_fini();
+ * }
+ *
+ * int main(int argc, char *argv[])
+ * {
+ *     app_event_callback_s event_callback;
+ *     event_callback.create = _create_cb;
+ *     event_callback.terminate = _terminate_cb;
+ *     event_callback.pause = _pause_cb;
+ *     event_callback.resume = _resume_cb;
+ *     event_callback.app_control = _app_control;
+ *     event_callback.low_memory = NULL;
+ *     event_callback.low_battery = NULL;
+ *     event_callback.device_orientation = NULL;
+ *     event_callback.language_changed = _language_changed;
+ *     event_callback.region_format_changed = NULL;
+ *     
+ *     return app_efl_main(&argc, &argv, &event_callback, &main_info);
+ * }
+ * @endocde
+ *
+ * If you want add a new dynamic box, you can call "dynamicbox_add()" function.
+ *
  */
index a7e0092..ccc7800 100644 (file)
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-extern int parse_desc(struct livebox_common *common, const char *filename, int is_pd);
+extern int parse_desc(struct dynamicbox_common *common, const char *filename, int is_pd);
 
 /* End of a file */
index 7dc41e0..da1ed9e 100644 (file)
  * limitations under the License.
  */
 
-#ifndef __DYNAMICBOX_H
-#define __DYNAMICBOX_H
+#include <dynamicbox_service.h>
+
+#ifndef __DYNAMICBOX_VIEWER_H
+#define __DYNAMICBOX_VIEWER_H
 
 #ifdef __cplusplus
 extern "C" {
@@ -28,7 +30,7 @@ extern "C" {
  */
 
 /**
- * @addtogroup CAPI_DYNAMIC_VIEWER_MODULE
+ * @addtogroup CAPI_DYNAMICBOX_VIEWER_MODULE
  * @{
  */
 
@@ -37,7 +39,7 @@ extern "C" {
  * @brief Structure definition for a Dynamic Box instance.
  * @since_tizen 2.3
  */
-struct dynamicbox;
+typedef struct dynamicbox *dynamicbox_h;
 
 /**
  * @internal
@@ -53,138 +55,138 @@ struct dynamicbox;
  * @since_tizen 2.3
  */
 enum dynamicbox_mouse_event_type {
-       DBOX_MOUSE_EVENT_MASK   = 0x20000000, /**< Mask value for mouse event */
-       DBOX_MOUSE_EVENT_GBAR_MASK              = 0x10000000, /**< Mask value for GBAR event */
-       DBOX_MOUSE_EVENT_DBOX_MASK              = 0x40000000, /**< Mask value for DBOX event */
-
-       DBOX_MOUSE_EVENT_DOWN   = 0x00000001, /**< DBox mouse down event for dynamicbox */
-       DBOX_MOUSE_EVENT_UP             = 0x00000002, /**< DBox mouse up event for dynamicbox */
-       DBOX_MOUSE_EVENT_MOVE   = 0x00000004, /**< DBox mouse move event for dynamicbox */
-       DBOX_MOUSE_EVENT_ENTER  = 0x00000008, /**< DBox mouse enter event for dynamicbox */
-       DBOX_MOUSE_EVENT_LEAVE  = 0x00000010, /**< DBox mouse leave event for dynamicbox */
-       DBOX_MOUSE_EVENT_SET            = 0x00000020, /**< DBox mouse set auto event for dynamicbox */
-       DBOX_MOUSE_EVENT_UNSET  = 0x00000040, /**< DBox mouse unset auto event for dynamicbox */
-
-       DBOX_MOUSE_EVENT_ON_SCROLL              = 0x00000080, /**< DBox On scrolling */
-       DBOX_MOUSE_EVENT_ON_HOLD                = 0x00000100, /**< DBox On holding */
-       DBOX_MOUSE_EVENT_OFF_SCROLL     = 0x00000200, /**< DBox Stop scrolling */
-       DBOX_MOUSE_EVENT_OFF_HOLD               = 0x00000400, /**< DBox Stop holding */
-
-       DBOX_MOUSE_ON_SCROLL    = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
-       DBOX_MOUSE_ON_HOLD      = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
-       DBOX_MOUSE_OFF_SCROLL   = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_SCROLL, /**< Scrolling stopped */
-       DBOX_MOUSE_OFF_HOLD     = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_HOLD, /**< Holding stopped */
-
-       DBOX_MOUSE_DOWN         = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_DOWN, /**< Mouse down on the dynamicbox */
-       DBOX_MOUSE_UP           = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UP, /**< Mouse up on the dynamicbox */
-       DBOX_MOUSE_MOVE         = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_MOVE, /**< Move move on the dynamicbox */
-       DBOX_MOUSE_ENTER        = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ENTER, /**< Mouse enter to the dynamicbox */
-       DBOX_MOUSE_LEAVE        = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_LEAVE, /**< Mouse leave from the dynamicbox */
-       DBOX_MOUSE_SET          = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_SET, /**< Mouse event, start feeding event by master */
-       DBOX_MOUSE_UNSET        = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UNSET, /**< Mouse event, stop feeding event by master */
-
-       DBOX_GBAR_MOUSE_ON_SCROLL       = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
-       DBOX_GBAR_MOUSE_ON_HOLD         = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
-       DBOX_GBAR_MOUSE_OFF_SCROLL      = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_SCROLL, /**< Scrolling stopped */
-       DBOX_GBAR_MOUSE_OFF_HOLD        = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_HOLD, /**< Holding stopped */
-
-       DBOX_GBAR_MOUSE_DOWN            = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_DOWN, /**< Mouse down on the GBAR */
-       DBOX_GBAR_MOUSE_UP              = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UP, /**< Mouse up on the GBAR */
-       DBOX_GBAR_MOUSE_MOVE            = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_MOVE, /**< Mouse move on the GBAR */
-       DBOX_GBAR_MOUSE_ENTER           = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ENTER, /**< Mouse enter to the GBAR */
-       DBOX_GBAR_MOUSE_LEAVE           = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_LEAVE, /**< Mouse leave from the GBAR */
-       DBOX_GBAR_MOUSE_SET             = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_SET, /**< Mouse event, start feeding event by master */
-       DBOX_GBAR_MOUSE_UNSET           = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UNSET, /**< Mouse event, stop feeding event by master */
-
-       DBOX_MOUSE_EVENT_MAX            = 0xFFFFFFFF /**< Unknown event */
+    DBOX_MOUSE_EVENT_MASK       = 0x20000000, /**< Mask value for mouse event */
+    DBOX_MOUSE_EVENT_GBAR_MASK  = 0x10000000, /**< Mask value for Glance Bar event */
+    DBOX_MOUSE_EVENT_DBOX_MASK  = 0x40000000, /**< Mask value for Dynamic Box event */
+
+    DBOX_MOUSE_EVENT_DOWN       = 0x00000001, /**< Dynamic Box mouse down event for dynamicbox */
+    DBOX_MOUSE_EVENT_UP         = 0x00000002, /**< Dynamic Box mouse up event for dynamicbox */
+    DBOX_MOUSE_EVENT_MOVE       = 0x00000004, /**< Dynamic Box mouse move event for dynamicbox */
+    DBOX_MOUSE_EVENT_ENTER      = 0x00000008, /**< Dynamic Box mouse enter event for dynamicbox */
+    DBOX_MOUSE_EVENT_LEAVE      = 0x00000010, /**< Dynamic Box mouse leave event for dynamicbox */
+    DBOX_MOUSE_EVENT_SET        = 0x00000020, /**< Dynamic Box mouse set auto event for dynamicbox */
+    DBOX_MOUSE_EVENT_UNSET      = 0x00000040, /**< Dynamic Box mouse unset auto event for dynamicbox */
+
+    DBOX_MOUSE_EVENT_ON_SCROLL  = 0x00000080, /**< Dynamic Box On scrolling */
+    DBOX_MOUSE_EVENT_ON_HOLD    = 0x00000100, /**< Dynamic Box On holding */
+    DBOX_MOUSE_EVENT_OFF_SCROLL = 0x00000200, /**< Dynamic Box Stop scrolling */
+    DBOX_MOUSE_EVENT_OFF_HOLD   = 0x00000400, /**< Dynamic Box Stop holding */
+
+    DBOX_MOUSE_ON_SCROLL        = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
+    DBOX_MOUSE_ON_HOLD          = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
+    DBOX_MOUSE_OFF_SCROLL       = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_SCROLL, /**< Scrolling stopped */
+    DBOX_MOUSE_OFF_HOLD         = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_HOLD, /**< Holding stopped */
+
+    DBOX_MOUSE_DOWN             = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_DOWN, /**< Mouse down on the dynamicbox */
+    DBOX_MOUSE_UP               = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UP, /**< Mouse up on the dynamicbox */
+    DBOX_MOUSE_MOVE             = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_MOVE, /**< Move move on the dynamicbox */
+    DBOX_MOUSE_ENTER            = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ENTER, /**< Mouse enter to the dynamicbox */
+    DBOX_MOUSE_LEAVE            = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_LEAVE, /**< Mouse leave from the dynamicbox */
+    DBOX_MOUSE_SET              = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_SET, /**< Mouse event, start feeding event by master */
+    DBOX_MOUSE_UNSET            = DBOX_MOUSE_EVENT_DBOX_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UNSET, /**< Mouse event, stop feeding event by master */
+
+    DBOX_GBAR_MOUSE_ON_SCROLL   = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
+    DBOX_GBAR_MOUSE_ON_HOLD     = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
+    DBOX_GBAR_MOUSE_OFF_SCROLL  = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_SCROLL, /**< Scrolling stopped */
+    DBOX_GBAR_MOUSE_OFF_HOLD    = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_OFF_HOLD, /**< Holding stopped */
+
+    DBOX_GBAR_MOUSE_DOWN        = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_DOWN, /**< Mouse down on the Glance Bar */
+    DBOX_GBAR_MOUSE_UP          = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UP, /**< Mouse up on the Glance Bar */
+    DBOX_GBAR_MOUSE_MOVE        = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_MOVE, /**< Mouse move on the Glance Bar */
+    DBOX_GBAR_MOUSE_ENTER       = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_ENTER, /**< Mouse enter to the Glance Bar */
+    DBOX_GBAR_MOUSE_LEAVE       = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_LEAVE, /**< Mouse leave from the Glance Bar */
+    DBOX_GBAR_MOUSE_SET         = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_SET, /**< Mouse event, start feeding event by master */
+    DBOX_GBAR_MOUSE_UNSET       = DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_MASK | DBOX_MOUSE_EVENT_UNSET, /**< Mouse event, stop feeding event by master */
+
+    DBOX_MOUSE_EVENT_MAX        = 0xFFFFFFFF /**< Unknown event */
 };
 
 enum dynamicbox_key_event_type {
-       DBOX_KEY_EVENT_KEY_MASK         = 0x80000000, /**< Mask value for key event */
-       DBOX_KEY_EVENT_GBAR_MASK        = 0x10000000, /**< Mask value for GBAR event */
-       DBOX_KEY_EVENT_DBOX_MASK        = 0x40000000, /**< Mask value for DBOX event */
-
-       DBOX_KEY_EVENT_KEY_DOWN         = 0x00000001, /**< DBox key press */
-       DBOX_KEY_EVENT_KEY_UP           = 0x00000002, /**< DBox key release */
-       DBOX_KEY_EVENT_KEY_FOCUS_IN     = 0x00000008, /**< DBox key focused in */
-       DBOX_KEY_EVENT_KEY_FOCUS_OUT    = 0x00000010, /**< DBox key focused out */
-       DBOX_KEY_EVENT_KEY_SET          = 0x00000020, /**< DBox Key, start feeding event by master */
-       DBOX_KEY_EVENT_KEY_UNSET        = 0x00000040, /**< DBox key, stop feeding event by master */
-
-       DBOX_KEY_DOWN                   = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_DOWN, /**< Key down on the dynamicbox */
-       DBOX_KEY_UP                     = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_UP, /**< Key up on the dynamicbox */
-       DBOX_KEY_SET                    = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_SET, /**< Key event, start feeding event by master */
-       DBOX_KEY_UNSET                  = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_UNSET, /**< Key event, stop feeding event by master */
-       DBOX_KEY_FOCUS_IN               = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_FOCUS_IN, /**< Key event, focus in */
-       DBOX_KEY_FOCUS_OUT              = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_KEY_FOCUS_OUT, /**< Key event, foucs out */
-                                                                   
-       DBOX_GBAR_KEY_DOWN              = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_DOWN, /**< Key down on the dynamicbox */
-       DBOX_GBAR_KEY_UP                = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_UP, /**< Key up on the dynamicbox */
-       DBOX_GBAR_KEY_SET               = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_SET, /**< Key event, start feeding event by master */
-       DBOX_GBAR_KEY_UNSET             = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_UNSET, /**< Key event, stop feeding event by master */
-       DBOX_GBAR_KEY_FOCUS_IN          = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_FOCUS_IN, /**< Key event, focus in */
-       DBOX_GBAR_KEY_FOCUS_OUT         = DBOX_KEY_EVENT_KEY_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_KEY_FOCUS_OUT, /**< Key event, focus out */
-
-       DBOX_KEY_EVENT_MAX              = 0xFFFFFFFF /**< Unknown event */
+    DBOX_KEY_EVENT_MASK         = 0x80000000, /**< Mask value for key event */
+    DBOX_KEY_EVENT_GBAR_MASK    = 0x10000000, /**< Mask value for Glance Bar event */
+    DBOX_KEY_EVENT_DBOX_MASK    = 0x40000000, /**< Mask value for Dynamic Box event */
+
+    DBOX_KEY_EVENT_DOWN         = 0x00000001, /**< Dynamic Box key press */
+    DBOX_KEY_EVENT_UP           = 0x00000002, /**< Dynamic Box key release */
+    DBOX_KEY_EVENT_FOCUS_IN     = 0x00000008, /**< Dynamic Box key focused in */
+    DBOX_KEY_EVENT_FOCUS_OUT    = 0x00000010, /**< Dynamic Box key focused out */
+    DBOX_KEY_EVENT_SET          = 0x00000020, /**< Dynamic Box Key, start feeding event by master */
+    DBOX_KEY_EVENT_UNSET        = 0x00000040, /**< Dynamic Box key, stop feeding event by master */
+
+    DBOX_KEY_DOWN               = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_DOWN, /**< Key down on the dynamicbox */
+    DBOX_KEY_UP                 = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_UP, /**< Key up on the dynamicbox */
+    DBOX_KEY_SET                = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_SET, /**< Key event, start feeding event by master */
+    DBOX_KEY_UNSET              = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_UNSET, /**< Key event, stop feeding event by master */
+    DBOX_KEY_FOCUS_IN           = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_FOCUS_IN, /**< Key event, focus in */
+    DBOX_KEY_FOCUS_OUT          = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_DBOX_MASK | DBOX_KEY_EVENT_FOCUS_OUT, /**< Key event, foucs out */
+                                                               
+    DBOX_GBAR_KEY_DOWN          = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_DOWN, /**< Key down on the dynamicbox */
+    DBOX_GBAR_KEY_UP            = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_UP, /**< Key up on the dynamicbox */
+    DBOX_GBAR_KEY_SET           = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_SET, /**< Key event, start feeding event by master */
+    DBOX_GBAR_KEY_UNSET         = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_UNSET, /**< Key event, stop feeding event by master */
+    DBOX_GBAR_KEY_FOCUS_IN      = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_FOCUS_IN, /**< Key event, focus in */
+    DBOX_GBAR_KEY_FOCUS_OUT     = DBOX_KEY_EVENT_MASK | DBOX_KEY_EVENT_GBAR_MASK | DBOX_KEY_EVENT_FOCUS_OUT, /**< Key event, focus out */
+
+    DBOX_KEY_EVENT_MAX          = 0xFFFFFFFF /**< Unknown event */
 };
 
 /**
  * @internal
- * @brief Enumeration for Accessibility event for buffer type Dynamicbox or GBAR.
+ * @brief Enumeration for Accessibility event for buffer type Dynamic Box or Glance Bar.
  * @details These events are sync'd with Tizen accessibility event set.
  * @since_tizen 2.3
  */
 enum dynamicbox_access_event_type {
-       DBOX_ACCESS_EVENT_GBAR_MASK      = 0x10000000, /**< GBAR Accessibility event mask */
-       DBOX_ACCESS_EVENT_DBOX_MASK      = 0x20000000, /**< DBox Accessibility event mask */
-
-       DBOX_ACCESS_EVENT_HIGHLIGHT      = 0x00000100, /**< DBox accessibility: Hightlight a object */
-       DBOX_ACCESS_EVENT_HIGHLIGHT_NEXT = 0x00000200, /**< DBox accessibility: Set highlight to next object */
-       DBOX_ACCESS_EVENT_HIGHLIGHT_PREV = 0x00000400, /**< DBox accessibility: Set highlight to prev object */
-       DBOX_ACCESS_EVENT_UNHIGHLIGHT    = 0x00000800, /**< DBox accessibility unhighlight */
-       DBOX_ACCESS_EVENT_ACTIVATE       = 0x00001000, /**< DBox accessibility activate */
-       DBOX_ACCESS_EVENT_ACTION_DOWN    = 0x00010000, /**< DBox accessibility value changed */
-       DBOX_ACCESS_EVENT_ACTION_UP      = 0x00020000, /**< DBox accessibility value changed */
-       DBOX_ACCESS_EVENT_SCROLL_DOWN    = 0x00100000, /**< DBox accessibility scroll down */
-       DBOX_ACCESS_EVENT_SCROLL_MOVE    = 0x00200000, /**< DBox accessibility scroll move */
-       DBOX_ACCESS_EVENT_SCROLL_UP      = 0x00400000, /**< DBox accessibility scroll up */
-
-       DBOX_ACCESS_HIGHLIGHT            = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT,   /**< Access event - Highlight an object in the dynamicbox */
-       DBOX_ACCESS_HIGHLIGHT_NEXT       = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT_NEXT,      /**< Access event - Move highlight to the next object in a dynamicbox */
-       DBOX_ACCESS_HIGHLIGHT_PREV       = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT_PREV,      /**< Access event - Move highlight to the prev object in a dynamicbox */
-       DBOX_ACCESS_UNHIGHLIGHT          = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_UNHIGHLIGHT, /**< Access event - Delete highlight from the dynamicbox */
-       DBOX_ACCESS_ACTIVATE             = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ACTIVATE,            /**< Access event - Launch or activate the highlighted object */
-       DBOX_ACCESS_ACTION_DOWN          = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ACTION_DOWN, /**< Access event - down */
-       DBOX_ACCESS_ACTION_UP            = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ACTION_UP,   /**< Access event - up */
-       DBOX_ACCESS_SCROLL_DOWN          = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_SCROLL_DOWN, /**< Access event - scroll down */
-       DBOX_ACCESS_SCROLL_MOVE          = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_SCROLL_MOVE, /**< Access event - scroll move */
-       DBOX_ACCESS_SCROLL_UP            = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_SCROLL_UP,   /**< Access event - scroll up */
-
-       DBOX_GBAR_ACCESS_HIGHLIGHT       = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT,   /**< Access event - Highlight an object in the GBAR */
-       DBOX_GBAR_ACCESS_HIGHLIGHT_NEXT  = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT_NEXT,      /**< Access event - Move highlight to the next object in a GBAR */
-       DBOX_GBAR_ACCESS_HIGHLIGHT_PREV  = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT_PREV,      /**< Access event - Move highlight to the prev object in a GBAR */
-       DBOX_GBAR_ACCESS_UNHIGHLIGHT     = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_UNHIGHLIGHT, /**< Access event - Delet highlight from the GBAR */
-       DBOX_GBAR_ACCESS_ACTIVATE        = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ACTIVATE,            /**< Access event - Launch or activate the highlighted object */
-       DBOX_GBAR_ACCESS_ACTION_DOWN     = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ACTION_DOWN, /**< Access event - down */
-       DBOX_GBAR_ACCESS_ACTION_UP       = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ACTION_UP,   /**< Access event - up */
-       DBOX_GBAR_ACCESS_SCROLL_DOWN     = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_SCROLL_DOWN, /**< Access event - scroll down */
-       DBOX_GBAR_ACCESS_SCROLL_MOVE     = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_SCROLL_MOVE, /**< Access event - scroll move */
-       DBOX_GBAR_ACCESS_SCROLL_UP       = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_SCROLL_UP,           /**< Access event - scroll up */
-       DBOX_ACCESS_EVENT_MAX = 0xFFFFFFFF
+    DBOX_ACCESS_EVENT_GBAR_MASK    = 0x10000000, /**< Glance Bar Accessibilivent mask */
+    DBOX_ACCESS_EVENT_DBOX_MASK    = 0x20000000, /**< Dynamic Box Accessibility event mask */
+
+    DBOX_ACCESS_EVENT_HIGHLIGHT    = 0x00000100, /**< Dynamic Box accessibility: Hightlight a object, Next, Prev,Unhighlight */
+    DBOX_ACCESS_EVENT_ACTIVATE     = 0x00000200, /**< Dynamic Box accessibility activate */
+    DBOX_ACCESS_EVENT_ACTION       = 0x00000400, /**< Dynamic Box accessibility value changed, Up, Down */
+    DBOX_ACCESS_EVENT_SCROLL       = 0x00000800, /**< Dynamic Box accessibility scroll down, move, up */
+    DBOX_ACCESS_EVENT_VALUE_CHANGE = 0x00001000, /**< LB accessibility value change */
+    DBOX_ACCESS_EVENT_MOUSE        = 0x00002000, /**< Give mouse event to highlight object, down, move, up */
+    DBOX_ACCESS_EVENT_BACK         = 0x00004000, /**< Go back to a previous view ex: pop naviframe item */
+    DBOX_ACCESS_EVENT_OVER         = 0x00008000, /**< Mouse over an object */
+    DBOX_ACCESS_EVENT_READ         = 0x00010000, /**< Highlight an object */
+    DBOX_ACCESS_EVENT_ENABLE       = 0x00020000, /**< Disable highlight and read ability, disable, enable */
+
+    DBOX_ACCESS_HIGHLIGHT          = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT, /**< Access event - Highlight an object in the dynamicbox */
+    DBOX_ACCESS_ACTIVATE           = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ACTIVATE,  /**< Access event - Launch or activate the highlighted object */
+    DBOX_ACCESS_ACTION             = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ACTION,    /**< Access event - down */
+    DBOX_ACCESS_SCROLL             = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_SCROLL,    /**< Access event - scroll down */
+    DBOX_ACCESS_VALUE_CHANGE       = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_VALUE_CHANGE, /**< LB accessibility value change */
+    DBOX_ACCESS_MOUSE              = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_MOUSE,  /**< Give mouse event to highlight object */
+    DBOX_ACCESS_BACK               = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_BACK,   /**< Go back to a previous view ex: pop naviframe item */
+    DBOX_ACCESS_OVER               = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_OVER,   /**< Mouse over an object */
+    DBOX_ACCESS_READ               = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_READ,   /**< Highlight an object */
+    DBOX_ACCESS_ENABLE             = DBOX_ACCESS_EVENT_DBOX_MASK | DBOX_ACCESS_EVENT_ENABLE, /**< Enable highlight and read ability */
+
+    DBOX_GBAR_ACCESS_HIGHLIGHT     = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_HIGHLIGHT, /**< Access event - Highlight an object in the Glance Bar */
+    DBOX_GBAR_ACCESS_ACTIVATE      = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ACTIVATE,  /**< Access event - Launch or activate the highlighted object */
+    DBOX_GBAR_ACCESS_ACTION        = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ACTION,    /**< Access event - down */
+    DBOX_GBAR_ACCESS_SCROLL        = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_SCROLL,    /**< Access event - scroll down */
+    DBOX_GBAR_ACCESS_VALUE_CHANGE  = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_VALUE_CHANGE, /**< LB accessibility value change */
+    DBOX_GBAR_ACCESS_MOUSE         = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_MOUSE, /**< Give mouse event to highlight object */
+    DBOX_GBAR_ACCESS_BACK          = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_BACK, /**< Go back to a previous view ex: pop naviframe item */
+    DBOX_GBAR_ACCESS_OVER          = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_OVER, /**< Mouse over an object */
+    DBOX_GBAR_ACCESS_READ          = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_READ, /**< Highlight an object */
+    DBOX_GBAR_ACCESS_ENABLE        = DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_ENABLE, /**< Enable highlight and read ability */
+    DBOX_GBAR_ACCESS_EVENT_MAX     = 0xFFFFFFFF
 };
 
 /**
  * @internal
- * @brief Enumeration for Dynamicbox DBox content type.
+ * @brief Enumeration for Dynamic Box content type.
  * @since_tizen 2.3
  */
 enum dynamicbox_type {
-       DBOX_TYPE_IMAGE = 0x01, /**< Contents of a dynamicbox is based on the image file */
-       DBOX_TYPE_BUFFER = 0x02, /**< Contents of a dynamicbox is based on canvas buffer(shared) */
-       DBOX_TYPE_TEXT = 0x04, /**< Contents of a dynamicbox is based on formatted text file */
-       DBOX_TYPE_RESOURCE_ID = 0x08, /**< Contens of a dynamicbox is shared by the resource id(depends on window system) */
-       DBOX_TYPE_UIFW = 0x10, /**< Using UI F/W resource for sharing content & event */
-       DBOX_TYPE_INVALID = 0xFF /**< Unknown DBox type */
+    DBOX_CONTENT_TYPE_IMAGE       = 0x01,       /**< Contents of a dynamicbox is based on the image file */
+    DBOX_CONTENT_TYPE_BUFFER      = 0x02,       /**< Contents of a dynamicbox is based on canvas buffer(shared) */
+    DBOX_CONTENT_TYPE_TEXT        = 0x04,       /**< Contents of a dynamicbox is based on formatted text file */
+    DBOX_CONTENT_TYPE_RESOURCE_ID = 0x08,       /**< Contens of a dynamicbox is shared by the resource id(depends on window system) */
+    DBOX_CONTENT_TYPE_UIFW        = 0x10,       /**< Using UI F/W resource for sharing content & event */
+    DBOX_CONTENT_TYPE_INVALID     = 0xFF        /**< Unknown Dynamic Box type */
 };
 
 /**
@@ -193,39 +195,39 @@ enum dynamicbox_type {
  * @details These events will be sent from the provider.
  * @since_tizen 2.3
  */
-enum dynamicbox_event_type { /**< dynamicbox_event_handler_set Event list */
-       DBOX_EVENT_DBOX_UPDATED, /**< Contents of the given dynamicbox is updated */
-       DBOX_EVENT_GBAR_UPDATED, /**< Contents of the given pd is updated */
+enum dynamicbox_event_type {                    /**< dynamicbox_event_handler_set Event list */
+    DBOX_EVENT_DBOX_UPDATED,                    /**< Contents of the given dynamicbox is updated */
+    DBOX_EVENT_GBAR_UPDATED,                    /**< Contents of the given pd is updated */
 
-       DBOX_EVENT_CREATED, /**< A new dynamicbox is created */
-       DBOX_EVENT_DELETED, /**< A dynamicbox is deleted */
+    DBOX_EVENT_CREATED,                         /**< A new dynamicbox is created */
+    DBOX_EVENT_DELETED,                         /**< A dynamicbox is deleted */
 
-       DBOX_EVENT_GROUP_CHANGED, /**< Group (Cluster/Sub-cluster) information is changed */
-       DBOX_EVENT_PINUP_CHANGED, /**< PINUP status is changed */
-       DBOX_EVENT_PERIOD_CHANGED, /**< Update period is changed */
+    DBOX_EVENT_GROUP_CHANGED,                   /**< Group (Cluster/Sub-cluster) information is changed */
+    DBOX_EVENT_PINUP_CHANGED,                   /**< PINUP status is changed */
+    DBOX_EVENT_PERIOD_CHANGED,                  /**< Update period is changed */
 
-       DBOX_EVENT_DBOX_SIZE_CHANGED, /**< Dynamicbox size is changed */
-       DBOX_EVENT_GBAR_SIZE_CHANGED, /**< GBAR size is changed */
+    DBOX_EVENT_DBOX_SIZE_CHANGED,               /**< Dynamicbox size is changed */
+    DBOX_EVENT_GBAR_SIZE_CHANGED,               /**< Glance Bar size is changed */
 
-       DBOX_EVENT_GBAR_CREATED, /**< If a GBAR is created even if you didn't call the dynamicbox_create_gbar API */
-       DBOX_EVENT_GBAR_DESTROYED, /**< If a GBAR is destroyed even if you didn't call the dynamicbox_destroy_gbar API */
+    DBOX_EVENT_GBAR_CREATED,                    /**< If a Glance Bar is created even if you didn't call the dynamicbox_create_glance_bar API */
+    DBOX_EVENT_GBAR_DESTROYED,                  /**< If a Glance Bar is destroyed even if you didn't call the dynamicbox_destroy_glance_bar API */
 
-       DBOX_EVENT_HOLD_SCROLL, /**< If the screen should be freezed */
-       DBOX_EVENT_RELEASE_SCROLL, /**< If the screen can be scrolled */
+    DBOX_EVENT_HOLD_SCROLL,                     /**< If the screen should be freezed */
+    DBOX_EVENT_RELEASE_SCROLL,                  /**< If the screen can be scrolled */
 
-       DBOX_EVENT_DBOX_UPDATE_BEGIN, /**< Dynamicbox DBox content update is started */
-       DBOX_EVENT_DBOX_UPDATE_END, /**< Dynamicbox DBox content update is finished */
+    DBOX_EVENT_DBOX_UPDATE_BEGIN,               /**< Dynamic Box content update is started */
+    DBOX_EVENT_DBOX_UPDATE_END,                 /**< Dynamic Box content update is finished */
 
-       DBOX_EVENT_GBAR_UPDATE_BEGIN, /**< Dynamicbox GBAR content update is started */
-       DBOX_EVENT_GBAR_UPDATE_END, /**< Dynamicbox GBAR content update is finished */
+    DBOX_EVENT_GBAR_UPDATE_BEGIN,               /**< Glance Bar content update is started */
+    DBOX_EVENT_GBAR_UPDATE_END,                 /**< Glance Bar content update is finished */
 
-       DBOX_EVENT_UPDATE_MODE_CHANGED, /**< Dynamicbox Update mode is changed */
+    DBOX_EVENT_UPDATE_MODE_CHANGED,             /**< Dynamic Box Update mode is changed */
 
-       DBOX_EVENT_REQUEST_CLOSE_GBAR, /**< Dynamicbox requests to close the Glance Bar */
+    DBOX_EVENT_REQUEST_CLOSE_GBAR,              /**< Dynamic Box requests to close the Glance Bar */
 
-       DBOX_EVENT_EXTRA_INFO_UPDATED, /**< Extra information is updated */
+    DBOX_EVENT_EXTRA_INFO_UPDATED,              /**< Extra information is updated */
 
-       DBOX_EVENT_IGNORED = 0xFF, /**< Request is ignored */
+    DBOX_EVENT_IGNORED = 0xFF                   /**< Request is ignored */
 };
 
 /**
@@ -234,11 +236,12 @@ enum dynamicbox_event_type { /**< dynamicbox_event_handler_set Event list */
  * @since_tizen 2.3
  */
 enum dynamicbox_option_type {
-       DBOX_OPTION_MANUAL_SYNC,                /**< Sync frame manually */
-       DBOX_OPTION_FRAME_DROP_FOR_RESIZE,      /**< Drop frames while resizing */
-       DBOX_OPTION_SHARED_CONTENT,             /**< Use only one real instance for multiple fake instances if user creates dbox for same content */
+    DBOX_OPTION_MANUAL_SYNC,                    /**< Sync frame manually */
+    DBOX_OPTION_FRAME_DROP_FOR_RESIZE,          /**< Drop frames while resizing */
+    DBOX_OPTION_SHARED_CONTENT,                 /**< Use only one real instance for multiple fake instances if user creates dbox for same content */
+    DBOX_OPTION_DIRECT_UPDATE,                  /**< Use the private socket for receiving updated event */
 
-       DBOX_OPTION_ERROR = 0xFFFFFFFF          /**< To specify the size of this enumeration type */
+    DBOX_OPTION_ERROR = 0xFFFFFFFF              /**< To specify the size of this enumeration type */
 };
 
 /**
@@ -247,9 +250,9 @@ enum dynamicbox_option_type {
  * @since_tizen 2.3
  */
 enum dynamicbox_fault_type {
-       DBOX_FAULT_DEACTIVATED, /*!< Dynamicbox is deactivated by its fault operation */
-       DBOX_FAULT_PROVIDER_DISCONNECTED, /*!< Provider is disconnected */
-       DBOX_FAULT_MAX = 0xFF
+    DBOX_FAULT_DEACTIVATED,                     /**< Dynamicbox is deactivated by its fault operation */
+    DBOX_FAULT_PROVIDER_DISCONNECTED,           /**< Provider is disconnected */
+    DBOX_FAULT_MAX = 0xFF                       /**< To specify the size of this enumeration type, some compiler enjoy of this kind of notation */
 };
 
 /**
@@ -259,67 +262,92 @@ enum dynamicbox_fault_type {
  * @since_tizen 2.3
  */
 enum dynamicbox_visible_state {
-       DBOX_SHOW = 0x00, /**< Dynamicbox is shown. Default state */
-       DBOX_HIDE = 0x01, /**< Dynamicbox is hidden, Update timer will not be freezed. but you cannot receive any updates events. */
+    DBOX_SHOW            = 0x00,                /**< Dynamicbox is shown. Default state */
+    DBOX_HIDE            = 0x01,                /**< Dynamicbox is hidden, Update timer will not be freezed. but you cannot receive any updates events. */
 
-       DBOX_HIDE_WITH_PAUSE = 0x02, /**< Dynamicbox is hidden, it will pause the update timer, but if a dynamicbox updates its contents, update event will be triggered */
+    DBOX_HIDE_WITH_PAUSE = 0x02,                /**< Dynamicbox is hidden, it will pause the update timer, but if a dynamicbox updates its contents, update event will be triggered */
 
-       DBOX_VISIBLE_ERROR = 0xFF/**< To specify the size of this enumeration type */
+    DBOX_VISIBLE_ERROR   = 0xFF                 /**< To specify the size of this enumeration type */
 };
 
 /**
+ * @internal
  * @brief Accessibility Event Information
  * @since_tizen 2.3
  */
 struct dynamicbox_access_event_info {
-       double x; /**< X Coordinates that the event occurred */
-       double y; /**< Y Coordinates that the event occurred */
-       enum _dynamicbox_access_event_mouse {
-               DBOX_ACCESS_MOUSE_DOWN = 0x00,
-               DBOX_ACCESS_MOUSE_MOVE = 0x01,
-               DBOX_ACCESS_MOUSE_UP = 0x02
-       } mouse;
-       int info;
+    double x;                                   /**< X Coordinates that the event occurred */
+    double y;                                   /**< Y Coordinates that the event occurred */
+    enum _dynamicbox_access_type {
+       DBOX_ACCESS_TYPE_NONE = 0x00,           /**< Initialized */
+
+        DBOX_ACCESS_TYPE_DOWN = 0x00,           /**< Mouse down */
+        DBOX_ACCESS_TYPE_MOVE = 0x01,           /**< Mouse move */
+        DBOX_ACCESS_TYPE_UP   = 0x02,           /**< Mouse up */
+
+        DBOX_ACCESS_TYPE_HIGHLIGHT      = 0x00, /**< Highlight */
+        DBOX_ACCESS_TYPE_HIGHLIGHT_NEXT = 0x01, /**< Highlight next */
+        DBOX_ACCESS_TYPE_HIGHLIGHT_PREV = 0x02, /**< Highlight prev */
+        DBOX_ACCESS_TYPE_UNHIGHLIGHT    = 0x03, /**< Unhighlight */
+
+        DBOX_ACCESS_TYPE_DISABLE = 0x00,        /**< Disable */
+        DBOX_ACCESS_TYPE_ENABLE  = 0x01         /**< Enable */
+    } type;
+    int info;                                   /**< Extra information for this event */
 };
 
 /**
+ * @internal
+ * @brief Damaged Region representation
+ * @since_tizen 2.3
+ */
+typedef struct dynamicbox_damage_region {
+       int x;                                  /**< Coordinates X of Left-Top corner */
+       int y;                                  /**< Coordinates Y of Left-Top corner */
+       int w;                                  /**< Damage'd Width */
+       int h;                                  /**< Damage'd Height */
+} dynamicbox_damage_region_t;
+
+/**
+ * @internal
  * @brief Mouse Event Information
  * @since_tizen 2.3
  */
-struct dynamicbox_mouse_event_info {
-       double x;
-       double y;
-};
+typedef struct dynamicbox_mouse_event_info {
+    double x;                                   /**< X coordinates of Mouse Event */
+    double y;                                   /**< Y coordinates of Mouse Event */
+} *dynamicbox_mouse_event_info_t;
 
 /**
+ * @internal
  * @brief Key Event Information
  * @since_tizen 2.3
  */
-struct dynamicbox_key_event_info {
-       unsigned int keycode;
-};
+typedef struct dynamicbox_key_event_info {
+    unsigned int keycode;                       /**< Key code */
+} *dynamicbox_key_event_info_t;
 
 /**
  * @internal
  * @brief Structure for TEXT type dynamicbox contents handling opertators.
  * @since_tizen 2.3
  */
-struct dynamicbox_script_operators {
-       int (*update_begin)(struct dynamicbox *handle); /**< Content parser is started */
-       int (*update_end)(struct dynamicbox *handle); /**< Content parser is finished */
-
-       /* Listed functions will be called when parser meets each typed content */
-       int (*update_text)(struct dynamicbox *handle, const char *id, const char *part, const char *data); /**< Update text content */
-       int (*update_image)(struct dynamicbox *handle, const char *id, const char *part, const char *data, const char *option); /**< Update image content */
-       int (*update_script)(struct dynamicbox *handle, const char *id, const char *new_id, const char *part, const char *file, const char *group); /**< Update script content */
-       int (*update_signal)(struct dynamicbox *handle, const char *id, const char *emission, const char *signal); /**< Update signal */
-       int (*update_drag)(struct dynamicbox *handle, const char *id, const char *part, double dx, double dy); /**< Update drag info */
-       int (*update_info_size)(struct dynamicbox *handle, const char *id, int w, int h); /**< Update content size */
-       int (*update_info_category)(struct dynamicbox *handle, const char *id, const char *category); /**< Update content category info */
-       int (*update_access)(struct dynamicbox *handle, const char *id, const char *part, const char *text, const char *option); /**< Update access information */
-       int (*operate_access)(struct dynamicbox *handle, const char *id, const char *part, const char *operation, const char *option); /**< Update access operation */
-       int (*update_color)(struct dynamicbox *handle, const char *id, const char *part, const char *data); /**< Update color */
-};
+typedef struct dynamicbox_script_operators {
+    int (*update_begin)(dynamicbox_h handle); /**< Content parser is started */
+    int (*update_end)(dynamicbox_h handle); /**< Content parser is finished */
+
+    /* Listed functions will be called when parser meets each typed content */
+    int (*update_text)(dynamicbox_h handle, const char *id, const char *part, const char *data); /**< Update text content */
+    int (*update_image)(dynamicbox_h handle, const char *id, const char *part, const char *data, const char *option); /**< Update image content */
+    int (*update_script)(dynamicbox_h handle, const char *id, const char *new_id, const char *part, const char *file, const char *group); /**< Update script content */
+    int (*update_signal)(dynamicbox_h handle, const char *id, const char *emission, const char *signal); /**< Update signal */
+    int (*update_drag)(dynamicbox_h handle, const char *id, const char *part, double dx, double dy); /**< Update drag info */
+    int (*update_info_size)(dynamicbox_h handle, const char *id, int w, int h); /**< Update content size */
+    int (*update_info_category)(dynamicbox_h handle, const char *id, const char *category); /**< Update content category info */
+    int (*update_access)(dynamicbox_h handle, const char *id, const char *part, const char *text, const char *option); /**< Update access information */
+    int (*operate_access)(dynamicbox_h handle, const char *id, const char *part, const char *operation, const char *option); /**< Update access operation */
+    int (*update_color)(dynamicbox_h handle, const char *id, const char *part, const char *data); /**< Update color */
+} *dynamicbox_script_operator_t;
 
 /**
  * @internal
@@ -338,13 +366,50 @@ struct dynamicbox_script_operators {
  * @see dynamicbox_set_period()
  * @see dynamicbox_access_event()
  * @see dynamicbox_set_pinup()
- * @see dynamicbox_create_gbar()
- * @see dynamicbox_destroy_gbar()
+ * @see dynamicbox_create_glance_bar()
+ * @see dynamicbox_destroy_glance_bar()
  * @see dynamicbox_emit_text_signal()
  * @see dynamicbox_acquire_resource_id()
  * @see dynamicbox_set_update_mode()
  */
-typedef void (*dynamicbox_ret_cb_t)(struct dynamicbox *handle, int ret, void *data);
+typedef void (*dynamicbox_ret_cb)(dynamicbox_h handle, int ret, void *data);
+
+/**
+ * @internal
+ * @brief Fault event handler
+ * @param[in] type Type of fault event.
+ * @param[in] dbox_id Faulted DynamicBox Id
+ * @param[in] file faulted filename (implementation file if it is supported)
+ * @param[in] func faulted function name (if it is supported)
+ * @param[in] data Callback data
+ * @return int status
+ * @retval @c EXIT_FAILURE delete this event callback from the event callback list
+ * @retval @c EXIT_SUCCESS successfully handled, keep this callback in the event callback list
+ */
+typedef int (*dynamicbox_fault_handler_cb)(enum dynamicbox_fault_type type, const char *dbox_id, const char *file, const char *func, void *data);
+
+/**
+ * @internal
+ * @brief Event handler
+ * @since_tizen 2.3
+ * @param[in] handler Dynamic Box Event handler
+ * @param[in] event Event type for Dynamic Box
+ * @param[in] data Callback Data
+ * @return int status
+ * @return @c EXIT_FAILURE delete this event callback from the event callback list
+ * @return @c EXIT_SUCCESS successfully handled, keep this callback in the event callback list
+ */
+typedef int (*dynamicbox_event_handler_cb)(dynamicbox_h handler, enum dynamicbox_event_type event, void *data);
+
+/**
+ * @internal
+ * @brief Auto launch handler
+ * @since_tizen 2.3
+ * @param[in] handler DynamicBox Handler
+ * @param[in] appid UI Application Id, which should be launched
+ * @param[in] data callback data
+ */
+typedef int (*dynamicbox_auto_launch_handler_cb)(dynamicbox_h handler, const char *appid, void *data);
 
 /**
  * @internal
@@ -352,18 +417,20 @@ typedef void (*dynamicbox_ret_cb_t)(struct dynamicbox *handle, int ret, void *da
  * @details dynamicbox_init function uses environment value to initiate some configurable values.
  *          But some applications do not want to use the env value.
  *          For them, this API will give a chance to set default options using given arguments.
+ *          @a disp is a Display object which is used to hold a connection with a display server (eg, Xorg)
  * @since_tizen 2.3
- * @param[in] disp Display (if @a disp is @c NULL, the library will try to acquire a new connection with X)
+ * @param[in] disp Display, If @a disp is @c NULL, the library will try to acquire a new connection to display server
  * @param[in] prevent_overwrite Overwrite flag (when the content of an image type dynamicbox is updated, it will be overwriten (0) or not (1))
- * @param[in] event_filter If the next event comes in this period, ignore it. It is too fast to processing it in time // need to be elaborated
- * @param[in] use_thread Use the receive thread // need to be elaborated
+ * @param[in] event_filter If the dynamicbox_feed_mouse_event() is called again in this secs, it will be ignored and the dynamicbox_feed_mouse_event() will returns DBOX_STATUS_ERROR_BUSY status code
+ * @param[in] use_thread If this value has true, the viewer library will create a new thread to communicate with master service
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
  * @return int Integer, Dynamicbox status code
- * @retval #DBOX_STATUS_ERROR_NONE if success
- * @retval #DBOX_STATUS_ERROR_OUT_OF_MEMORY If there is not enough memory to do this
- * @retval #DBOX_STATUS_ERROR_IO_ERROR If fails to access dynamicbox database
+ * @retval #DBOX_STATUS_ERROR_NONE if successfully initialized.
+ * @retval #DBOX_STATUS_ERROR_OUT_OF_MEMORY If a memory is not enough to do this operation.
+ * @retval #DBOX_STATUS_ERROR_IO_ERROR If fails to access dynamicbox database.
  * @see dynamicbox_fini()
+ * @see dynamicbox_feed_mouse_event()
  */
 extern int dynamicbox_init(void *disp, int prevent_overwrite, double event_filter, int use_thread);
 
@@ -377,7 +444,6 @@ extern int dynamicbox_init(void *disp, int prevent_overwrite, double event_filte
  * @retval #DBOX_STATUS_SUCCES if success
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER if dynamicbox_init is not called
  * @see dynamicbox_init()
- * @see dynamicbox_init_with_options()
  */
 extern int dynamicbox_fini(void);
 
@@ -390,7 +456,7 @@ extern int dynamicbox_fini(void);
  * @return int
  * @retval #DBOX_STATUS_ERROR_NONE if success
  * @retval #DBOX_STATUS_ERROR_FAULT if it failed to send state (paused) info
- * @see dynamicbox_client_resumed()
+ * @see dynamicbox_client_set_resumed()
  */
 extern int dynamicbox_viewer_set_paused(void);
 
@@ -403,7 +469,7 @@ extern int dynamicbox_viewer_set_paused(void);
  * @return int
  * @retval #DBOX_STATUS_ERROR_NONE if success
  * @retval #DBOX_STATUS_ERROR_FAULT if it failed to send state (resumed) info
- * @see dynamicbox_client_paused()
+ * @see dynamicbox_client_set_paused()
  */
 extern int dynamicbox_viewer_set_resumed(void);
 
@@ -436,11 +502,14 @@ extern int dynamicbox_viewer_set_resumed(void);
  * 0x0=720x1280, #DBOX_SIZE_TYPE_0x0
  * @since_tizen 2.3
  * @remarks
+ *    This is an ASYNCHRONOUS API.
  *    Even if you get a handle from the return value of this function, it is not a created instance.
  *    So you have to consider it as a not initialized handle.
  *    It can be initialized only after getting the return callback with "ret == #DBOX_STATUS_ERROR_NONE"
- * @param[in] pkgname Dynamicbox Id
- * @param[in] content Contents that will be passed to the dynamicbox instance
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
+ * @param[in] dbox_id DynamicBox Id
+ * @param[in] content Contents that will be given to the dynamicbox instance
  * @param[in] cluster Main group
  * @param[in] category Sub group
  * @param[in] period Update period (@c DEFAULT_PERIOD can be used for this; this argument will be used to specify the period of updating contents of a dynamicbox)
@@ -452,16 +521,20 @@ extern int dynamicbox_viewer_set_resumed(void);
  * @return handle
  * @retval Handle Dynamicbox handle but not yet initialized
  * @retval @c NULL if it fails to create a handle
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern struct dynamicbox *dynamicbox_add(const char *pkgname, const char *content, const char *cluster, const char *category, double period, int type, dynamicbox_ret_cb_t cb, void *data);
+extern dynamicbox_h dynamicbox_add(const char *dbox_id, const char *content, const char *cluster, const char *category, double period, enum dynamicbox_size_type type, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
  * @brief Deletes a dynamicbox (will replace dynamicbox_del).
  * @since_tizen 2.3
- * @remarks If you call this with an uninitialized handle, the return callback will be called synchronously.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    If you call this with an uninitialized handle, the return callback will be called synchronously.
  *    So before returning from this function, the return callback will be called first.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] type Deletion type (DBOX_DELETE_PERMANENTLY or DBOX_DELETE_TEMPORARY)
  * @param[in] cb Return callback
@@ -473,15 +546,15 @@ extern struct dynamicbox *dynamicbox_add(const char *pkgname, const char *conten
  * @retval #DBOX_STATUS_ERROR_BUSY Already in process
  * @retval #DBOX_STATUS_ERROR_FAULT Failed to create a request packet
  * @retval #DBOX_STATUS_ERROR_NONE Successfully sent, return callack will be called
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_del(struct dynamicbox *handler, int type, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_del(dynamicbox_h handler, enum dynamicbox_delete_type type, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
  * @brief Sets a dynamicbox events callback.
- * @details To get the event push from the provider, register the event callback using this function.
- *    The callback will be called if there is any event from the provider.
+ * @details To get the event which is pushed from the provider, Register the event callback using this API.
+ *    The registered callback will be invoked if there are any events from the provider.
  * @since_tizen 2.3
  * @param[in] cb Event handler
  * @param[in] data User data for the event handler
@@ -492,7 +565,7 @@ extern int dynamicbox_del(struct dynamicbox *handler, int type, dynamicbox_ret_c
  * @retval #DBOX_STATUS_ERROR_OUT_OF_MEMORY Not enough memory
  * @see dynamicbox_unset_event_handler()
  */
-extern int dynamicbox_set_event_handler(int (*cb)(struct dynamicbox *handler, enum dynamicbox_event_type event, void *data), void *data);
+extern int dynamicbox_set_event_handler(dynamicbox_event_handler_cb cb, void *data);
 
 /**
  * @internal
@@ -503,7 +576,7 @@ extern int dynamicbox_set_event_handler(int (*cb)(struct dynamicbox *handler, en
  * @retval pointer Pointer of 'data' which is used with the dynamicbox_set_event_handler
  * @see dynamicbox_set_event_handler()
  */
-extern void *dynamicbox_unset_event_handler(int (*cb)(struct dynamicbox *handler, enum dynamicbox_event_type event, void *data));
+extern void *dynamicbox_unset_event_handler(dynamicbox_event_handler_cb cb);
 
 /**
  * @internal
@@ -518,7 +591,7 @@ extern void *dynamicbox_unset_event_handler(int (*cb)(struct dynamicbox *handler
  * @retval #DBOX_STATUS_ERROR_OUT_OF_MEMORY Not enough memory
  * @see dynamicbox_unset_fault_handler()
  */
-extern int dynamicbox_set_fault_handler(int (*cb)(enum dynamicbox_fault_type, const char *, const char *, const char *, void *), void *data);
+extern int dynamicbox_set_fault_handler(dynamicbox_fault_handler_cb cb, void *data);
 
 /**
  * @internal
@@ -529,16 +602,20 @@ extern int dynamicbox_set_fault_handler(int (*cb)(enum dynamicbox_fault_type, co
  * @retval pointer Pointer of 'data' which is used with the dynamicbox_set_fault_handler
  * @see dynamicbox_set_fault_handler()
  */
-extern void *dynamicbox_unset_fault_handler(int (*cb)(enum dynamicbox_fault_type, const char *, const char *, const char *, void *));
+extern void *dynamicbox_unset_fault_handler(dynamicbox_fault_handler_cb cb);
 
 /**
  * @internal
  * @brief Activates the faulted dynamicbox.
  * @details Request result will be returned via return callback.
  * @since_tizen 2.3
- * @remarks Even though this function returns ERROR_NONE, it means that it just successfully sent a request to the provider.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    Even though this function returns ERROR_NONE, it means that it just successfully sent a request to the provider.
  *    So you have to check the return callback and its "ret" argument.
- * @param[in] pkgname Package name which should be activated
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
+ * @param[in] dbox_id Package name which should be activated
  * @param[in] cb Result callback
  * @param[in] data Callback data
  * @privlevel public
@@ -547,9 +624,9 @@ extern void *dynamicbox_unset_fault_handler(int (*cb)(enum dynamicbox_fault_type
  * @retval #DBOX_STATUS_ERROR_NONE Successfully sent a request
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_FAULT Failed to make a request
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_activate(const char *pkgname, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_activate(const char *dbox_id, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -576,7 +653,10 @@ extern int dynamicbox_activate(const char *pkgname, dynamicbox_ret_cb_t cb, void
  * Special mode dynamicbox size
  * 0x0=720x1280, DBOX_SIZE_TYPE_0x0
  * @since_tizen 2.3
- * @remarks You have to check the return callback.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] type Type of a dynamicbox size (e.g., DBOX_SIZE_TYPE_1x1, ...)
  * @param[in] cb Result callback of the resize operation
@@ -589,13 +669,13 @@ extern int dynamicbox_activate(const char *pkgname, dynamicbox_ret_cb_t cb, void
  * @retval #DBOX_STATUS_ERROR_ALREADY Already resized, there is no differences between current size and requested size
  * @retval #DBOX_STATUS_ERROR_PERMISSION_DENIED Permission denied, you only have view the content of this box
  * @retval #DBOX_STATUS_ERROR_FAULT Failed to make a request
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_resize(struct dynamicbox *handler, int type, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_resize(dynamicbox_h handler, enum dynamicbox_size_type type, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
- * @brief Sends the click event for a dynamicbox.
+ * @brief Sends the click event to a dynamicbox, This is not related with mouse_event, viewer can send "clicked" event directly.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] x Rational X of the content width
@@ -607,12 +687,16 @@ extern int dynamicbox_resize(struct dynamicbox *handler, int type, dynamicbox_re
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  */
-extern int dynamicbox_click(struct dynamicbox *handler, double x, double y);
+extern int dynamicbox_click(dynamicbox_h handler, double x, double y);
 
 /**
  * @internal
  * @brief Changes the cluster/sub-cluster name of the given dynamicbox handler.
  * @since_tizen 2.3
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] cluster New cluster of a dynamicbox
  * @param[in] category New category of a dynamicbox
@@ -626,9 +710,9 @@ extern int dynamicbox_click(struct dynamicbox *handler, double x, double y);
  * @retval #DBOX_STATUS_ERROR_ALREADY Group name is same with current one
  * @retval #DBOX_STATUS_ERROR_PERMISSION_DENIED You have no permission to change property of this dynamicbox instance
  * @retval #DBOX_STATUS_ERROR_FAULT Failed to make a request
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_set_group(struct dynamicbox *handler, const char *cluster, const char *category, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_set_group(dynamicbox_h handler, const char *cluster, const char *category, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -643,7 +727,7 @@ extern int dynamicbox_set_group(struct dynamicbox *handler, const char *cluster,
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  */
-extern int dynamicbox_get_group(struct dynamicbox *handler, const char **cluster, const char **category);
+extern int dynamicbox_get_group(dynamicbox_h handler, const char **cluster, const char **category);
 
 /**
  * @internal
@@ -656,12 +740,16 @@ extern int dynamicbox_get_group(struct dynamicbox *handler, const char **cluster
  * @retval Current update period of a dynamicbox
  * @retval 0.0f This means the box has no update period or the handles is not valid
  */
-extern double dynamicbox_period(struct dynamicbox *handler);
+extern double dynamicbox_period(dynamicbox_h handler);
 
 /**
  * @internal
  * @brief Changes the update period.
  * @since_tizen 2.3
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] period New update period of a dynamicbox
  * @param[in] cb Result callback of changing the update period of this dynamicbox
@@ -674,9 +762,9 @@ extern double dynamicbox_period(struct dynamicbox *handler);
  * @retval #DBOX_STATUS_ERROR_BUSY
  * @retval #DBOX_STATUS_ERROR_ALREADY
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_set_period(struct dynamicbox *handler, double period, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_set_period(dynamicbox_h handler, double period, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -685,14 +773,15 @@ extern int dynamicbox_set_period(struct dynamicbox *handler, double period, dyna
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] gbar 1 for Glance Bar or 0
  * @return dynamicbox_type
- * @retval #DBOX_TYPE_IMAGE Contents of a dynamicbox is based on the image file
- * @retval #DBOX_TYPE_BUFFER Contents of a dynamicbox is based on canvas buffer(shared)
- * @retval #DBOX_TYPE_TEXT Contents of a dynamicbox is based on formatted text file
- * @retval #DBOX_TYPE_PIXMAP Contens of a dynamicbox is shared by the resource id(depends on X)
- * @retval #DBOX_TYPE_INVALID Invalid type
+ * @retval #DBOX_CONTENT_TYPE_IMAGE Contents of a dynamicbox is based on the image file
+ * @retval #DBOX_CONTENT_TYPE_BUFFER Contents of a dynamicbox is based on canvas buffer(shared)
+ * @retval #DBOX_CONTENT_TYPE_TEXT Contents of a dynamicbox is based on formatted text file
+ * @retval #DBOX_CONTENT_TYPE_RESOURCE_ID Contens of a dynamicbox is shared by the resource id (depends on the Window system, eg, Xorg)
+ * @retval #DBOX_CONTENT_TYPE_UIFW UI F/W supported content type for dynamic box
+ * @retval #DBOX_CONTENT_TYPE_INVALID Invalid type
  * @see dynamicbox_type()
  */
-extern enum dynamicbox_type dynamicbox_type(struct dynamicbox *handler, int gbar);
+extern enum dynamicbox_type dynamicbox_type(dynamicbox_h handler, int gbar);
 
 /**
  * @internal
@@ -707,7 +796,7 @@ extern enum dynamicbox_type dynamicbox_type(struct dynamicbox *handler, int gbar
  * @see dynamicbox_add()
  * @see dynamicbox_set_event_handler()
  */
-extern int dynamicbox_is_created_by_user(struct dynamicbox *handler);
+extern int dynamicbox_is_created_by_user(dynamicbox_h handler);
 
 /**
  * @internal
@@ -718,7 +807,7 @@ extern int dynamicbox_is_created_by_user(struct dynamicbox *handler);
  * @retval content_info Dynamicbox content info that can be used again via content_info argument of dynamicbox_add()
  * @see dynamicbox_add()
  */
-extern const char *dynamicbox_content(struct dynamicbox *handler);
+extern const char *dynamicbox_content(dynamicbox_h handler);
 
 /**
  * @internal
@@ -727,27 +816,27 @@ extern const char *dynamicbox_content(struct dynamicbox *handler);
  *  Each box should set their content as a string to be read by TTS.
  *  So if the box has focused on the homescreen, the homescreen will read text using this API.
  * @since_tizen 2.3
- * @remarks The title returned by this API is read by TTS.
- *  But it is just recomended to a homescreen.
- *  So, to read it or not depends on implementation of the homescreen.
+ * @remarks The title returned by this API can be read by TTS.
+ *  But it is just recomendation for the homescreen.
+ *  So, to read it or not depends on its implementation.
  * @param[in] handler Handler of a dynamicbox instance
  * @return const char *
  * @retval sub Cluster name
  * @retval @c NULL
  */
-extern const char *dynamicbox_title(struct dynamicbox *handler);
+extern const char *dynamicbox_title(dynamicbox_h handler);
 
 /**
  * @internal
  * @brief Gets the filename of the given dynamicbox, if it is an IMAGE type dynamicbox.
- * @details If the box is developed as image format to represent its contents, the homescreen should know its image file name.
+ * @details If the box is developed as an image format to represent its contents, the homescreen should know its image file name.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @return const char *
  * @retval filename If the dynamicbox type is image this function will give you a abs-path of an image file (content is rendered)
  * @retval @c NULL If this has no image file or type is not image file.
  */
-extern const char *dynamicbox_filename(struct dynamicbox *handler);
+extern const char *dynamicbox_filename(dynamicbox_h handler);
 
 /**
  * @internal
@@ -758,7 +847,7 @@ extern const char *dynamicbox_filename(struct dynamicbox *handler);
  * @retval pkgname Package name
  * @retval @c NULL If the handler is not valid
  */
-extern const char *dynamicbox_pkgname(struct dynamicbox *handler);
+extern const char *dynamicbox_pkgname(dynamicbox_h handler);
 
 /**
  * @internal
@@ -770,7 +859,7 @@ extern const char *dynamicbox_pkgname(struct dynamicbox *handler);
  * @retval -1.0f Handler is not valid (not yet initialized)
  * @retval real Number between 0.0 and 1.0
  */
-extern double dynamicbox_priority(struct dynamicbox *handler);
+extern double dynamicbox_priority(dynamicbox_h handler);
 
 /**
  * @internal
@@ -784,14 +873,13 @@ extern double dynamicbox_priority(struct dynamicbox *handler);
  * @retval address Address of a Frame Buffer
  * @retval @c NULL If it fails to get fb address
  */
-extern void *dynamicbox_acquire_fb(struct dynamicbox *handler, int gbar);
+extern void *dynamicbox_acquire_fb(dynamicbox_h handler, int gbar);
 
 /**
  * @internal
  * @brief Releases the buffer of a dynamicbox (only for the buffer type).
  * @since_tizen 2.3
  * @param[in] buffer Buffer
- * @param[in] gbar 1 for Glance Bar or 0
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
  * @return int
@@ -799,32 +887,30 @@ extern void *dynamicbox_acquire_fb(struct dynamicbox *handler, int gbar);
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  * @see dynamicbox_acquire_fb()
  */
-extern int dynamicbox_release_fb(void *buffer, int gbar);
+extern int dynamicbox_release_fb(void *buffer);
 
 /**
  * @internal
  * @brief Gets the reference count of Dynamicbox buffer (only for the buffer type).
  * @since_tizen 2.3
  * @param[in] buffer Buffer
- * @param[in] gbar 1 for Glance Bar or 0
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval refcnt Positive integer including ZERO
- * @see dynamicbox_gbar_fb_refcnt()
+ * @retval refcnt Positive integer value including ZERO
  */
-extern int dynamicbox_fb_refcnt(void *buffer, int gbar);
+extern int dynamicbox_fb_refcnt(void *buffer);
 
 /**
  * @internal
  * @brief Gets the size of the Dynamicbox.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
- * @return int
- * @retval #DBOX_SIZE_TYPE_NxM
- * @retval #DBOX_SIZE_TYPE_INVALID Invalid parameters are used
+ * @return enum dynamicbox_size_type
+ * @retval #DBOX_SIZE_TYPE_NxM N by M size
+ * @retval #DBOX_SIZE_TYPE_UNKNOWN Invalid handler or size type is not defined yet
  */
-extern int dynamicbox_size(struct dynamicbox *handler);
+extern enum dynamicbox_size_type dynamicbox_size(dynamicbox_h handler);
 
 /**
  * @internal
@@ -837,7 +923,7 @@ extern int dynamicbox_size(struct dynamicbox *handler);
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid parameters are used
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  */
-extern int dynamicbox_get_gbar_size(struct dynamicbox *handler, int *w, int *h);
+extern int dynamicbox_get_glance_bar_size(dynamicbox_h handler, int *w, int *h);
 
 /**
  * @internal
@@ -850,7 +936,7 @@ extern int dynamicbox_get_gbar_size(struct dynamicbox *handler, int *w, int *h);
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  */
-extern int dynamicbox_get_supported_sizes(struct dynamicbox *handler, int *cnt, int *size_list);
+extern int dynamicbox_get_supported_sizes(dynamicbox_h handler, int *cnt, int *size_list);
 
 /**
  * @internal
@@ -860,9 +946,9 @@ extern int dynamicbox_get_supported_sizes(struct dynamicbox *handler, int *cnt,
  * @param[in] gbar 1 for Glance Bar or 0
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
- * @retval size Size of dynamicbox buffer
+ * @retval size Size in bytes of the dynamicbox buffer
  */
-extern int dynamicbox_fb_bufsz(struct dynamicbox *handler, int gbar);
+extern int dynamicbox_fb_buffer_size(dynamicbox_h handler, int gbar);
 
 /**
  * @internal
@@ -879,14 +965,16 @@ extern int dynamicbox_fb_bufsz(struct dynamicbox *handler, int gbar);
  * @retval #DBOX_STATUS_ERROR_BUSY Previous operation is not finished yet
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully sent
- * @see dynamicbox_access_event()
- * @see dynamicbox_key_event()
+ * @see dynamicbox_feed_access_event()
+ * @see dynamicbox_feed_key_event()
  */
-extern int dynamicbox_mouse_event(struct dynamicbox *handler, enum dynamicbox_mouse_event_type type, struct dynamicbox_mouse_event_info *info);
+extern int dynamicbox_feed_mouse_event(dynamicbox_h handler, enum dynamicbox_mouse_event_type type, dynamicbox_mouse_event_info_t info);
 
 /**
  * @internal
  * @brief Sends an access event (for buffer type) to the provider (dynamicbox).
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] type Event type
@@ -901,14 +989,16 @@ extern int dynamicbox_mouse_event(struct dynamicbox *handler, enum dynamicbox_mo
  * @retval #DBOX_STATUS_ERROR_BUSY Previous operation is not finished yet
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully sent
- * @see dynamicbox_mouse_event()
- * @see dynamicbox_key_event()
+ * @see dynamicbox_feed_mouse_event()
+ * @see dynamicbox_feed_key_event()
  */
-extern int dynamicbox_access_event(struct dynamicbox *handler, enum dynamicbox_access_event_type type, struct dynamicbox_access_event_info *info, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_feed_access_event(dynamicbox_h handler, enum dynamicbox_access_event_type type, struct dynamicbox_access_event_info *info, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
  * @brief Sends a key event (for buffer type) to the provider (dynamicbox).
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] type Key event type
@@ -922,10 +1012,10 @@ extern int dynamicbox_access_event(struct dynamicbox *handler, enum dynamicbox_a
  * @retval #DBOX_STATUS_ERROR_BUSY Previous operation is not finished yet
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully sent
- * @see dynamicbox_mouse_event()
- * @see dynamicbox_access_event()
+ * @see dynamicbox_feed_mouse_event()
+ * @see dynamicbox_feed_access_event()
  */
-extern int dynamicbox_key_event(struct dynamicbox *handler, enum dynamicbox_key_event_type type, struct dynamicbox_key_event_info *info, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_feed_key_event(dynamicbox_h handler, enum dynamicbox_key_event_type type, dynamicbox_key_event_info_t info, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -934,6 +1024,8 @@ extern int dynamicbox_key_event(struct dynamicbox *handler, enum dynamicbox_key_
  *   you can freeze the update of the given dynamicbox.
  *   But it is different from pause.
  *   The box will be updated and it will decide wheter update its content or not when the pinup is on.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] flag Pinup value
@@ -943,11 +1035,11 @@ extern int dynamicbox_key_event(struct dynamicbox *handler, enum dynamicbox_key_
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid parameters
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  * @see dynamicbox_set_visibility()
  * @see dynamicbox_is_pinned_up()
  */
-extern int dynamicbox_set_pinup(struct dynamicbox *handler, int flag, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_set_pinup(dynamicbox_h handler, int flag, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -960,7 +1052,7 @@ extern int dynamicbox_set_pinup(struct dynamicbox *handler, int flag, dynamicbox
  * @retval 0 Box is not pinned up
  * @see dynamicbox_set_pinup()
  */
-extern int dynamicbox_is_pinned_up(struct dynamicbox *handler);
+extern int dynamicbox_is_pinned_up(dynamicbox_h handler);
 
 /**
  * @internal
@@ -974,23 +1066,25 @@ extern int dynamicbox_is_pinned_up(struct dynamicbox *handler);
  * @see dynamicbox_is_pinned_up()
  * @see dynamicbox_set_pinup()
  */
-extern int dynamicbox_has_pinup(struct dynamicbox *handler);
+extern int dynamicbox_has_pinup(dynamicbox_h handler);
 
 /**
  * @internal
- * @brief Checks the existence of GBAR for the given handler.
+ * @brief Checks the existence of Glance Bar for the given handler.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
- * @retval 1 If the box support the GBAR
- * @retval 0 If the box has no GBAR
+ * @retval 1 If the box support the Glance Bar
+ * @retval 0 If the box has no Glance Bar
  */
-extern int dynamicbox_has_gbar(struct dynamicbox *handler);
+extern int dynamicbox_has_glance_bar(dynamicbox_h handler);
 
 /**
  * @internal
- * @brief Creates GBAR of the given handler with the relative position from dynamicbox.
+ * @brief Creates Glance Bar of the given handler with the relative position from dynamicbox.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] x 0.0 ~ 1.0
@@ -1004,44 +1098,46 @@ extern int dynamicbox_has_gbar(struct dynamicbox *handler);
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_BUSY Previous operation is not finished yet
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @see dynamicbox_create_gbar()
- * @see dynamicbox_destroy_gbar()
- * @see dynamicbox_move_gbar()
+ * @see dynamicbox_create_glance_bar()
+ * @see dynamicbox_destroy_glance_bar()
+ * @see dynamicbox_move_glance_bar()
  */
-extern int dynamicbox_create_gbar(struct dynamicbox *handler, double x, double y, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_create_glance_bar(dynamicbox_h handler, double x, double y, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
- * @brief Updates a position of the given GBAR.
+ * @brief Updates a position of the given Glance Bar.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
- * @param[in] x 0.0 ~ 1.0
- * @param[in] y 0.0 ~ 1.0
+ * @param[in] x 0.0 ~ 1.0, 0.0 indicates the coordinate X of left of dynamicbox
+ * @param[in] y 0.0 ~ 1.0, 0.0 indicates the coordinate Y of top of dynamicbox
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
  * @return int
- * @retval #DBOX_STATUS_ERROR_NONE If sending a request for updating position of the GBAR has been done successfully
+ * @retval #DBOX_STATUS_ERROR_NONE If sending a request for updating position of the Glance Bar has been done successfully
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  */
-extern int dynamicbox_move_gbar(struct dynamicbox *handler, double x, double y);
+extern int dynamicbox_move_glance_bar(dynamicbox_h handler, double x, double y);
 
 /**
  * @internal
- * @brief Destroys the GBAR of the given handler if it is created.
+ * @brief Destroys the Glance Bar of the given handler if it is created.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
- * @param[in] cb
- * @param[in] data
+ * @param[in] cb Callback function
+ * @param[in] data Callback data
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_destroy_gbar(struct dynamicbox *handler, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_destroy_glance_bar(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -1050,23 +1146,10 @@ extern int dynamicbox_destroy_gbar(struct dynamicbox *handler, dynamicbox_ret_cb
  * @param[in] handler Handler of a dynamicbox instance
  * @return int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
- * @retval 0 GBAR is not created
- * @retval 1 GBAR is created
- */
-extern int dynamicbox_gbar_is_created(struct dynamicbox *handler);
-
-/**
- * @internal
- * @brief Checks the existence of a dynamicbox about the given package name.
- * @since_tizen 2.3
- * @param[in] pkgname Package name
- * @privlevel public
- * @privilege %http://tizen.org/privilege/dynamicbox.viewer
- * @return int
- * @retval 1 If the box exists
- * @retval 0 If the box does not exist
+ * @retval 0 Glance Bar is not created
+ * @retval 1 Glance Bar is created
  */
-extern int dynamicbox_is_exists(const char *pkgname);
+extern int dynamicbox_glance_bar_is_created(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1080,12 +1163,16 @@ extern int dynamicbox_is_exists(const char *pkgname);
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @see dynamicbox_set_gbar_text_handler()
  */
-extern int dynamicbox_set_text_handler(struct dynamicbox *handler, int gbar, struct dynamicbox_script_operators *ops);
+extern int dynamicbox_set_text_handler(dynamicbox_h handler, int gbar, dynamicbox_script_operator_t ops);
 
 /**
  * @internal
  * @brief Emits a text signal to the given dynamicbox only if it is a text type.
  * @since_tizen 2.3
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] emission Emission string
  * @param[in] source Source string
@@ -1101,9 +1188,9 @@ extern int dynamicbox_set_text_handler(struct dynamicbox *handler, int gbar, str
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid parameters
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully emitted
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_emit_text_signal(struct dynamicbox *handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_emit_text_signal(dynamicbox_h handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -1114,9 +1201,9 @@ extern int dynamicbox_emit_text_signal(struct dynamicbox *handler, const char *e
  * @return int
  * @retval #DBOX_STATUS_ERROR_NONE Successfully registered
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
- * @see dynamicbox_get_data()
+ * @see dynamicbox_data()
  */
-extern int dynamicbox_set_data(struct dynamicbox *handler, void *data);
+extern int dynamicbox_set_data(dynamicbox_h handler, void *data);
 
 /**
  * @internal
@@ -1128,7 +1215,7 @@ extern int dynamicbox_set_data(struct dynamicbox *handler, void *data);
  * @retval @c NULL If there is no data
  * @see dynamicbox_set_data()
  */
-extern void *dynamicbox_get_data(struct dynamicbox *handler);
+extern void *dynamicbox_data(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1137,7 +1224,7 @@ extern void *dynamicbox_get_data(struct dynamicbox *handler);
  *   you can receive the event of specific dynamicboxes which belong to a given cluster/category.
  *   But you cannot modify their attributes (such as size, ...).
  * @since_tizen 2.3
- * @param[in] cluster   Cluster ("*" can be used for subscribe all cluster's dynamicboxes event; If you use the "*", value in the category will be ignored)
+ * @param[in] cluster Cluster ("*" can be used for subscribe all cluster's dynamicboxes event; If you use the "*", value in the category will be ignored)
  * @param[in] category Category ("*" can be used for subscribe dynamicboxes events of all category(sub-cluster) in a given "cluster")
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
@@ -1197,7 +1284,7 @@ extern int dynamicbox_refresh_group(const char *cluster, const char *category, i
  * @retval #DBOX_STATUS_ERROR_NONE Successfully requested
  * @see dynamicbox_refresh_group()
  */
-extern int dynamicbox_refresh(struct dynamicbox *handler, int force);
+extern int dynamicbox_refresh(dynamicbox_h handler, int force);
 
 /**
  * @internal
@@ -1213,13 +1300,15 @@ extern int dynamicbox_refresh(struct dynamicbox *handler, int force);
  * @retval ResourceId Resource Id
  * @see dynamicbox_resource_id()
  */
-extern unsigned int dynamicbox_resource_id(const struct dynamicbox *handler, int gbar);
+extern unsigned int dynamicbox_resource_id(const dynamicbox_h handler, int gbar);
 
 /**
  * @internal
  * @brief Gets the Resource Id of a dynamicbox.
  * @details Even if a render process releases the Resource Id, the Resource Id will be kept before being released by dynamicbox_release_resource_id.
  *   You should release the resource id manually.
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
  * @since_tizen 2.3
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] gbar 1 for Glance Bar or 0
@@ -1231,12 +1320,12 @@ extern unsigned int dynamicbox_resource_id(const struct dynamicbox *handler, int
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid argument
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully requested
- * @pre Dynamicbox service system should support the PIXMAP type buffer.
+ * @pre Dynamicbox service system should support the ResourceId type buffer.
  *   The dynamicbox should be designed to use the buffer (script type).
  * @see dynamicbox_release_resource_id()
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern unsigned int dynamicbox_acquire_resource_id(struct dynamicbox *handler, int gbar, dynamicbox_ret_cb_t cb, void *data);
+extern unsigned int dynamicbox_acquire_resource_id(dynamicbox_h handler, int gbar, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -1256,7 +1345,7 @@ extern unsigned int dynamicbox_acquire_resource_id(struct dynamicbox *handler, i
  * @pre The Resource Id should be acquired by dynamicbox_acquire_resource_id
  * @see dynamicbox_acquire_resource_id()
  */
-extern int dynamicbox_release_resource_id(struct dynamicbox *handler, int gbar, unsigned int resource_id);
+extern int dynamicbox_release_resource_id(dynamicbox_h handler, int gbar, unsigned int resource_id);
 
 /**
  * @internal
@@ -1274,7 +1363,7 @@ extern int dynamicbox_release_resource_id(struct dynamicbox *handler, int gbar,
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  */
-extern int dynamicbox_set_visibility(struct dynamicbox *handler, enum dynamicbox_visible_state state);
+extern int dynamicbox_set_visibility(dynamicbox_h handler, enum dynamicbox_visible_state state);
 
 /**
  * @internal
@@ -1288,7 +1377,7 @@ extern int dynamicbox_set_visibility(struct dynamicbox *handler, enum dynamicbox
  * @retval #DBOX_HIDE_WITH_PAUSE Dynamicbox is hidden, it will pause the update timer, but if a dynamicbox updates its contents, update event will occur
  * @retval #DBOX_VISIBLE_ERROR To enlarge the size of this enumeration type
  */
-extern enum dynamicbox_visible_state dynamicbox_visibility(struct dynamicbox *handler);
+extern enum dynamicbox_visible_state dynamicbox_visibility(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1297,6 +1386,10 @@ extern enum dynamicbox_visible_state dynamicbox_visibility(struct dynamicbox *ha
  *   But if it is passive mode, you have to update content of a box when you get updated events.
  *   Default is Passive mode.
  * @since_tizen 2.3
+ * @remarks
+ *    This is an ASYNCHRONOUS API.
+ *    This function is Asynchronous, so you will get result of add requst from @a cb, if you failed to send request to create a new dynamicbox,
+ *    This function will returns proper error code
  * @param[in] handler Handler of a dynamicbox instance
  * @param[in] active_update 1 means active update, 0 means passive update (default)
  * @param[in] cb Result callback function
@@ -1310,9 +1403,9 @@ extern enum dynamicbox_visible_state dynamicbox_visibility(struct dynamicbox *ha
  * @retval #DBOX_STATUS_ERROR_ALREADY
  * @retval #DBOX_STATUS_ERROR_FAULT Unrecoverable error occurred
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
- * @see dynamicbox_ret_cb_t
+ * @see dynamicbox_ret_cb
  */
-extern int dynamicbox_set_update_mode(struct dynamicbox *handler, int active_update, dynamicbox_ret_cb_t cb, void *data);
+extern int dynamicbox_set_update_mode(dynamicbox_h handler, int active_update, dynamicbox_ret_cb cb, void *data);
 
 /**
  * @internal
@@ -1323,7 +1416,7 @@ extern int dynamicbox_set_update_mode(struct dynamicbox *handler, int active_upd
  * @retval 0 If passive mode
  * @retval 1 If active mode or error code
  */
-extern int dynamicbox_is_active_update(struct dynamicbox *handler);
+extern int dynamicbox_is_active_update(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1333,14 +1426,26 @@ extern int dynamicbox_is_active_update(struct dynamicbox *handler);
  * @param[in] gbar 1 for Glance Bar or 0
  * @privlevel public
  * @privilege %http://tizen.org/privilege/dynamicbox.viewer
- * @return void
+ * @return int
  * @retval #DBOX_STATUS_ERROR_NONE If success
  * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid handle
  * @see dynamicbox_set_manual_sync()
  * @see dynamicbox_manual_sync()
- * @see dynamicbox_sync_gbar_fb()
  */
-extern int dynamicbox_sync_fb(struct dynamicbox *handler, int gbar);
+extern int dynamicbox_sync_fb(dynamicbox_h handler, int gbar);
+
+/**
+ * @internal
+ * @brief Getting the damaged region info
+ * @since_tizen 2.3
+ * @param[in] handler Handler of a dynamicbox instance
+ * @param[in] gbar 1 for Glance Bar or 0
+ * @param[out] region Readonly information for damaged area
+ * @return int
+ * @retval #DBOX_STATUS_ERROR_NONE if success
+ * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid handle
+ */
+extern int dynamicbox_damage_region_get(dynamicbox_h handler, int gbar, const dynamicbox_damage_region_t *region);
 
 /**
  * @internal
@@ -1353,7 +1458,7 @@ extern int dynamicbox_sync_fb(struct dynamicbox *handler, int gbar);
  * @retval @c NULL Dynamicbox has no alternative icon file
  * @see dynamicbox_alt_name()
  */
-extern const char *dynamicbox_alt_icon(struct dynamicbox *handler);
+extern const char *dynamicbox_alt_icon(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1366,7 +1471,7 @@ extern const char *dynamicbox_alt_icon(struct dynamicbox *handler);
  * @retval @c NULL Dynamicbox has no alternative name
  * @see dynamicbox_alt_icon()
  */
-extern const char *dynamicbox_alt_name(struct dynamicbox *handler);
+extern const char *dynamicbox_alt_name(dynamicbox_h handler);
 
 /**
  * @internal
@@ -1384,7 +1489,7 @@ extern const char *dynamicbox_alt_name(struct dynamicbox *handler);
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  * @see dynamicbox_release_fb_lock()
  */
-extern int dynamicbox_acquire_fb_lock(struct dynamicbox *handler, int gbar);
+extern int dynamicbox_acquire_fb_lock(dynamicbox_h handler, int gbar);
 
 /**
  * @internal
@@ -1401,7 +1506,7 @@ extern int dynamicbox_acquire_fb_lock(struct dynamicbox *handler, int gbar);
  * @retval #DBOX_STATUS_ERROR_NONE Successfully done
  * @see dynamicbox_acquire_fb_lock()
  */
-extern int dynamicbox_release_fb_lock(struct dynamicbox *handler, int gbar);
+extern int dynamicbox_release_fb_lock(dynamicbox_h handler, int gbar);
 
 /**
  * @internal
@@ -1427,8 +1532,7 @@ extern int dynamicbox_release_fb_lock(struct dynamicbox *handler, int gbar);
  * @retval #DBOX_STATUS_ERROR_FAULT Failed to change the state of option
  * @retval #DBOX_STATUS_ERROR_NONE Successfully changed
  * @see dynamicbox_get_option()
- * @see dynamicbox_sync_gbar_fb()
- * @see dynamicbox_sync_dbox_fb()
+ * @see dynamicbox_sync_fb()
  */
 extern int dynamicbox_set_option(enum dynamicbox_option_type option, int state);
 
@@ -1445,18 +1549,31 @@ extern int dynamicbox_set_option(enum dynamicbox_option_type option, int state);
  */
 extern int dynamicbox_option(enum dynamicbox_option_type option);
 
-
 /**
  * @internal
- * @brief Set a handler for launching an app for auto-launch feature
- * @details If a user clicks a box, and the box uses auto-launch option, the launcher_handler will be called.
+ * @brief Set a handler for launching an app by auto-launch feature
+ * @details If a user clicks a box, which box enabled auto-launch option, the launcher_handler will be called.
+ *          From that callback, you should launch an app using given ui-app id.
  * @since_tizen 2.3
  * @param[in] launch_handler Handler for launching an app manually
  * @param[in] data Callback data which will be given a data for launch_handler
  * @return int type
  * @retval #DBOX_STATUS_ERROR_NONE Succeed to set new handler. there is no other cases
  */
-extern int dynamicbox_set_auto_launch_handler(int (*launch_handler)(struct dynamicbox *handler, const char *appid, void *data), void *data);
+extern int dynamicbox_set_auto_launch_handler(dynamicbox_auto_launch_handler_cb cb, void *data);
+
+/**
+ * @internal
+ * @brief get a damaged region from handler if a handler has buffer type dbox or gbar
+ * @since_tizen 2.3
+ * @param[in] handler Handler of a dbox
+ * @param[in] gbar 1 if you want to get a damaged region of glance bar or 0
+ * @param[out] region Region information, x, y, w, h
+ * @return int
+ * @retval #DBOX_STATUS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #DBOX_STATUS_ERROR_NONE If sucess
+ */
+extern int dynamicbox_damage_region_get(dynamicbox_h handler, int gbar, const dynamicbox_damage_region_t *region);
 
 /**
  * @}
@@ -1466,4 +1583,4 @@ extern int dynamicbox_set_auto_launch_handler(int (*launch_handler)(struct dynam
 }
 #endif
 
-#endif
+#endif // __DYNAMICBOX_VIEWER_H
diff --git a/include/dynamicbox_internal.h b/include/dynamicbox_internal.h
new file mode 100644 (file)
index 0000000..5b8825e
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+struct cb_info {
+       dynamicbox_ret_cb cb;
+       void *data;
+};
+
+extern void dbox_invoke_event_handler(struct dynamicbox *handler, enum dynamicbox_event_type event);
+extern void dbox_invoke_fault_handler(enum dynamicbox_fault_type type, const char *pkgname, const char *filename, const char *function);
+
+extern struct dynamicbox_common *dbox_find_common_handle(const char *pkgname, const char *filename);
+extern struct dynamicbox *dbox_new_dynamicbox(const char *pkgname, const char *id, double timestamp, const char *cluster, const char *category);
+extern struct dynamicbox_common *dbox_find_common_handle_by_timestamp(double timestamp);
+
+extern int dbox_set_group(struct dynamicbox_common *common, const char *cluster, const char *category);
+extern void dbox_set_size(struct dynamicbox_common *common, int w, int h);
+extern void dbox_set_gbarsize(struct dynamicbox_common *common, int w, int h);
+extern void dbox_set_default_gbarsize(struct dynamicbox_common *common, int w, int h);
+extern int dbox_set_content(struct dynamicbox_common *common, const char *content);
+extern int dbox_set_title(struct dynamicbox_common *handler, const char *title);
+extern void dbox_set_auto_launch(struct dynamicbox_common *handler, const char *auto_launch);
+extern void dbox_set_id(struct dynamicbox_common *handler, const char *id);
+extern void dbox_set_size_list(struct dynamicbox_common *handler, int size_list);
+extern void dbox_set_priority(struct dynamicbox_common *handler, double priority);
+extern int dbox_set_dbox_fb(struct dynamicbox_common *handler, const char *filename);
+extern int dbox_set_gbar_fb(struct dynamicbox_common *handler, const char *filename);
+extern struct fb_info *dbox_get_gbar_fb(struct dynamicbox_common *handler);
+extern struct fb_info *dbox_get_dbox_fb(struct dynamicbox_common *handler);
+extern void dbox_set_user(struct dynamicbox_common *handler, int user);
+extern void dbox_set_pinup(struct dynamicbox_common *handler, int pinup);
+extern void dbox_set_text_dbox(struct dynamicbox_common *handler);
+extern void dbox_set_text_gbar(struct dynamicbox_common *handler);
+extern int dbox_text_dbox(struct dynamicbox_common *handler);
+extern int dbox_text_gbar(struct dynamicbox_common *handler);
+extern void dbox_set_period(struct dynamicbox_common *handler, double period);
+extern void dbox_set_update_mode(struct dynamicbox_common *handler, int active_mode);
+extern void dbox_set_filename(struct dynamicbox_common *handler, const char *filename);
+extern void dbox_set_alt_icon(struct dynamicbox_common *handler, const char *icon);
+extern void dbox_set_alt_name(struct dynamicbox_common *handle, const char *name);
+extern int dbox_destroy_lock_file(struct dynamicbox_common *common, int is_gbar);
+extern int dbox_create_lock_file(struct dynamicbox_common *common, int is_gbar);
+extern int dbox_destroy_common_handle(struct dynamicbox_common *common);
+extern struct dynamicbox_common *dbox_create_common_handle(struct dynamicbox *handle, const char *pkgname, const char *cluster, const char *category);
+extern int dbox_sync_gbar_fb(struct dynamicbox_common *common);
+extern int dbox_sync_dbox_fb(struct dynamicbox_common *common);
+extern int dbox_common_unref(struct dynamicbox_common *common, struct dynamicbox *handle);
+extern int dbox_common_ref(struct dynamicbox_common *common, struct dynamicbox *handle);
+extern int dbox_fb_lock(int fd);
+extern int dbox_fb_unlock(int fd);
+extern struct dynamicbox_common *dbox_find_sharable_common_handle(const char *pkgname, const char *content, int w, int h, const char *cluster, const char *category);
+extern struct dynamicbox *dbox_find_dbox_in_show(struct dynamicbox_common *common);
+extern struct dynamicbox *dbox_get_dbox_nth(struct dynamicbox_common *common, int nth);
+extern void *dbox_remove_event_handler(dynamicbox_event_handler_cb dbox_cb);
+extern int dbox_add_event_handler(dynamicbox_event_handler_cb dbox_cb, void *data);
+extern int dbox_add_fault_handler(dynamicbox_fault_handler_cb dbox_cb, void *data);
+extern void *dbox_remove_fault_handler(dynamicbox_fault_handler_cb dbox_cb);
+extern struct cb_info *dbox_create_cb_info(dynamicbox_ret_cb cb, void *data);
+extern void dbox_destroy_cb_info(struct cb_info *info);
+
+extern struct dynamicbox *dbox_ref(struct dynamicbox *handler);
+extern struct dynamicbox *dbox_unref(struct dynamicbox *handler, int destroy_common);
+extern int dbox_send_delete(struct dynamicbox *handler, int type, dynamicbox_ret_cb cb, void *data);
+extern int dbox_delete_all(void);
+
+enum dynamicbox_state {
+       DBOX_STATE_CREATE = 0xBEEFbeef,
+       DBOX_STATE_DELETE = 0xDEADdead, /* Delete only for this client */
+       DBOX_STATE_DESTROYED = 0x00DEAD00
+};
+
+struct dynamicbox_common {
+       enum dynamicbox_state state;
+
+       struct dlist *dynamicbox_list;
+       int refcnt;
+
+       char *cluster;
+       char *category;
+
+       char *pkgname;
+       char *id;
+
+       char *content;
+       char *title;
+       char *filename;
+
+       double timestamp;
+
+       struct alt_info {
+               char *icon;
+               char *name;
+       } alt;
+
+       enum dynamicbox_delete_type delete_type;
+
+       int is_user;
+       int is_gbar_created;
+       int is_pinned_up;
+       int is_active_update;
+       enum dynamicbox_visible_state visible;
+
+       struct {
+               enum dynamicbox_dbox_type type;
+               struct fb_info *fb;
+
+               int size_list;
+
+               int width;
+               int height;
+               double priority;
+
+               char *auto_launch;
+               double period;
+               int pinup_supported;
+               int mouse_event;
+
+               /* For the filtering event */
+               double x;
+               double y;
+               char *lock;
+               int lock_fd;
+               struct dynamicbox_damage_region last_damage;
+       } dbox;
+
+       struct {
+               enum dynamicbox_gbar_type type;
+               struct fb_info *fb;
+
+               int width;
+               int height;
+
+               int default_width;
+               int default_height;
+
+               /* For the filtering event */
+               double x;
+               double y;
+               char *lock;
+               int lock_fd;
+               struct dynamicbox_damage_region last_damage;
+       } gbar;
+
+       int nr_of_sizes;
+
+       struct requested_flag {
+               unsigned int created:1;
+               unsigned int deleted:1;
+               unsigned int pinup:1;
+               unsigned int group_changed:1;
+               unsigned int period_changed:1;
+               unsigned int size_changed:1;
+               unsigned int gbar_created:1;
+               unsigned int gbar_destroyed:1;
+               unsigned int update_mode:1;
+               unsigned int access_event:1;
+               unsigned int key_event:1;
+
+               /*!
+                * \note
+                * Reserved
+                */
+               unsigned int reserved:21;
+       } request;
+};
+
+struct job_item {
+       struct dynamicbox *handle;
+       dynamicbox_ret_cb cb;
+       int ret;
+       void *data;
+};
+
+struct dynamicbox {
+       enum dynamicbox_state state;
+
+       int refcnt;
+       int paused_updating;
+
+       enum dynamicbox_visible_state visible;
+       struct dynamicbox_common *common;
+
+       void *data;
+
+       struct callback_table {
+               struct dynamicbox_script_operators dbox_ops;
+               struct dynamicbox_script_operators gbar_ops;
+
+               struct created {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } created;
+
+               struct deleted {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } deleted;
+
+               struct pinup {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } pinup;
+
+               struct group_changed {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } group_changed;
+
+               struct period_changed {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } period_changed;
+
+               struct size_changed {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } size_changed;
+
+               struct gbar_created {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } gbar_created;
+
+               struct gbar_destroyed {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } gbar_destroyed;
+
+               struct update_mode {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } update_mode;
+
+               struct access_event {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } access_event;
+
+               struct key_event {
+                       dynamicbox_ret_cb cb;
+                       void *data;
+               } key_event;
+       } cbs;
+};
+
+/* End of a file */
index 9e567dd..e7b8543 100644 (file)
 
 struct fb_info;
 
-enum buffer_type { /*!< Must have to be sync with libprovider, liblivebox-viewer */
-       BUFFER_TYPE_FILE,
-       BUFFER_TYPE_SHM,
-       BUFFER_TYPE_PIXMAP,
-       BUFFER_TYPE_ERROR
-};
-
 extern int fb_init(void *disp);
 extern int fb_fini(void);
 extern const char *fb_id(struct fb_info *info);
 extern int fb_get_size(struct fb_info *info, int *w, int *h);
-extern int fb_sync(struct fb_info *info);
+extern int fb_sync(struct fb_info *info, int x, int y, int w, int h);
 extern int fb_size(struct fb_info *info);
 extern int fb_refcnt(void *data);
 extern int fb_is_created(struct fb_info *info);
diff --git a/include/livebox.h b/include/livebox.h
deleted file mode 100644 (file)
index dc18d79..0000000
+++ /dev/null
@@ -1,1495 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __LIVEBOX_H
-#define __LIVEBOX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * @file livebox.h
- * @brief This file declares API of liblivebox-viewer library
- */
-
-/**
- * @addtogroup CAPI_LIVEBOX_VIEWER_MODULE
- * @{
- */
-
-/**
- * @brief
- * Structure for a Livebox instance.
- */
-struct livebox;
-
-/**
- * @brief Definition for a default update period for Livebox (defined in the package manifest file).
- */
-#define DEFAULT_PERIOD -1.0f
-
-/**
- * @brief Enumeration for Mouse & Key event for buffer type Livebox or PD.
- * @details Viewer should send these events to livebox.
- */
-enum content_event_type {
-       CONTENT_EVENT_MOUSE_DOWN        = 0x00000001, /**< LB mouse down event for livebox */
-       CONTENT_EVENT_MOUSE_UP          = 0x00000002, /**< LB mouse up event for livebox */
-       CONTENT_EVENT_MOUSE_MOVE        = 0x00000004, /**< LB mouse move event for livebox */
-       CONTENT_EVENT_MOUSE_ENTER       = 0x00000008, /**< LB mouse enter event for livebox */
-       CONTENT_EVENT_MOUSE_LEAVE       = 0x00000010, /**< LB mouse leave event for livebox */
-       CONTENT_EVENT_MOUSE_SET         = 0x00000020, /**< LB mouse set auto event for livebox */
-       CONTENT_EVENT_MOUSE_UNSET       = 0x00000040, /**< LB mouse unset auto event for livebox */
-
-       CONTENT_EVENT_KEY_DOWN          = 0x00000001, /**< LB key press */
-       CONTENT_EVENT_KEY_UP            = 0x00000002, /**< LB key release */
-       CONTENT_EVENT_KEY_FOCUS_IN      = 0x00000008, /**< LB key focused in */
-       CONTENT_EVENT_KEY_FOCUS_OUT     = 0x00000010, /**< LB key focused out */
-       CONTENT_EVENT_KEY_SET           = 0x00000020, /**< LB Key, start feeding event by master */
-       CONTENT_EVENT_KEY_UNSET         = 0x00000040, /**< LB key, stop feeding event by master */
-
-       CONTENT_EVENT_ON_SCROLL         = 0x00000080, /**< LB On scrolling */
-       CONTENT_EVENT_ON_HOLD           = 0x00000100, /**< LB On holding */
-       CONTENT_EVENT_OFF_SCROLL        = 0x00000200, /**< LB Stop scrolling */
-       CONTENT_EVENT_OFF_HOLD          = 0x00000400, /**< LB Stop holding */
-
-       CONTENT_EVENT_KEY_MASK          = 0x80000000, /**< Mask value for key event */
-       CONTENT_EVENT_MOUSE_MASK        = 0x20000000, /**< Mask value for mouse event */
-       CONTENT_EVENT_PD_MASK           = 0x10000000, /**< Mask value for PD event */
-       CONTENT_EVENT_LB_MASK           = 0x40000000, /**< Mask value for LB event */
-
-       LB_MOUSE_ON_SCROLL              = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
-       LB_MOUSE_ON_HOLD                = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
-       LB_MOUSE_OFF_SCROLL             = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_OFF_SCROLL, /**< Scrolling stopped */
-       LB_MOUSE_OFF_HOLD               = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_OFF_HOLD, /**< Holding stopped */
-
-       LB_MOUSE_DOWN                   = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_DOWN, /**< Mouse down on the livebox */
-       LB_MOUSE_UP                     = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_UP, /**< Mouse up on the livebox */
-       LB_MOUSE_MOVE                   = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_MOVE, /**< Move move on the livebox */
-       LB_MOUSE_ENTER                  = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_ENTER, /**< Mouse enter to the livebox */
-       LB_MOUSE_LEAVE                  = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_LEAVE, /**< Mouse leave from the livebox */
-       LB_MOUSE_SET                    = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_SET, /**< Mouse event, start feeding event by master */
-       LB_MOUSE_UNSET                  = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_UNSET, /**< Mouse event, stop feeding event by master */
-
-       PD_MOUSE_ON_SCROLL              = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_ON_SCROLL, /**< Mouse event occurs while scrolling */
-       PD_MOUSE_ON_HOLD                = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_ON_HOLD, /**< Mouse event occurs on holding */
-       PD_MOUSE_OFF_SCROLL             = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_OFF_SCROLL, /**< Scrolling stopped */
-       PD_MOUSE_OFF_HOLD               = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_OFF_HOLD, /**< Holding stopped */
-
-       PD_MOUSE_DOWN                   = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_DOWN, /**< Mouse down on the PD */
-       PD_MOUSE_UP                     = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_UP, /**< Mouse up on the PD */
-       PD_MOUSE_MOVE                   = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_MOVE, /**< Mouse move on the PD */
-       PD_MOUSE_ENTER                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_ENTER, /**< Mouse enter to the PD */
-       PD_MOUSE_LEAVE                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_LEAVE, /**< Mouse leave from the PD */
-       PD_MOUSE_SET                    = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_SET, /**< Mouse event, start feeding event by master */
-       PD_MOUSE_UNSET                  = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_MOUSE_MASK | CONTENT_EVENT_MOUSE_UNSET, /**< Mouse event, stop feeding event by master */
-
-       LB_KEY_DOWN                     = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_DOWN, /**< Key down on the livebox */
-       LB_KEY_UP                       = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_UP, /**< Key up on the livebox */
-       LB_KEY_SET                      = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_SET, /**< Key event, start feeding event by master */
-       LB_KEY_UNSET                    = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_UNSET, /**< Key event, stop feeding event by master */
-       LB_KEY_FOCUS_IN                 = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_FOCUS_IN, /**< Key event, focus in */
-       LB_KEY_FOCUS_OUT                = CONTENT_EVENT_LB_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_FOCUS_OUT, /**< Key event, foucs out */
-
-       PD_KEY_DOWN                     = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_DOWN, /**< Key down on the livebox */
-       PD_KEY_UP                       = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_UP, /**< Key up on the livebox */
-       PD_KEY_SET                      = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_SET, /**< Key event, start feeding event by master */
-       PD_KEY_UNSET                    = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_UNSET, /**< Key event, stop feeding event by master */
-       PD_KEY_FOCUS_IN                 = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_FOCUS_IN, /**< Key event, focus in */
-       PD_KEY_FOCUS_OUT                = CONTENT_EVENT_PD_MASK | CONTENT_EVENT_KEY_MASK | CONTENT_EVENT_KEY_FOCUS_OUT, /**< Key event, focus out */
-
-       CONTENT_EVENT_MAX               = 0xFFFFFFFF /**< Unknown event */
-};
-
-/**
- * @brief Enumeration for Accessibility event for buffer type Livebox or PD.
- * @details These events are sync'd with Tizen accessibility event set.
- */
-enum access_event_type {
-       ACCESS_EVENT_PD_MASK            = 0x10000000, /**< PD Accessibility event mask */
-       ACCESS_EVENT_LB_MASK            = 0x20000000, /**< LB Accessibility event mask */
-
-       ACCESS_EVENT_HIGHLIGHT          = 0x00000100, /**< LB accessibility: Hightlight a object */
-       ACCESS_EVENT_HIGHLIGHT_NEXT     = 0x00000200, /**< LB accessibility: Set highlight to next object */
-       ACCESS_EVENT_HIGHLIGHT_PREV     = 0x00000400, /**< LB accessibility: Set highlight to prev object */
-       ACCESS_EVENT_UNHIGHLIGHT        = 0x00000800, /**< LB accessibility unhighlight */
-       ACCESS_EVENT_ACTIVATE           = 0x00001000, /**< LB accessibility activate */
-       ACCESS_EVENT_ACTION_DOWN        = 0x00010000, /**< LB accessibility value changed */
-       ACCESS_EVENT_ACTION_UP          = 0x00020000, /**< LB accessibility value changed */
-       ACCESS_EVENT_SCROLL_DOWN        = 0x00100000, /**< LB accessibility scroll down */
-       ACCESS_EVENT_SCROLL_MOVE        = 0x00200000, /**< LB accessibility scroll move */
-       ACCESS_EVENT_SCROLL_UP          = 0x00400000, /**< LB accessibility scroll up */
-       ACCESS_EVENT_VALUE_CHANGE       = 0x00800000, /**< LB accessibility value change */
-       ACCESS_EVENT_MOUSE              = 0x01000000, /**< Give mouse event to highlight object */
-       ACCESS_EVENT_BACK               = 0x02000000, /**< Go back to a previous view ex: pop naviframe item */
-       ACCESS_EVENT_OVER               = 0x04000000, /**< Mouse over an object */
-       ACCESS_EVENT_READ               = 0x08000000, /**< Highlight an object */
-       ACCESS_EVENT_ENABLE             = 0x00000001, /**< Enable highlight and read ability */
-       ACCESS_EVENT_DISABLE            = 0x00000002, /**< Disable highlight and read ability */
-
-       LB_ACCESS_HIGHLIGHT             = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_HIGHLIGHT,        /**< Access event - Highlight an object in the livebox */
-       LB_ACCESS_HIGHLIGHT_NEXT        = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_HIGHLIGHT_NEXT,   /**< Access event - Move highlight to the next object in a livebox */
-       LB_ACCESS_HIGHLIGHT_PREV        = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_HIGHLIGHT_PREV,   /**< Access event - Move highlight to the prev object in a livebox */
-       LB_ACCESS_UNHIGHLIGHT           = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_UNHIGHLIGHT,      /**< Access event - Delete highlight from the livebox */
-       LB_ACCESS_ACTIVATE              = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_ACTIVATE,         /**< Access event - Launch or activate the highlighted object */
-       LB_ACCESS_ACTION_DOWN           = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_ACTION_DOWN,      /**< Access event - down */
-       LB_ACCESS_ACTION_UP             = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_ACTION_UP,        /**< Access event - up */
-       LB_ACCESS_SCROLL_DOWN           = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_SCROLL_DOWN,      /**< Access event - scroll down */
-       LB_ACCESS_SCROLL_MOVE           = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_SCROLL_MOVE,      /**< Access event - scroll move */
-       LB_ACCESS_SCROLL_UP             = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_SCROLL_UP,        /**< Access event - scroll up */
-       LB_ACCESS_VALUE_CHANGE          = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_VALUE_CHANGE,     /**< Access event - value change */
-       LB_ACCESS_MOUSE                 = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_MOUSE,            /**< Access event - mouse */
-       LB_ACCESS_BACK                  = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_BACK,             /**< Access event - back */
-       LB_ACCESS_OVER                  = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_OVER,             /**< Access event - over */
-       LB_ACCESS_READ                  = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_READ,             /**< Access event - read */
-       LB_ACCESS_ENABLE                = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_ENABLE,           /**< Access event - enable */
-       LB_ACCESS_DISABLE               = ACCESS_EVENT_LB_MASK | ACCESS_EVENT_DISABLE,          /**< Access event - disable */
-
-       PD_ACCESS_HIGHLIGHT             = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_HIGHLIGHT,        /**< Access event - Highlight an object in the PD */
-       PD_ACCESS_HIGHLIGHT_NEXT        = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_HIGHLIGHT_NEXT,   /**< Access event - Move highlight to the next object in a PD */
-       PD_ACCESS_HIGHLIGHT_PREV        = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_HIGHLIGHT_PREV,   /**< Access event - Move highlight to the prev object in a PD */
-       PD_ACCESS_UNHIGHLIGHT           = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_UNHIGHLIGHT,      /**< Access event - Delet highlight from the PD */
-       PD_ACCESS_ACTIVATE              = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_ACTIVATE,         /**< Access event - Launch or activate the highlighted object */
-       PD_ACCESS_ACTION_DOWN           = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_ACTION_DOWN,      /**< Access event - down */
-       PD_ACCESS_ACTION_UP             = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_ACTION_UP,        /**< Access event - up */
-       PD_ACCESS_SCROLL_DOWN           = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_SCROLL_DOWN,      /**< Access event - scroll down */
-       PD_ACCESS_SCROLL_MOVE           = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_SCROLL_MOVE,      /**< Access event - scroll move */
-       PD_ACCESS_SCROLL_UP             = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_SCROLL_UP,        /**< Access event - scroll up */
-       PD_ACCESS_VALUE_CHANGE          = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_VALUE_CHANGE,     /**< Access event - value change */
-       PD_ACCESS_MOUSE                 = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_MOUSE,            /**< Access event - mouse */
-       PD_ACCESS_BACK                  = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_BACK,             /**< Access event - back */
-       PD_ACCESS_OVER                  = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_OVER,             /**< Access event - over */
-       PD_ACCESS_READ                  = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_READ,             /**< Access event - read */
-       PD_ACCESS_ENABLE                = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_ENABLE,           /**< Access event - enable */
-       PD_ACCESS_DISABLE               = ACCESS_EVENT_PD_MASK | ACCESS_EVENT_DISABLE           /**< Access event - disable */
-};
-
-/**
- * @brief Enumeration for Livebox LB content type.
- */
-enum livebox_lb_type {
-       LB_TYPE_IMAGE = 0x01, /**< Contents of a livebox is based on the image file */
-       LB_TYPE_BUFFER = 0x02, /**< Contents of a livebox is based on canvas buffer(shared) */
-       LB_TYPE_TEXT = 0x04, /**< Contents of a livebox is based on formatted text file */
-       LB_TYPE_PIXMAP = 0x08, /**< Contens of a livebox is shared by the pixmap(depends on X) */
-       LB_TYPE_ELEMENTARY = 0x10, /**< Using Elementary for sharing content & event */
-       LB_TYPE_INVALID = 0xFF /**< Unknown LB type */
-};
-
-/**
- * @brief Enumeration for Livebox PD content type.
- */
-enum livebox_pd_type {
-       PD_TYPE_BUFFER = 0x01, /**< Contents of a PD is based on canvas buffer(shared) */
-       PD_TYPE_TEXT = 0x02, /**< Contents of a PD is based on formatted text file */
-       PD_TYPE_PIXMAP = 0x04, /**< Contents of a livebox is shared by the pixmap(depends on X) */
-       PD_TYPE_ELEMENTARY = 0x08, /**< Using Elementary for sharing content & event */
-       PD_TYPE_INVALID = 0xFF /**< Unknown PD type */
-};
-
-/**
- * @brief Enumeration for Livebox event type.
- * @details These events will be sent from the provider.
- */
-enum livebox_event_type { /**< livebox_event_handler_set Event list */
-       LB_EVENT_LB_UPDATED, /**< Contents of the given livebox is updated */
-       LB_EVENT_PD_UPDATED, /**< Contents of the given pd is updated */
-
-       LB_EVENT_CREATED, /**< A new livebox is created */
-       LB_EVENT_DELETED, /**< A livebox is deleted */
-
-       LB_EVENT_GROUP_CHANGED, /**< Group (Cluster/Sub-cluster) information is changed */
-       LB_EVENT_PINUP_CHANGED, /**< PINUP status is changed */
-       LB_EVENT_PERIOD_CHANGED, /**< Update period is changed */
-
-       LB_EVENT_LB_SIZE_CHANGED, /**< Livebox size is changed */
-       LB_EVENT_PD_SIZE_CHANGED, /**< PD size is changed */
-
-       LB_EVENT_PD_CREATED, /**< If a PD is created even if you didn't call the livebox_create_pd API */
-       LB_EVENT_PD_DESTROYED, /**< If a PD is destroyed even if you didn't call the livebox_destroy_pd API */
-
-       LB_EVENT_HOLD_SCROLL, /**< If the screen should be freezed */
-       LB_EVENT_RELEASE_SCROLL, /**< If the screen can be scrolled */
-
-       LB_EVENT_LB_UPDATE_BEGIN, /**< Livebox LB content update is started */
-       LB_EVENT_LB_UPDATE_END, /**< Livebox LB content update is finished */
-
-       LB_EVENT_PD_UPDATE_BEGIN, /**< Livebox PD content update is started */
-       LB_EVENT_PD_UPDATE_END, /**< Livebox PD content update is finished */
-
-       LB_EVENT_UPDATE_MODE_CHANGED, /**< Livebox Update mode is changed */
-
-       LB_EVENT_REQUEST_CLOSE_PD, /**< Livebox requests to close the PD */
-
-       LB_EVENT_EXTRA_INFO_UPDATED, /**< Extra information is updated */
-
-       LB_EVENT_IGNORED /**< Request is ignored */
-};
-
-/**
- * @brief Enumeration for Livebox option types.
- */
-enum livebox_option_type {
-       LB_OPTION_MANUAL_SYNC,                  /**< Sync manually */
-       LB_OPTION_FRAME_DROP_FOR_RESIZE,        /**< Drop frames while resizing */
-       LB_OPTION_SHARED_CONTENT,               /**< Use only one real instance for multiple fake instances if user creates it using same content */
-       LB_OPTION_DIRECT_UPDATE,                /**< Use the private socket for receiving updated event */
-
-       LB_OPTION_ERROR = 0xFFFFFFFF            /**< To specify the size of this enumeration type */
-};
-
-enum livebox_fault_type {
-       LB_FAULT_DEACTIVATED, /*!< Livebox is deactivated by its fault operation */
-       LB_FAULT_PROVIDER_DISCONNECTED /*!< Provider is disconnected */
-};
-
-/**
- * @brief Enumeration for Livebox visible states.
- * @details Must be sync'd with a provider.
- */
-enum livebox_visible_state {
-       LB_SHOW = 0x00, /**< Livebox is shown. Default state */
-       LB_HIDE = 0x01, /**< Livebox is hidden, Update timer will not be freezed. but you cannot receive any updates events. */
-
-       LB_HIDE_WITH_PAUSE = 0x02, /**< Livebix is hidden, it will pause the update timer, but if a livebox updates its contents, update event will be triggered */
-
-       LB_VISIBLE_ERROR = 0xFFFFFFFF /**< To specify the size of this enumeration type */
-};
-
-/**
- * @brief Structure for TEXT type livebox contents handling opertators.
- */
-struct livebox_script_operators {
-       int (*update_begin)(struct livebox *handle); /**< Content parser is started */
-       int (*update_end)(struct livebox *handle); /**< Content parser is finished */
-
-       /* Listed functions will be called when parser meets each typed content */
-       int (*update_text)(struct livebox *handle, const char *id, const char *part, const char *data); /**< Update text content */
-       int (*update_image)(struct livebox *handle, const char *id, const char *part, const char *data, const char *option); /**< Update image content */
-       int (*update_script)(struct livebox *handle, const char *id, const char *new_id, const char *part, const char *file, const char *group); /**< Update script content */
-       int (*update_signal)(struct livebox *handle, const char *id, const char *emission, const char *signal); /**< Update signal */
-       int (*update_drag)(struct livebox *handle, const char *id, const char *part, double dx, double dy); /**< Update drag info */
-       int (*update_info_size)(struct livebox *handle, const char *id, int w, int h); /**< Update content size */
-       int (*update_info_category)(struct livebox *handle, const char *id, const char *category); /**< Update content category info */
-       int (*update_access)(struct livebox *handle, const char *id, const char *part, const char *text, const char *option); /**< Update access information */
-       int (*operate_access)(struct livebox *handle, const char *id, const char *part, const char *operation, const char *option); /**< Update access operation */
-       int (*update_color)(struct livebox *handle, const char *id, const char *part, const char *data); /**< Update color */
-};
-
-/**
- * @brief Called for every async function.
- * @details Prototype of the return callback of every async functions.
- * @param[in] handle Handle of the livebox instance
- * @param[in] ret Result status of operation (LB_STATUS_XXX defined from liblivebox-service)
- * @param[in] data Data for result callback
- * @return void
- * @see livebox_add()
- * @see livebox_del()
- * @see livebox_activate()
- * @see livebox_resize()
- * @see livebox_set_group()
- * @see livebox_set_period()
- * @see livebox_access_event()
- * @see livebox_set_pinup()
- * @see livebox_create_pd()
- * @see livebox_create_pd_with_position()
- * @see livebox_destroy_pd()
- * @see livebox_emit_text_signal()
- * @see livebox_acquire_pd_pixmap()
- * @see livebox_acquire_lb_pixmap()
- * @see livebox_set_update_mode()
- */
-typedef void (*ret_cb_t)(struct livebox *handle, int ret, void *data);
-
-/**
- * @brief Initializes the livebox system.
- * @remarks This API uses get/setenv APIs.
- *   Those APIs are not thread-safe.
- *   So you have to consider to use the livebox_init_with_options instead of this if you are developing multi-threaded viewer.
- * @param[in] disp X Display connection object (If you have X Display connection object already, you can re-use it. But you should care its life cycle.
- *                 It must be alive before calling livebox_fini())
- * @return int
- * @retval #LB_STATUS_SUCCESS if success
- * @see livebox_fini()
- * @see livebox_init_with_options()
- */
-extern int livebox_init(void *disp);
-
-/**
- * @brief Initializes the livebox system with some options.
- * @details livebox_init function uses environment value to initiate some configurable values.
- *          But some applications do not want to use the env value.
- *          For them, this API will give a chance to set default options using given arguments.
- * @param[in] disp Display (if @a disp is @c NULL, the library will try to acquire a new connection with X)
- * @param[in] prevent_overwrite Overwrite flag (when the content of an image type livebox is updated, it will be overwriten (0) or not (1))
- * @param[in] event_filter If the next event comes in this period, ignore it. It is too fast to processing it in time // need to be elaborated
- * @param[in] use_thread Use the receive thread // need to be elaborated
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int Integer, Livebox status code
- * @retval #LB_STATUS_SUCCESS if success
- * @see livebox_init()
- * @see livebox_fini()
- */
-extern int livebox_init_with_options(void *disp, int prevent_overwrite, double event_filter, int use_thread);
-
-/**
- * @brief Finalizes the livebox system.
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCES if success
- * @retval #LB_STATUS_ERROR_INVALID if livebox_init is not called
- * @see livebox_init()
- * @see livebox_init_with_options()
- */
-extern int livebox_fini(void);
-
-/**
- * @brief Notifies the status of a client ("it is paused") to the provider.
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS if success
- * @retval #LB_STATUS_ERROR_FAULT if it failed to send state (paused) info
- * @see livebox_client_resumed()
- */
-extern int livebox_client_paused(void);
-
-/**
- * @brief Notifies the status of client ("it is resumed") to the provider.
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS if success
- * @retval #LB_STATUS_ERROR_FAULT if it failed to send state (resumed) info
- * @see livebox_client_paused()
- */
-extern int livebox_client_resumed(void);
-
-/**
- * @brief Adds a new livebox.
- * @details If the screen size is "1280x720", the below size lists are used for default.
- * Or you can find the default sizes in pixel from /usr/share/data-provider-master/resolution.ini.
- * Size types are defined from the liblivebox-service package (livebox-service.h).
- *
- * Normal mode livebox
- * 1x1=175x175, #LB_SIZE_TYPE_1x1
- * 2x1=354x175, #LB_SIZE_TYPE_2x1
- * 2x2=354x354, #LB_SIZE_TYPE_2x2
- * 4x1=712x175, #LB_SIZE_TYPE_4x1
- * 4x2=712x354, #LB_SIZE_TYPE_4x2
- * 4x4=712x712, #LB_SIZE_TYPE_4x4
- *
- * Extended sizes
- * 4x3=712x533, #LB_SIZE_TYPE_4x3
- * 4x5=712x891, #LB_SIZE_TYPE_4x5
- * 4x6=712x1070, #LB_SIZE_TYPE_4x6
- *
- * Easy mode livebox
- * 21x21=224x215, #LB_SIZE_TYPE_EASY_1x1
- * 23x21=680x215, #LB_SIZE_TYPE_EASY_3x1
- * 23x23=680x653, #LB_SIZE_TYPE_EASY_3x3
- *
- * Special livebox
- * 0x0=720x1280, #LB_SIZE_TYPE_0x0
- *
- * @remarks
- *    Even if you get a handle from the return value of this function, it is not a created instance.
- *    So you have to consider it as a not initialized handle.
- *    It can be initialized only after getting the return callback with "ret == #LB_STATUS_SUCCESS"
- * @param[in] pkgname Livebox Id
- * @param[in] content Contents that will be passed to the livebox instance
- * @param[in] cluster Main group
- * @param[in] category Sub group
- * @param[in] period Update period (@c DEFAULT_PERIOD can be used for this; this argument will be used to specify the period of updating contents of a livebox)
- * @param[in] type Size type (defined from liblivebox-service package)
- * @param[in] cb After the request is sent to the master provider, this callback will be called
- * @param[in] data This data will be passed to the callback
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return handle
- * @retval Handle Livebox handle but not yet initialized
- * @retval @c NULL if it fails to create a handle
- * @see ret_cb_t
- */
-extern struct livebox *livebox_add(const char *pkgname, const char *content, const char *cluster, const char *category, double period, int type, ret_cb_t cb, void *data);
-
-/**
- * @brief Deletes a livebox (will replace livebox_del).
- * @remarks If you call this with an uninitialized handle, the return callback will be called synchronously.
- *    So before returning from this function, the return callback will be called first.
- * @param[in] handler Handler of a livebox instance
- * @param[in] type Deletion type (LB_DELETE_PERMANENTLY or LB_DELETE_TEMPORARY)
- * @param[in] cb Return callback
- * @param[in] data User data for return callback
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Already in process
- * @retval #LB_STATUS_ERROR_FAULT Failed to create a request packet
- * @retval #LB_STATUS_SUCCESS Successfully sent, return callack will be called
- * @see ret_cb_t
- */
-extern int livebox_del(struct livebox *handler, int type, ret_cb_t cb, void *data);
-
-/**
- * @brief Sets a livebox events callback.
- * @details To get the event push from the provider, register the event callback using this function.
- *    The callback will be called if there is any event from the provider.
- * @param[in] cb Event handler
- * @param[in] data User data for the event handler
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_SUCCESS If succeed to set event handler
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_MEMORY Not enough memory
- * @see livebox_unset_event_handler()
- */
-extern int livebox_set_event_handler(int (*cb)(struct livebox *handler, enum livebox_event_type event, void *data), void *data);
-
-/**
- * @brief Unsets the livebox event handler.
- * @param[in] cb Event handler
- * @privlevel N/P
- * @return void * Event handler data
- * @retval pointer Pointer of 'data' which is used with the livebox_set_event_handler
- * @see livebox_set_event_handler()
- */
-extern void *livebox_unset_event_handler(int (*cb)(struct livebox *handler, enum livebox_event_type event, void *data));
-
-/**
- * @brief Registers the livebox fault event handler.
- * @details Argument list: event, pkgname, filename, funcname.
- * @param[in] cb Event handler
- * @param[in] data Event handler data
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_SUCCESS If succeed to set fault event handler
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_MEMORY Not enough memory
- * @see livebox_unset_fault_handler()
- */
-extern int livebox_set_fault_handler(int (*cb)(enum livebox_fault_type, const char *, const char *, const char *, void *), void *data);
-
-/**
- * @brief Unsets the livebox fault event handler.
- * @param[in] cb Event handler
- * @privlevel N/P
- * @return void * Callback data which is set via livebox_set_fault_handler
- * @retval pointer Pointer of 'data' which is used with the livebox_set_fault_handler
- * @see livebox_set_fault_handler()
- */
-extern void *livebox_unset_fault_handler(int (*cb)(enum livebox_fault_type, const char *, const char *, const char *, void *));
-
-/**
- * @brief Activates the faulted livebox.
- * @details Request result will be returned via return callback.
- * @remarks Even though this function returns SUCCESS, it means that it just successfully sent a request to the provider.
- *    So you have to check the return callback and its "ret" argument.
- * @param[in] pkgname Package name which should be activated
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int type
- * @retval #LB_STATUS_SUCCESS Successfully sent a request
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Failed to make a request
- * @see ret_cb_t
- */
-extern int livebox_activate(const char *pkgname, ret_cb_t cb, void *data);
-
-/**
- * @brief Resizes the livebox.
- * @details
- * Normal mode livebox size
- * 1x1=175x175, LB_SIZE_TYPE_1x1
- * 2x1=354x175, LB_SIZE_TYPE_2x1
- * 2x2=354x354, LB_SIZE_TYPE_2x2
- * 4x1=712x175, LB_SIZE_TYPE_4x1
- * 4x2=712x354, LB_SIZE_TYPE_4x2
- * 4x4=712x712, LB_SIZE_TYPE_4x4
- *
- * Extended livebox size
- * 4x3=712x533, LB_SIZE_TYPE_4x3
- * 4x5=712x891, LB_SIZE_TYPE_4x5
- * 4x6=712x1070, LB_SIZE_TYPE_4x6
- *
- * Easy mode livebox size
- * 21x21=224x215, LB_SIZE_TYPE_EASY_1x1
- * 23x21=680x215, LB_SIZE_TYPE_EASY_3x1
- * 23x23=680x653, LB_SIZE_TYPE_EASY_3x3
- *
- * Special mode livebox size
- * 0x0=720x1280, LB_SIZE_TYPE_0x0
- * @remarks You have to check the return callback.
- * @param[in] handler Handler of a livebox instance
- * @param[in] type Type of a livebox size (e.g., LB_SIZE_TYPE_1x1, ...)
- * @param[in] cb Result callback of the resize operation
- * @param[in] data User data for return callback
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int type
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous request of resize is in progress
- * @retval #LB_STATUS_ERROR_ALREADY Already resized, there is no differences between current size and requested size
- * @retval #LB_STATUS_ERROR_PERMISSION Permission denied, you only have view the content of this box
- * @retval #LB_STATUS_ERROR_FAULT Failed to make a request
- * @see ret_cb_t
- */
-extern int livebox_resize(struct livebox *handler, int type, ret_cb_t cb, void *data);
-
-/**
- * @brief Sends the click event for a livebox.
- * @param[in] handler Handler of a livebox instance
- * @param[in] x Rational X of the content width
- * @param[in] y Rational Y of the content height
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully done
- */
-extern int livebox_click(struct livebox *handler, double x, double y);
-
-/**
- * @brief Changes the cluster/sub-cluster name of the given livebox handler.
- * @param[in] handler Handler of a livebox instance
- * @param[in] cluster New cluster of a livebox
- * @param[in] category New category of a livebox
- * @param[in] cb Result callback for changing the cluster/category of a livebox
- * @param[in] data User data for the result callback
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS Request is successfully sent. the return callback will be called
- * @retval #LB_STATUS_ERROR_BUSY Previous request is not finished yet
- * @retval #LB_STATUS_ERROR_ALREADY Group name is same with current one
- * @retval #LB_STATUS_ERROR_PERMISSION You have no permission to change property of this livebox instance
- * @retval #LB_STATUS_ERROR_FAULT Failed to make a request
- * @see ret_cb_t
- */
-extern int livebox_set_group(struct livebox *handler, const char *cluster, const char *category, ret_cb_t cb, void *data);
-
-/**
- * @brief Gets the cluster and category (sub-cluster) name of the given livebox (it is not I18N format, only English).
- * @remarks You have to do not release the cluster & category.
- *    It is allocated inside of a given livebox instance, so you can only read it.
- * @param[in] handler Handler of a livebox instance
- * @param[out] cluster Storage(memory) for containing the cluster name
- * @param[out] category Storage(memory) for containing the category name
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- */
-extern int livebox_get_group(struct livebox *handler, const char **cluster, const char **category);
-
-/**
- * @brief Gets the period of the livebox handler.
- * @remarks If this function returns 0.0f, it means the livebox has no update period or the handle is not valid.
- *    This function only works after the return callback of livebox_create fucntion is called.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return double
- * @retval Current update period of a livebox
- * @retval 0.0f This means the box has no update period or the handles is not valid
- */
-extern double livebox_period(struct livebox *handler);
-
-/**
- * @brief Changes the update period.
- * @param[in] handler Handler of a livebox instance
- * @param[in] period New update period of a livebox
- * @param[in] cb Result callback of changing the update period of this livebox
- * @param[in] data User data for the result callback
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY
- * @retval #LB_STATUS_ERROR_ALREADY
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @see ret_cb_t
- */
-extern int livebox_set_period(struct livebox *handler, double period, ret_cb_t cb, void *data);
-
-/**
- * @brief Checks whether the given livebox is a text type or not.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return livebox_lb_type
- * @retval #LB_TYPE_IMAGE Contents of a livebox is based on the image file
- * @retval #LB_TYPE_BUFFER Contents of a livebox is based on canvas buffer(shared)
- * @retval #LB_TYPE_TEXT Contents of a livebox is based on formatted text file
- * @retval #LB_TYPE_PIXMAP Contens of a livebox is shared by the pixmap(depends on X)
- * @retval #LB_TYPE_INVALID
- * @see livebox_lb_type()
- */
-extern enum livebox_lb_type livebox_lb_type(struct livebox *handler);
-
-/**
- * @brief Checks if the given livebox is created by user or not.
- * @details If the livebox instance is created by a system this will return 0.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval 0 Automatically created livebox by the provider
- * @retval 1 Created by user via livebox_add()
- * @see livebox_add()
- * @see livebox_set_event_handler()
- */
-extern int livebox_is_user(struct livebox *handler);
-
-/**
- * @brief Gets content information string of the given livebox.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval content_info Livebox content info that can be used again via content_info argument of livebox_add()
- * @see livebox_add()
- */
-extern const char *livebox_content(struct livebox *handler);
-
-/**
- * @brief Gets the sub cluster title string of the given livebox.
- * @details This API is now used for accessibility.
- *  Each box should set their content as a string to be read by TTS.
- *  So if the box has focused on the homescreen, the homescreen will read text using this API.
- * @remarks The title returned by this API is read by TTS.
- *  But it is just recomended to a homescreen.
- *  So, to read it or not depends on implementation of the homescreen.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval sub Cluster name
- * @retval @c NULL
- */
-extern const char *livebox_category_title(struct livebox *handler);
-
-/**
- * @brief Gets the filename of the given livebox, if it is an IMAGE type livebox.
- * @details If the box is developed as image format to represent its contents, the homescreen should know its image file name.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval filename If the livebox type is image this function will give you a abs-path of an image file (content is rendered)
- * @retval @c NULL If this has no image file or type is not image file.
- */
-extern const char *livebox_filename(struct livebox *handler);
-
-/**
- * @brief Gets the package name of the given livebox handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval pkgname Package name
- * @retval @c NULL If the handler is not valid
- */
-extern const char *livebox_pkgname(struct livebox *handler);
-
-/**
- * @brief Gets the priority of a current content.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return double
- * @retval 0.0f Handler is @c NULL
- * @retval -1.0f Handler is not valid (not yet initialized)
- * @retval real Number between 0.0 and 1.0
- */
-extern double livebox_priority(struct livebox *handler);
-
-/**
- * @brief Acquires the buffer of a given livebox (only for the buffer type).
- * @param[in] handler Handler of a livebox instance
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return void *
- * @retval address Address of a FB
- * @retval @c NULL If it fails to get fb address
- */
-extern void *livebox_acquire_fb(struct livebox *handler);
-
-/**
- * @brief Releases the buffer of a livebox (only for the buffer type).
- * @param[in] buffer Buffer
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see livebox_acquire_fb()
- */
-extern int livebox_release_fb(void *buffer);
-
-/**
- * @brief Gets the reference count of Livebox buffer (only for the buffer type).
- * @param[in] buffer Buffer
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval refcnt Positive integer including ZERO
- * @see livebox_pdfb_refcnt()
- */
-extern int livebox_fb_refcnt(void *buffer);
-
-/**
- * @brief Acquires the buffer of a PD frame (only for the buffer type).
- * @param[in] handler Handler of a livebox instance
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval @c NULL
- * @retval adress Address of a buffer of PD
- * @see livebox_release_pdfb()
- */
-extern void *livebox_acquire_pdfb(struct livebox *handler);
-
-/**
- * @brief Releases the acquired buffer of the PD Frame (only for the buffer type).
- * @param[in] buffer Buffer
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see livebox_acquire_pdfb()
- */
-extern int livebox_release_pdfb(void *buffer);
-
-/**
- * @brief Gets the reference count of a given PD buffer (only for the buffer type).
- * @param[in] buffer Buffer
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval reference Reference count
- * @see livebox_fb_refcnt()
- */
-extern int livebox_pdfb_refcnt(void *buffer);
-
-/**
- * @brief Gets the size of the Livebox.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_SIZE_TYPE_NxM
- * @retval #LB_SIZE_TYPE_INVALID
- */
-extern int livebox_size(struct livebox *handler);
-
-/**
- * @brief Gets the size of the Progressive Disclosure.
- * @param[in] handler Handler of a livebox instance
- * @param[out] w
- * @param[out] h
- * @privlevel N/P
- * @return int type
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- */
-extern int livebox_get_pdsize(struct livebox *handler, int *w, int *h);
-
-/**
- * @brief Gets a list of the supported sizes of a given handler.
- * @param[in] handler Handler of a livebox instance
- * @param[out] cnt
- * @param[out] size_list
- * @privlevel N/P
- * @return int type
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- */
-extern int livebox_get_supported_sizes(struct livebox *handler, int *cnt, int *size_list);
-
-/**
- * @brief Gets BUFFER SIZE of the livebox if it is a buffer type.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval size Size of livebox buffer
- */
-extern int livebox_lbfb_bufsz(struct livebox *handler);
-
-/**
- * @brief Gets BUFFER SIZE of the progiressive disclosure if it is a buffer type.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval size Size of PD buffer
- */
-extern int livebox_pdfb_bufsz(struct livebox *handler);
-
-/**
- * @brief Sends a content event (for buffer type) to the provider (livebox).
- * @param[in] handler Handler of a livebox instance
- * @param[in] type Event type
- * @param[in] x Coordinates of X axis
- * @param[in] y Coordinates of Y axis
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous operation is not finished yet
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully sent
- * @see livebox_access_event()
- * @see livebox_key_event()
- */
-extern int livebox_mouse_event(struct livebox *handler, enum content_event_type type, double x, double y);
-
-/**
- * @brief Sends an access event (for buffer type) to the provider (livebox).
- * @param[in] handler Handler of a livebox instance
- * @param[in] type Event type
- * @param[in] x Coordinates of X axsis
- * @param[in] y Coordinates of Y axsis
- * @param[in] cb Result callback function
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous operation is not finished yet
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully sent
- * @see livebox_mouse_event()
- * @see livebox_key_event()
- */
-extern int livebox_access_event(struct livebox *handler, enum access_event_type type, double x, double y, ret_cb_t cb, void *data);
-
-/**
- * @brief Sends a key event (for buffer type) to the provider (livebox).
- * @param[in] handler Handler of a livebox instance
- * @param[in] type Key event type
- * @param[in] keycode Code of key
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous operation is not finished yet
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully sent
- * @see livebox_mouse_event()
- * @see livebox_access_event()
- */
-extern int livebox_key_event(struct livebox *handler, enum content_event_type type, unsigned int keycode, ret_cb_t cb, void *data);
-
-/**
- * @brief Sets pin-up status of the given handler.
- * @details If the livebox supports the pinup feature,
- *   you can freeze the update of the given livebox.
- *   But it is different from pause.
- *   The box will be updated and it will decide wheter update its content or not when the pinup is on.
- * @param[in] handler Handler of a livebox instance
- * @param[in] flag Pinup value
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid parameters
- * @see ret_cb_t
- * @see livebox_set_visibility()
- * @see livebox_is_pinned_up()
- */
-extern int livebox_set_pinup(struct livebox *handler, int flag, ret_cb_t cb, void *data);
-
-/**
- * @brief Checks the PIN-UP status of the given handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid parameters
- * @retval 1 Box is pinned up
- * @retval 0 Box is not pinned up
- * @see livebox_set_pinup()
- */
-extern int livebox_is_pinned_up(struct livebox *handler);
-
-/**
- * @brief Checks the availability of the PIN-UP feature for the given handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval 1 If the box support Pinup feature
- * @retval 0 If the box does not support the Pinup feature
- * @see livebox_is_pinned_up()
- * @see livebox_set_pinup()
- */
-extern int livebox_has_pinup(struct livebox *handler);
-
-/**
- * @brief Checks the existence of PD for the given handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval 1 If the box support the PD
- * @retval 0 If the box has no PD
- */
-extern int livebox_has_pd(struct livebox *handler);
-
-/**
- * @brief Creates PD of the given handler.
- * @param[in] handler Handler of a livebox instance
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous operation is not finished yet
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @see ret_cb_t
- * @see livebox_create_pd_with_position()
- * @see livebox_move_pd()
- * @see livebox_destroy_pd()
- */
-extern int livebox_create_pd(struct livebox *handler, ret_cb_t cb, void *data);
-
-/**
- * @brief Creates PD of the given handler with the relative position from livebox.
- * @param[in] handler Handler of a livebox instance
- * @param[in] x 0.0 ~ 1.0
- * @param[in] y 0.0 ~ 1.0
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY Previous operation is not finished yet
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @see livebox_create_pd()
- * @see livebox_destroy_pd()
- * @see livebox_move_pd()
- */
-extern int livebox_create_pd_with_position(struct livebox *handler, double x, double y, ret_cb_t cb, void *data);
-
-/**
- * @brief Updates a position of the given PD.
- * @param[in] handler Handler of a livebox instance
- * @param[in] x 0.0 ~ 1.0
- * @param[in] y 0.0 ~ 1.0
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_SUCCESS If sending a request for updating position of the PD has been done successfully
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- */
-extern int livebox_move_pd(struct livebox *handler, double x, double y);
-
-/**
- * @brief Destroys the PD of the given handler if it is created.
- * @param[in] handler Handler of a livebox instance
- * @param[in] cb
- * @param[in] data
- * @privlevel platform
- * @privilege %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see ret_cb_t
- */
-extern int livebox_destroy_pd(struct livebox *handler, ret_cb_t cb, void *data);
-
-/**
- * @brief Checks the create status of the given livebox handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval 0 PD is not created
- * @retval 1 PD is created
- */
-extern int livebox_pd_is_created(struct livebox *handler);
-
-/**
- * @brief Checks the content type of a progressive disclosure of the given handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval #PD_TYPE_BUFFER Contents of a PD is based on canvas buffer(shared)
- * @retval #PD_TYPE_TEXT Contents of a PD is based on formatted text file
- * @retval #PD_TYPE_PIXMAP Contents of a livebox is shared by the pixmap(depends on X)
- * @retval #PD_TYPE_INVALID
- * @see livebox_pd_type()
- */
-extern enum livebox_pd_type livebox_pd_type(struct livebox *handler);
-
-/**
- * @brief Checks the existence of a livebox about the given package name.
- * @param[in] pkgname Package name
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.info
- * @return int
- * @retval 1 If the box exists
- * @retval 0 If the box does not exist
- */
-extern int livebox_is_exists(const char *pkgname);
-
-/**
- * @brief Sets a function table for parsing the text content of a livebox.
- * @param[in] handler Handler of a livebox instance
- * @param[in] ops
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @see livebox_set_pd_text_handler()
- */
-extern int livebox_set_text_handler(struct livebox *handler, struct livebox_script_operators *ops);
-
-/**
- * @brief Sets a function table for parsing the text content of a Progressive Disclosure.
- * @param[in] handler Handler of a livebox instance
- * @param[in] ops
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @see livebox_set_text_handler()
- */
-extern int livebox_set_pd_text_handler(struct livebox *handler, struct livebox_script_operators *ops);
-
-/**
- * @brief Emits a text signal to the given livebox only if it is a text type.
- * @param[in] handler Handler of a livebox instance
- * @param[in] emission Emission string
- * @param[in] source Source string
- * @param[in] sx Start X
- * @param[in] sy Start Y
- * @param[in] ex End X
- * @param[in] ey End Y
- * @param[in] cb Result callback
- * @param[in] data Callback data
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid parameters
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully emitted
- * @see ret_cb_t
- */
-extern int livebox_emit_text_signal(struct livebox *handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, ret_cb_t cb, void *data);
-
-/**
- * @brief Sets a private data pointer to carry it using the given handler.
- * @param[in] handler Handler of a livebox instance
- * @param[in] data Data pointer
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_SUCCESS Successfully registered
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @see livebox_get_data()
- */
-extern int livebox_set_data(struct livebox *handler, void *data);
-
-/**
- * @brief Gets a private data pointer which is carried by a given handler.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return void *
- * @retval data Data pointer
- * @retval @c NULL If there is no data
- * @see livebox_set_data()
- */
-extern void *livebox_get_data(struct livebox *handler);
-
-/**
- * @brief Subscribes an event for liveboxes only in a given cluster and sub-cluster.
- * @details If you wrote a view-only client,
- *   you can receive the event of specific liveboxes which belong to a given cluster/category.
- *   But you cannot modify their attributes (such as size, ...).
- * @param[in] cluster   Cluster ("*" can be used for subscribe all cluster's liveboxes event; If you use the "*", value in the category will be ignored)
- * @param[in] category Category ("*" can be used for subscribe liveboxes events of all category(sub-cluster) in a given "cluster")
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully requested
- * @see livebox_unsubscribe_group()
- */
-extern int livebox_subscribe_group(const char *cluster, const char *category);
-
-/**
- * @brief Unsubscribes an event for the liveboxes, but you will receive already added liveboxes events.
- * @param[in] cluster Cluster("*" can be used for subscribe all cluster's liveboxes event; If you use the "*", value in the category will be ignored)
- * @param[in] category Category ("*" can be used for subscribe all sub-cluster's liveboxes event in a given "cluster")
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully requested
- * @see livebox_subscribe_group()
- */
-extern int livebox_unsubscribe_group(const char *cluster, const char *category);
-
-/**
- * @brief Refreshes the group (cluster/sub-cluser (aka. category)).
- * @details This function will trigger the update of all liveboxes in a given cluster/category group.
- * @remarks Basically, a default livebox system doesn't use the cluster/category concept.
- *    But you can use it. So if you decide to use it, then you can trigger the update of all liveboxes in the given group.
- * @param[in] cluster Cluster ID
- * @param[in] category Sub-cluster ID
- * @param[in] force 1 if the boxes should be updated even if they are paused
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully requested
- * @see livebox_refresh()
- */
-extern int livebox_refresh_group(const char *cluster, const char *category, int force);
-
-/**
- * @brief Refreshes a livebox.
- * @param[in] handler Handler of a livebox instance
- * @param[in] force 1 if the box should be updated even if it is paused
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully requested
- * @see livebox_refresh_group()
- */
-extern int livebox_refresh(struct livebox *handler, int force);
-
-/**
- * @brief Gets Pixmap Id of a livebox content.
- * @details This function doesn't guarantee the life-cycle of the pixmap.
- *   If the service provider destroyed the pixmap, you will not know about it.
- *   So you should validate it before accessing it.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval 0 If the pixmap is not created
- * @retval pixmap Pixmap Id need to be casted to (unsigned int) type
- * @see livebox_pd_pixmap()
- */
-extern int livebox_lb_pixmap(const struct livebox *handler);
-
-/**
- * @brief Gets Pixmap Id of a PD content.
- * @details This function doesn't guarantee the life-cycle of the pixmap.
- *   If the service provider destroyed the pixmap, you will not know about it.
- *   So you should validate it before accessing it.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval 0 If the pixmap is not created
- * @retval pixmap Pixmap Id need to be casted to (unsigned int) type
- * @see livebox_lb_pixmap()
- */
-extern int livebox_pd_pixmap(const struct livebox *handler);
-
-/**
- * @brief Acquires the pixmap of PD.
- * @details After acquiring the pixmap of PD, it will not be destroyed.
- *   So if the new update is comming with a new pixmap Id, you should release old pixmap manually.
- * @param[in] handler Handler of a livebox instance
- * @param[in] cb Result callback for acquiring request
- * @param[in] data Callback Data
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Failed to send a request to the service provider or there is critical error that is unrecoverable
- * @retval #LB_STATUS_SUCCESS Successfully requested to acquire the pixmap of PD
- * @see livebox_release_pd_pixmap()
- * @see livebox_acquire_lb_pixmap()
- * @see ret_cb_t
- */
-extern int livebox_acquire_pd_pixmap(struct livebox *handler, ret_cb_t cb, void *data);
-
-/**
- * @brief Releases the acquired pixmap ID.
- * @param[in] handler Handler of a livebox instance
- * @param[in] pixmap Pixmap Id to release it
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully released (request is sent)
- * @see livebox_acquire_pd_pixmap()
- * @see livebox_release_lb_pixmap()
- */
-extern int livebox_release_pd_pixmap(struct livebox *handler, int pixmap);
-
-/**
- * @brief Gets the PIXMAP of a livebox.
- * @details Even if a render process releases the pixmap, the pixmap will be kept before being released by livebox_release_lb_pixmap.
- *   You should release the pixmap manually.
- * @param[in] handler Handler of a livebox instance
- * @param[in] cb Callback function which will be called with result of acquiring lb pixmap
- * @param[in] data Callback data
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully requested
- * @pre Livebox service system should support the PIXMAP type buffer.
- *   The livebox should be designed to use the buffer (script type).
- * @see livebox_release_lb_pixmap()
- * @see livebox_acquire_pd_pixmap()
- * @see ret_cb_t
- */
-extern int livebox_acquire_lb_pixmap(struct livebox *handler, ret_cb_t cb, void *data);
-
-/**
- * @brief Releases the pixmap of a livebox.
- * @details After a client gets a new pixmap or does not need to keep the current pixmap anymore, use this function to release it.
- *   If there is no user for a given pixmap, the pixmap will be destroyed.
- * @param[in] handler Handler of a livebox instance
- * @param[in] pixmap Pixmap Id of given livebox handler
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @pre The pixmap should be acquired by livebox_acquire_lb_pixmap
- * @see livebox_acquire_lb_pixmap()
- * @see livebox_release_pd_pixmap()
- */
-extern int livebox_release_lb_pixmap(struct livebox *handler, int pixmap);
-
-/**
- * @brief Updates a visible state of the livebox.
- * @param[in] handler Handler of a livebox instance
- * @param[in] state Configure the current visible state of a livebox
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY
- * @retval #LB_STATUS_ERROR_PERMISSION
- * @retval #LB_STATUS_ERROR_ALREADY
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully done
- */
-extern int livebox_set_visibility(struct livebox *handler, enum livebox_visible_state state);
-
-/**
- * @brief Gets the current visible state of a livebox.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return livebox_visible_state
- * @retval #LB_SHOW Livebox is shown (Default state)
- * @retval #LB_HIDE Livebox is hidden, Update timer is not frozen (but a user cannot receive any updated events; a user should refresh(reload) the content of a livebox when a user make this show again)
- * @retval #LB_HIDE_WITH_PAUSE Livebox is hidden, it will pause the update timer, but if a livebox updates its contents, update event will occur
- * @retval #LB_VISIBLE_ERROR To enlarge the size of this enumeration type
- */
-extern enum livebox_visible_state livebox_visibility(struct livebox *handler);
-
-/**
- * @brief Sets an update mode of the current livebox.
- * @details If you set 1 for active update mode, you should get a buffer without updated event from provider.
- *   But if it is passive mode, you have to update content of a box when you get updated events.
- *   Default is Passive mode.
- * @param[in] handler Handler of a livebox instance
- * @param[in] active_update 1 means active update, 0 means passive update (default)
- * @param[in] cb Result callback function
- * @param[in] data Callback data
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_ERROR_BUSY
- * @retval #LB_STATUS_ERROR_PERMISSION
- * @retval #LB_STATUS_ERROR_ALREADY
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see ret_cb_t
- */
-extern int livebox_set_update_mode(struct livebox *handler, int active_update, ret_cb_t cb, void *data);
-
-/**
- * @brief Checks the active update mode of the given livebox.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return int
- * @retval 0 If passive mode
- * @retval 1 If active mode or error code
- */
-extern int livebox_is_active_update(struct livebox *handler);
-
-/**
- * @brief Syncs manually
- * param[in] handler Handler of a livebox instance
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return void
- * @retval #LB_STATUS_SUCCESS If success
- * @retval #LB_STATUS_ERROR_INVALID Invalid handle
- * @see livebox_set_manual_sync()
- * @see livebox_manual_sync()
- * @see livebox_sync_lb_fb()
- */
-extern int livebox_sync_pd_fb(struct livebox *handler);
-
-/**
- * @brief Syncs manually
- * @param[in] handler Handler of a livebox instance
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return void
- * @retval #LB_STATUS_SUCCESS If success
- * @retval #LB_STATUS_ERROR_INVALID Invalid handle
- * @see livebox_set_manual_sync()
- * @see livebox_manual_sync()
- * @see livebox_sync_pd_fb()
- */
-extern int livebox_sync_lb_fb(struct livebox *handler);
-
-/**
- * @brief Gets an alternative icon of the given livebox instance.
- * @details If the box should be represented as a shortcut icon, this function will get the alternative icon.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval address Absolute path of an alternative icon file
- * @retval @c NULL Livebox has no alternative icon file
- * @see livebox_alt_name()
- */
-extern const char *livebox_alt_icon(struct livebox *handler);
-
-/**
- * @brief Gets an alternative name of the given livebox instance.
- * @details If the box should be represented as a shortcut name, this function will get the alternative name.
- * @param[in] handler Handler of a livebox instance
- * @privlevel N/P
- * @return const char *
- * @retval name Alternative name of a livebox
- * @retval @c NULL Livebox has no alternative name
- * @see livebox_alt_icon()
- */
-extern const char *livebox_alt_name(struct livebox *handler);
-
-/**
- * @brief Gets a lock for a frame buffer.
- * @details This function should be used to prevent from rendering to the frame buffer while reading it.
- *   And the locking area should be short and must be released ASAP, or the render thread will be hanged.
- * @param[in] handler Handler of a livebox instance
- * @param[in] is_pd 1 for PD or 0
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see livebox_release_fb_lock()
- */
-extern int livebox_acquire_fb_lock(struct livebox *handler, int is_pd);
-
-/**
- * @brief Releases a lock of the frame buffer.
- * @details This function should be called ASAP after acquiring a lock of FB, or the render process will be blocked.
- * @param[in] handler Handler of a livebox instance
- * @param[in] is_pd 1 for PD or 0
- * @privlevel platform
- * @privileve %http://developer.samsung.com/privilege/core/dynamicbox.viewer
- * @return int
- * @retval #LB_STATUS_ERROR_FAULT Unrecoverable error occurred
- * @retval #LB_STATUS_ERROR_INVALID Invalid argument
- * @retval #LB_STATUS_SUCCESS Successfully done
- * @see livebox_acquire_fb_lock()
- */
-extern int livebox_release_fb_lock(struct livebox *handler, int is_pd);
-
-/**
- * @brief Sets options for controlling a livebox sub-system.
- * @details
- *   LB_OPTION_FRAME_DROP_FOR_RESIZE
- *     While resizing the box, viewer doesn't want to know the updated frames of an old size content anymore.
- *     In that case, turn this on, the provider will not send the updated event to the viewer about an old content.
- *     So the viewer can reduce its burden to update unnecessary frames.
- *   LB_OPTION_MANUAL_SYNC
- *     If you don't want to update frames automatically, or you want only reload the frames by your hands, (manually)
- *     Turn this on.
- *     After turnning it on, you should sync it using livebox_sync_pd_fb and livebox_sync_lb_pfb.
- *   LB_OPTION_SHARED_CONTENT
- *     If this option is turnned on, even though you create a new livebox,
- *     if there are already added same instances that have same contents, the instance will not be created again.
- *     Instead of creating a new instance, a viewer will provide an old instance with a new handle.
- * @param[in] option Option which will be affected by this call
- * @param[in] state New value for given option
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Unknown option
- * @retval #LB_STATUS_ERROR_FAULT Failed to change the state of option
- * @retval #LB_STATUS_SUCCESS Successfully changed
- * @see livebox_get_option()
- * @see livebox_sync_pd_fb()
- * @see livebox_sync_lb_fb()
- */
-extern int livebox_set_option(enum livebox_option_type option, int state);
-
-/**
- * @brief Gets options of a livebox sub-system.
- * @param[in] option Type of option
- * @privlevel N/P
- * @return int
- * @retval #LB_STATUS_ERROR_INVALID Invalid option
- * @retval #LB_STATUS_ERROR_FAULT Failed to get option
- * @retval >=0 Value of given option (must be >=0)
- * @see livebox_set_option()
- */
-extern int livebox_option(enum livebox_option_type option);
-
-
-/**
- * @brief Set a handler for launching an app for auto-launch feature
- * @details If a user clicks a box, and the box uses auto-launch option, the launcher_handler will be called.
- * @param[in] launch_handler Handler for launching an app manually
- * @param[in] data Callback data which will be given a data for launch_handler
- * @privlevel N/P
- * @return int type
- * @retval #LB_STATUS_SUCCESS Succeed to set new handler. there is no other cases
- */
-extern int livebox_set_auto_launch_handler(int (*launch_handler)(struct livebox *handler, const char *appid, void *data), void *data);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/include/livebox_internal.h b/include/livebox_internal.h
deleted file mode 100644 (file)
index 2faa3c0..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern void lb_invoke_event_handler(struct livebox *handler, enum livebox_event_type event);
-extern void lb_invoke_fault_handler(enum livebox_fault_type type, const char *pkgname, const char *filename, const char *function);
-
-extern struct livebox_common *lb_find_common_handle(const char *pkgname, const char *filename);
-extern struct livebox *lb_new_livebox(const char *pkgname, const char *id, double timestamp, const char *cluster, const char *category);
-extern struct livebox_common *lb_find_common_handle_by_timestamp(double timestamp);
-
-extern int lb_set_group(struct livebox_common *common, const char *cluster, const char *category);
-extern void lb_set_size(struct livebox_common *common, int w, int h);
-extern void lb_set_pdsize(struct livebox_common *common, int w, int h);
-extern void lb_set_default_pdsize(struct livebox_common *common, int w, int h);
-extern int lb_set_content(struct livebox_common *common, const char *content);
-extern int lb_set_title(struct livebox_common *handler, const char *title);
-extern void lb_set_auto_launch(struct livebox_common *handler, const char *auto_launch);
-extern void lb_set_id(struct livebox_common *handler, const char *id);
-extern void lb_set_size_list(struct livebox_common *handler, int size_list);
-extern void lb_set_priority(struct livebox_common *handler, double priority);
-extern int lb_set_lb_fb(struct livebox_common *handler, const char *filename);
-extern int lb_set_pd_fb(struct livebox_common *handler, const char *filename);
-extern struct fb_info *lb_get_pd_fb(struct livebox_common *handler);
-extern struct fb_info *lb_get_lb_fb(struct livebox_common *handler);
-extern void lb_set_user(struct livebox_common *handler, int user);
-extern void lb_set_pinup(struct livebox_common *handler, int pinup);
-extern void lb_set_text_lb(struct livebox_common *handler);
-extern void lb_set_text_pd(struct livebox_common *handler);
-extern int lb_text_lb(struct livebox_common *handler);
-extern int lb_text_pd(struct livebox_common *handler);
-extern void lb_set_period(struct livebox_common *handler, double period);
-extern void lb_set_update_mode(struct livebox_common *handler, int active_mode);
-extern void lb_set_filename(struct livebox_common *handler, const char *filename);
-extern void lb_set_alt_icon(struct livebox_common *handler, const char *icon);
-extern void lb_set_alt_name(struct livebox_common *handle, const char *name);
-extern int lb_destroy_lock_file(struct livebox_common *common, int is_pd);
-extern int lb_create_lock_file(struct livebox_common *common, int is_pd);
-extern int lb_destroy_common_handle(struct livebox_common *common);
-extern struct livebox_common *lb_create_common_handle(struct livebox *handle, const char *pkgname, const char *cluster, const char *category);
-extern int lb_sync_pd_fb(struct livebox_common *common);
-extern int lb_sync_lb_fb(struct livebox_common *common);
-extern int lb_common_unref(struct livebox_common *common, struct livebox *handle);
-extern int lb_common_ref(struct livebox_common *common, struct livebox *handle);
-
-extern struct livebox *lb_ref(struct livebox *handler);
-extern struct livebox *lb_unref(struct livebox *handler, int destroy_common);
-extern int lb_send_delete(struct livebox *handler, int type, ret_cb_t cb, void *data);
-extern int lb_delete_all(void);
-
-enum lb_type { /*!< Must have to be sync with data-provider-master */
-       _LB_TYPE_NONE = 0x0,
-       _LB_TYPE_SCRIPT,
-       _LB_TYPE_FILE,
-       _LB_TYPE_TEXT,
-       _LB_TYPE_BUFFER,
-       _LB_TYPE_ELEMENTARY
-};
-
-enum pd_type { /*!< Must have to be sync with data-provider-master */
-       _PD_TYPE_NONE = 0x0,
-       _PD_TYPE_SCRIPT,
-       _PD_TYPE_TEXT,
-       _PD_TYPE_BUFFER,
-       _PD_TYPE_ELEMENTARY
-};
-
-enum livebox_state {
-       CREATE = 0xBEEFbeef,
-       DELETE = 0xDEADdead, /* Delete only for this client */
-       DESTROYED = 0x00DEAD00
-};
-
-struct livebox_common {
-       enum livebox_state state;
-
-       struct dlist *livebox_list;
-       int refcnt;
-
-       char *cluster;
-       char *category;
-
-       char *pkgname;
-       char *id;
-
-       char *content;
-       char *title;
-       char *filename;
-
-       double timestamp;
-
-       struct alt_info {
-               char *icon;
-               char *name;
-       } alt;
-
-       enum livebox_delete_type delete_type;
-
-       int is_user;
-       int is_pd_created;
-       int is_pinned_up;
-       int is_active_update;
-       enum livebox_visible_state visible;
-
-       struct {
-               enum lb_type type;
-               struct fb_info *fb;
-
-               int size_list;
-
-               int width;
-               int height;
-               double priority;
-
-               char *auto_launch;
-               double period;
-               int pinup_supported;
-               int mouse_event;
-
-               /* For the filtering event */
-               double x;
-               double y;
-               char *lock;
-               int lock_fd;
-       } lb;
-
-       struct {
-               enum pd_type type;
-               struct fb_info *fb;
-
-               int width;
-               int height;
-
-               int default_width;
-               int default_height;
-
-               /* For the filtering event */
-               double x;
-               double y;
-               char *lock;
-               int lock_fd;
-       } pd;
-
-       int nr_of_sizes;
-
-       struct requested_flag {
-               unsigned int created:1;
-               unsigned int deleted:1;
-               unsigned int pinup:1;
-               unsigned int group_changed:1;
-               unsigned int period_changed:1;
-               unsigned int size_changed:1;
-               unsigned int pd_created:1;
-               unsigned int pd_destroyed:1;
-               unsigned int update_mode:1;
-               unsigned int access_event:1;
-               unsigned int key_event:1;
-
-               /*!
-                * \note
-                * Reserved
-                */
-               unsigned int reserved:21;
-       } request;
-};
-
-struct job_item {
-       struct livebox *handle;
-       ret_cb_t cb;
-       int ret;
-       void *data;
-};
-
-struct livebox {
-       enum livebox_state state;
-
-       int refcnt;
-       int paused_updating;
-
-       enum livebox_visible_state visible;
-       struct livebox_common *common;
-
-       void *data;
-
-       struct callback_table {
-               struct livebox_script_operators lb_ops;
-               struct livebox_script_operators pd_ops;
-
-               struct created {
-                       ret_cb_t cb;
-                       void *data;
-               } created;
-
-               struct deleted {
-                       ret_cb_t cb;
-                       void *data;
-               } deleted;
-
-               struct pinup {
-                       ret_cb_t cb;
-                       void *data;
-               } pinup;
-
-               struct group_changed {
-                       ret_cb_t cb;
-                       void *data;
-               } group_changed;
-
-               struct period_changed {
-                       ret_cb_t cb;
-                       void *data;
-               } period_changed;
-
-               struct size_changed {
-                       ret_cb_t cb;
-                       void *data;
-               } size_changed;
-
-               struct pd_created {
-                       ret_cb_t cb;
-                       void *data;
-               } pd_created;
-
-               struct pd_destroyed {
-                       ret_cb_t cb;
-                       void *data;
-               } pd_destroyed;
-
-               struct update_mode {
-                       ret_cb_t cb;
-                       void *data;
-               } update_mode;
-
-               struct access_event {
-                       ret_cb_t cb;
-                       void *data;
-               } access_event;
-
-               struct key_event {
-                       ret_cb_t cb;
-                       void *data;
-               } key_event;
-       } cbs;
-};
-
-/* End of a file */
index d850bfd..7dde9ed 100644 (file)
  * limitations under the License.
  */
 
-extern int master_rpc_async_request(struct livebox *handler, struct packet *packet, int urgent, void (*ret_cb)(struct livebox *handler, const struct packet *result, void *data), void *data);
+extern int master_rpc_async_request(struct dynamicbox *handler, struct packet *packet, int urgent, void (*ret_cb)(struct dynamicbox *handler, const struct packet *result, void *data), void *data);
 extern int master_rpc_sync_request(struct packet *packet);
 extern void master_rpc_check_and_fire_consumer(void);
-extern int master_rpc_request_only(struct livebox *handler, struct packet *packet);
+extern int master_rpc_request_only(struct dynamicbox *handler, struct packet *packet);
 extern int master_rpc_clear_fault_package(const char *pkgname);
 extern int master_rpc_clear_all_request(void);
 
diff --git a/include/provider_cmd_list.h b/include/provider_cmd_list.h
deleted file mode 100644 (file)
index 91e5771..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-// provider -> master
-// master -> client
-#define CMD_UPDATED            0x00000001
-#define CMD_LB_UPDATED         0x00000001      // same with UPDATED
-#define CMD_DESC_UPDATED       0x00000101
-#define CMD_PD_UPDATED         0x00000101      // same with DESC_UPDATED
-#define CMD_EXTRA_INFO         0x00000201
-#define CMD_DELETED            0x00000301
-#define CMD_FAULTED            0x00000401
-#define CMD_FAULT_PACKAGE      0x00000401
-#define CMD_SCROLL             0x00000501
-#define CMD_LB_UPDATE_BEGIN    0x00000601
-#define CMD_LB_UPDATE_END      0x00000701
-#define CMD_PD_UPDATE_BEGIN    0x00000801
-#define CMD_PD_UPDATE_END      0x00000901
-#define CMD_ACCESS_STATUS      0x00000A01
-#define CMD_KEY_STATUS         0x00000B01
-#define CMD_CLOSE_PD           0x00000C01
-
-// provider -> master
-// Upper list must be sync'd with client(viewer)'s result event table
-#define CMD_CALL               0x00000D01
-#define CMD_RET                        0x00000E01
-#define CMD_ACQUIRE_BUFFER     0x00000F01
-#define CMD_RESIZE_BUFFER      0x00001001
-#define CMD_RELEASE_BUFFER     0x00001101
-#define CMD_HELLO              0x00001201
-#define CMD_PING               0x00001301
-#define CMD_CTRL               0x00001401
-
-// Following list is only for the viewer
-// master -> client
-#define CMD_PD_CREATED         0x00000D01
-#define CMD_PD_DESTROYED       0x00000E01
-#define CMD_CREATED            0x00000F01
-#define CMD_GROUP_CHANGED      0x00001001
-#define CMD_PERIOD_CHANGED     0x00001101
-#define CMD_SIZE_CHANGED       0x00001201
-#define CMD_RESULT_PINUP       0x00001301      // viewer
-#define CMD_RESULT_UPDATE_MODE 0x00001401      // viewer
-
-// Following list should be started after the common list of client_cmd_list
-// master -> provider
-#define CMD_PD_SHOW            0x00003701
-#define CMD_PD_HIDE            0x00003801
-#define CMD_LB_PAUSE           0x00003901
-#define CMD_LB_RESUME          0x00003A01
-#define CMD_SCRIPT             0x00003B01
-#define CMD_RENEW              0x00003C01
-#define CMD_PINUP              0x00003D01
-#define CMD_UPDATE_CONTENT     0x00003E01
-#define CMD_PAUSE              0x00003F01
-#define CMD_RESUME             0x00004001
-#define CMD_DISCONNECT         0x00004101
-
-// Live Info -> master
-#define CMD_INFO_HELLO         0x00000001
-#define CMD_INFO_SLAVE_LIST    0x00000101
-#define CMD_INFO_PKG_LIST      0x00000201
-#define CMD_INFO_INST_LIST     0x00000301
-#define CMD_INFO_SLAVE_CTRL    0x00000401
-#define CMD_INFO_PKG_CTRL      0x00000501
-#define CMD_INFO_MASTER_CTRL   0x00000601
-
-// client -> master
-// master -> provider
-#define CMD_PD_MOUSE_MOVE              0x00000001
-#define CMD_LB_MOUSE_MOVE              0x00000101
-#define CMD_PD_MOUSE_DOWN              0x00000201
-#define CMD_PD_MOUSE_UP                        0x00000301
-#define CMD_LB_MOUSE_DOWN              0x00000401
-#define CMD_LB_MOUSE_UP                        0x00000501
-#define CMD_PD_MOUSE_ENTER             0x00000601
-#define CMD_PD_MOUSE_LEAVE             0x00000701
-#define CMD_LB_MOUSE_ENTER             0x00000801
-#define CMD_LB_MOUSE_LEAVE             0x00000901
-#define CMD_LB_MOUSE_ON_SCROLL         0x00000A01
-#define CMD_LB_MOUSE_OFF_SCROLL                0x00000B01
-#define CMD_PD_MOUSE_ON_SCROLL         0x00000C01
-#define CMD_PD_MOUSE_OFF_SCROLL                0x00000D01
-#define CMD_LB_MOUSE_ON_HOLD           0x00000E01
-#define CMD_LB_MOUSE_OFF_HOLD          0x00000F01
-#define CMD_PD_MOUSE_ON_HOLD           0x00001001
-#define CMD_PD_MOUSE_OFF_HOLD          0x00001101
-#define CMD_CLICKED                    0x00001201
-#define CMD_TEXT_SIGNAL                        0x00001301
-#define CMD_DELETE                     0x00001401
-#define CMD_RESIZE                     0x00001501
-#define CMD_NEW                                0x00001601
-#define CMD_SET_PERIOD                 0x00001701
-#define CMD_CHANGE_GROUP               0x00001801
-#define CMD_PD_MOVE                    0x00001901
-#define CMD_PD_ACCESS_HL               0x00001A01
-#define CMD_PD_ACCESS_ACTIVATE         0x00001B01
-#define CMD_PD_ACCESS_ACTION           0x00001C01
-#define CMD_PD_ACCESS_SCROLL           0x00001D01
-#define CMD_PD_ACCESS_VALUE_CHANGE     0x00001E01
-#define CMD_PD_ACCESS_MOUSE            0x00001F01
-#define CMD_PD_ACCESS_BACK             0x00002001
-#define CMD_PD_ACCESS_OVER             0x00002101
-#define CMD_PD_ACCESS_READ             0x00002201
-#define CMD_PD_ACCESS_ENABLE           0x00002301
-#define CMD_LB_ACCESS_HL               0x00002401
-#define CMD_LB_ACCESS_ACTIVATE         0x00002501
-#define CMD_LB_ACCESS_ACTION           0x00002601
-#define CMD_LB_ACCESS_SCROLL           0x00002701
-#define CMD_LB_ACCESS_VALUE_CHANGE     0x00002801
-#define CMD_LB_ACCESS_MOUSE            0x00002901
-#define CMD_LB_ACCESS_BACK             0x00002A01
-#define CMD_LB_ACCESS_OVER             0x00002B01
-#define CMD_LB_ACCESS_READ             0x00002C01
-#define CMD_LB_ACCESS_ENABLE           0x00002D01
-#define CMD_LB_KEY_DOWN                        0x00002E01
-#define CMD_LB_KEY_UP                  0x00002F01
-#define CMD_LB_KEY_FOCUS_IN            0x00003001
-#define CMD_LB_KEY_FOCUS_OUT           0x00003101
-#define CMD_PD_KEY_DOWN                        0x00003201
-#define CMD_PD_KEY_UP                  0x00003301
-#define CMD_PD_KEY_FOCUS_IN            0x00003401
-#define CMD_PD_KEY_FOCUS_OUT           0x00003501
-#define CMD_UPDATE_MODE                        0x00003601
-
-// client -> master
-#define CMD_LB_MOUSE_SET               0x00003701
-#define CMD_LB_MOUSE_UNSET             0x00003801
-#define CMD_PD_MOUSE_SET               0x00003901
-#define CMD_PD_MOUSE_UNSET             0x00003A01
-#define CMD_CHANGE_VISIBILITY          0x00003B01
-#define CMD_LB_ACQUIRE_PIXMAP          0x00003C01
-#define CMD_LB_RELEASE_PIXMAP          0x00003D01
-#define CMD_PD_ACQUIRE_PIXMAP          0x00003E01
-#define CMD_PD_RELEASE_PIXMAP          0x00003F01
-#define CMD_ACQUIRE                    0x00004001
-#define CMD_RELEASE                    0x00004101
-#define CMD_PINUP_CHANGED              0x00004201
-#define CMD_CREATE_PD                  0x00004301
-#define CMD_DESTROY_PD                 0x00004401
-#define CMD_ACTIVATE_PACKAGE           0x00004501
-#define CMD_SUBSCRIBE                  0x00004601
-#define CMD_UNSUBSCRIBE                        0x00004701
-#define CMD_DELETE_CLUSTER             0x00004801
-#define CMD_DELETE_CATEGORY            0x00004901
-#define CMD_REFRESH_GROUP              0x00004A01
-#define CMD_UPDATE                     0x00004B01
-#define CMD_LB_KEY_SET                 0x00004C01
-#define CMD_LB_KEY_UNSET               0x00004D01
-#define CMD_PD_KEY_SET                 0x00004E01
-#define CMD_PD_KEY_UNSET               0x00004F01
-#define CMD_CLIENT_PAUSED              0x00005001
-#define CMD_CLIENT_RESUMED             0x00005101
-
-// service -> master
-#define CMD_SERVICE_UPDATE             0x00000001
-#define CMD_SERVICE_CHANGE_PERIOD      0x00000101
-#define CMD_SERVICE_INST_CNT           0x00000201
index b66b542..071bc63 100644 (file)
@@ -17,7 +17,6 @@
 extern int util_check_extension(const char *filename, const char *check_ptr);
 extern double util_timestamp(void);
 extern const char *util_basename(const char *name);
-extern int util_validate_livebox_package(const char *pkgname);
 extern const char *util_uri_to_path(const char *uri);
 extern int util_unlink(const char *filename);
 
index 9be5a14..b5dd39c 100644 (file)
@@ -1,48 +1,47 @@
-PROJECT(live-viewer C)
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED
-       capi-appfw-application
-       capi-appfw-app-manager
-       ail
-       bundle
-       dlog
-       elementary
-       ecore-x
-       appcore-efl
-       livebox-viewer
-       livebox-service
-)
-
-FOREACH(flag ${pkgs_CFLAGS})
-       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wall -Werror -Winline -g")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
-
-SET(PKGROOT "/opt/usr/apps/live.viewer")
+PROJECT(w-add-viewer C)
+
+SET(PACKAGE ${PROJECT_NAME})
+SET(VENDOR "samsung")
+SET(PKGNAME "com.${VENDOR}.${PACKAGE}")
+SET(PREFIX "/usr/apps/${PKGNAME}")
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(USRDATADIR "/usr/apps/com.${VENDOR}.${PACKAGE}/data")
+SET(DATADIR "/opt/usr/apps/com.${VENDOR}.${PACKAGE}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+#SET(ICONDIR "/usr/share/icons/default/small")
+SET(IMAGEDIR "${RESDIR}/images/${PACKAGE}")
+SET(SOUNDDIR "${RESDIR}/sound/${PACKAGE}")
+SET(EDJDIR "${RESDIR}/edje")
+SET(LIBEXECDIR "${PREFIX}/libexec")
+
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
 ADD_DEFINITIONS("-DNDEBUG")
-ADD_DEFINITIONS("-DPKGROOT=\"${PKGROOT}\"")
-#ADD_DEFINITIONS("-DFLOG")
-ADD_DEFINITIONS("-DLOG_TAG=\"${PROJECT_NAME}\"")
-ADD_DEFINITIONS(${pkgs_CFLAGS})
-ADD_DEFINITIONS(${pkgs_LDFLAGS})
-
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
-
-ADD_EXECUTABLE(${PROJECT_NAME}
-       src/main.c
-       src/dlist.c
-       src/live_scroller.c
-       src/util.c
-       src/scroller.c
-       src/lb.c
-)
-
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${PKGROOT}/bin)
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/live.viewer.xml DESTINATION /opt/share/packages)
+ADD_DEFINITIONS("-DPATH_MAX=256")
+
+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_SUBDIRECTORY(dbox.calendar)
+ADD_SUBDIRECTORY(viewer)
+ADD_SUBDIRECTORY(dbox.app)
+ADD_SUBDIRECTORY(dbox.video)
+ADD_SUBDIRECTORY(dbox.scroller)
+ADD_SUBDIRECTORY(dbox.app-dbox.only)
+ADD_SUBDIRECTORY(dbox.text)
+ADD_SUBDIRECTORY(dbox.transit)
+ADD_SUBDIRECTORY(dbox.image)
+ADD_SUBDIRECTORY(dbox.simple)
+ADD_SUBDIRECTORY(dbox.win)
+#ADD_SUBDIRECTORY(dbox.app-template)
+
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION /usr/share/license RENAME ${PKGNAME})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PKGNAME}.xml DESTINATION /usr/share/packages)
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${PKGNAME}.rule DESTINATION /etc/smack/accesses2.d)
 
-ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/LICENSE b/live.viewer/LICENSE
new file mode 100644 (file)
index 0000000..571fe79
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices 
+     within Derivative Works that You distribute, alongside or as an addendum 
+     to the NOTICE text from the Work, provided that such additional attribution 
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/live.viewer/NOTICE b/live.viewer/NOTICE
new file mode 100644 (file)
index 0000000..62be933
--- /dev/null
@@ -0,0 +1,2 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
diff --git a/live.viewer/com.samsung.w-add-viewer.rule b/live.viewer/com.samsung.w-add-viewer.rule
new file mode 100644 (file)
index 0000000..b07c129
--- /dev/null
@@ -0,0 +1,90 @@
+#subject
+com.samsung.w-add-viewer device::app_logging w
+com.samsung.w-add-viewer system::use_internet r
+com.samsung.w-add-viewer net-config r
+com.samsung.w-add-viewer xorg rw
+com.samsung.w-add-viewer isf rwx
+com.samsung.w-add-viewer sound_server rw
+com.samsung.w-add-viewer syspopup::db rw
+com.samsung.w-add-viewer dbus rwx
+com.samsung.w-add-viewer pulseaudio rwxat
+com.samsung.w-add-viewer ail::db rw
+com.samsung.w-add-viewer connman r
+com.samsung.w-add-viewer system rwx
+com.samsung.w-add-viewer immvibed rw
+com.samsung.w-add-viewer svi-data rx
+com.samsung.w-add-viewer com.samsung.clocksetting rwx
+com.samsung.w-add-viewer com.samsung.clocksetting::default-resources rx
+com.samsung.w-add-viewer e17 rx
+com.samsung.w-add-viewer system::vconf rwx
+com.samsung.w-add-viewer system::vconf_setting rw
+com.samsung.w-add-viewer system::vconf_inhouse rw
+com.samsung.w-add-viewer system::vconf_multimedia rw
+com.samsung.w-add-viewer deviced rwx
+com.samsung.w-add-viewer deviced::display rw
+com.samsung.w-add-viewer data-provider-master::data x
+com.samsung.w-add-viewer testmode::vconf r
+com.samsung.w-add-viewer data-provider-master::db rw
+com.samsung.w-add-viewer data-provider-master::share rwxat
+com.samsung.w-add-viewer data-provider-master::data rx
+com.samsung.w-add-viewer data-provider-master rw
+
+com.samsung.w-add-viewer pkgmgr::db rwx
+com.samsung.w-add-viewer efreet rwx
+com.samsung.w-add-viewer litewhome rwx
+
+com.samsung.w-add-viewer aul::launch x
+com.samsung.w-add-viewer aul::terminate x
+
+#object
+aul com.samsung.w-add-viewer rx
+dbus com.samsung.w-add-viewer rwx
+system com.samsung.w-add-viewer w
+com.samsung.data-provider-slave com.samsung.w-add-viewer rwx
+
+#ug include
+com.samsung.w-add-viewer app.default include
+
+com.samsung.w-add-viewer.app app.default include
+com.samsung.w-add-viewer.app device::app_logging w
+com.samsung.w-add-viewer.app system::use_internet r
+com.samsung.w-add-viewer.app net-config r
+com.samsung.w-add-viewer.app xorg rw
+com.samsung.w-add-viewer.app isf rwx
+com.samsung.w-add-viewer.app sound_server rw
+com.samsung.w-add-viewer.app syspopup::db rw
+com.samsung.w-add-viewer.app dbus rwx
+com.samsung.w-add-viewer.app pulseaudio rwxat
+com.samsung.w-add-viewer.app ail::db rw
+com.samsung.w-add-viewer.app connman r
+com.samsung.w-add-viewer.app system rwx
+com.samsung.w-add-viewer.app immvibed rw
+com.samsung.w-add-viewer.app svi-data rx
+com.samsung.w-add-viewer.app com.samsung.clocksetting rwx
+com.samsung.w-add-viewer.app com.samsung.clocksetting::default-resources rx
+com.samsung.w-add-viewer.app e17 rx
+com.samsung.w-add-viewer.app system::vconf rwx
+com.samsung.w-add-viewer.app system::vconf_setting rw
+com.samsung.w-add-viewer.app system::vconf_inhouse rw
+com.samsung.w-add-viewer.app system::vconf_multimedia rw
+com.samsung.w-add-viewer.app deviced rwx
+com.samsung.w-add-viewer.app deviced::display rw
+com.samsung.w-add-viewer.app data-provider-master::data x
+com.samsung.w-add-viewer.app testmode::vconf r
+com.samsung.w-add-viewer.app data-provider-master::db rw
+com.samsung.w-add-viewer.app data-provider-master::share rwxat
+com.samsung.w-add-viewer.app data-provider-master::data rx
+com.samsung.w-add-viewer.app data-provider-master rw
+
+com.samsung.w-add-viewer.app pkgmgr::db rwx
+com.samsung.w-add-viewer.app efreet rwx
+com.samsung.w-add-viewer.app litewhome rwx
+
+com.samsung.w-add-viewer.app aul::launch x
+com.samsung.w-add-viewer.app aul::terminate x
+
+#object
+aul com.samsung.w-add-viewer.app rx
+dbus com.samsung.w-add-viewer.app rwx
+system com.samsung.w-add-viewer.app w
+com.samsung.data-provider-slave com.samsung.w-add-viewer.app rwx
diff --git a/live.viewer/com.samsung.w-add-viewer.xml b/live.viewer/com.samsung.w-add-viewer.xml
new file mode 100644 (file)
index 0000000..2ee890b
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="com.samsung.w-add-viewer" version="0.1.5" install-location="internal-only">
+       <label>Add Viewer</label>
+       <author email="gildong.hong@samsung.com" href="www.samsung.com">GilDong Hong</author>
+       <description>w-add-viewer Application</description>
+
+       <!-- This should be comes first to detected by WMS as a clock app -->
+       <ui-application appid="com.samsung.w-add-viewer.dbox.clock" exec="/usr/apps/com.samsung.w-add-viewer/bin/provider.dbox.app" nodisplay="true" multiple="false" type="capp" taskmanage="false">
+               <category name="com.samsung.wmanager.WATCH_CLOCK"></category>
+               <label>DBox Clock Sample</label>
+               <icon>com.samsung.w-add-viewer.dbox.clock</icon>
+       </ui-application>
+
+       <ui-application appid="com.samsung.w-add-viewer.app" exec="/usr/apps/com.samsung.w-add-viewer/bin/provider.dbox.app" nodisplay="true" multiple="false" type="capp" taskmanage="false">
+               <label>DBox Sample App</label>
+               <icon>com.samsung.w-add-viewer.dbox.app</icon>
+       </ui-application>
+
+       <!-- Main application -->
+       <ui-application appid="com.samsung.w-add-viewer" exec="/usr/apps/com.samsung.w-add-viewer/bin/w-add-viewer" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+               <label>Add Viewer</label>
+               <icon>com.samsung.w-add-viewer</icon>
+       </ui-application>
+
+       <dynamicbox appid="com.samsung.calendar.icon" primary="false" network="false" timeout="60" period="60" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.calendar.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Calendar DBox</label>
+               <label xml:lang="ko-kr">캘린더</label>
+               <content>This is a default calendar data</content>
+               <icon>/usr/share/icons/default/small/com.samsung.calendar.icon.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="image" mouse_event="false" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.dbox" primary="false" network="false" timeout="60" period="0" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Buffer DBox</label>
+               <label xml:lang="ko-kr">REPLACE_THIS_WITH_YOUR_LIVEBOX_APPNAME_IN_KR</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.dbox.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.img" primary="false" network="false" timeout="60" period="5" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.img.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Image DBox</label>
+               <label xml:lang="ko-kr">이미지샘플</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.img.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="image" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.video" primary="false" network="false" timeout="60" period="0" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.video.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Video DBox</label>
+               <label xml:lang="ko-kr">비디오샘플</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.video.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.scroller" primary="false" network="false" timeout="60" period="0" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.scroller.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Winset DBox</label>
+               <label xml:lang="ko-kr">윈셋샘플</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.scroller.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.simple" primary="false" network="false" timeout="60" period="0" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.simple.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Simple DBox</label>
+               <label xml:lang="ko-kr">심플박스</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.simple.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.transit" primary="false" network="false" timeout="60" period="0" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.transit.so" nodisplay="false" script="edje" pinup="false" secured="false" abi="c">
+               <label>Transit DBox</label>
+               <label xml:lang="ko-kr">트랜지션샘플</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.transit.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.app" primary="false" network="false" timeout="60" period="0" nodisplay="false" script="edje" pinup="false" secured="false" abi="app">
+               <label>Standalone DBox</label>
+               <label xml:lang="ko-kr">앱DBox</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.app.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="/usr/share/icons/default/small/com.samsung.w-add-viewer.dbox.app.png">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.clock" primary="true" network="false" timeout="60" period="0" nodisplay="true" script="edje" pinup="false" secured="false" abi="app">
+               <label>Clock DBox</label>
+               <category name="com.samsung.wmanager.WATCH_CLOCK"></category>
+               <label xml:lang="ko-kr">샘플시계</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.clock.png</icon>
+               <box type="buffer" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="/usr/share/icons/default/small/com.samsung.w-add-viewer.dbox.clock.png">4x4</size>
+               </box>
+       </dynamicbox>
+       <dynamicbox appid="com.samsung.w-add-viewer.text" primary="false" network="false" timeout="60" period="10" libexec="/usr/apps/com.samsung.w-add-viewer/libexec/libcom.samsung.w-add-viewer.dbox.text.so" nodisplay="false" script="dali" pinup="false" secured="false" abi="c">
+               <label>Text(script) DBox</label>
+               <label xml:lang="ko-kr">텍스트박스</label>
+               <icon>/usr/share/icons/default/small/com.samsung.w-add-viewer.text.png</icon>
+               <category name="http://tizen.org/dynamicbox/default"></category>
+               <box type="text" mouse_event="true" touch_effect="false">
+                       <!-- Please update this. Update the supported size list for your box -->
+                       <size preview="REPLACE_THIS_WITH_PREVIEW_IMAGE_FILE">4x4</size>
+                       <script src="/usr/apps/com.samsung.w-add-viewer/shared/script/text.dali" group="default" />
+               </box>
+       </dynamicbox>
+</manifest>
diff --git a/live.viewer/dbox.app-dbox.only/CMakeLists.txt b/live.viewer/dbox.app-dbox.only/CMakeLists.txt
new file mode 100644 (file)
index 0000000..af2e15c
--- /dev/null
@@ -0,0 +1,43 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(provider.dbox.app-dbox C)
+
+SET(SRCS
+       src/main.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(dbox_pkgs REQUIRED
+       capi-appfw-application
+       elementary
+       dlog
+       dynamicbox_service
+       dynamicbox_provider
+       dynamicbox_provider_app
+       dynamicbox
+       vconf
+)
+
+FOREACH(flag ${dbox_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -Wall")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -Wall")
+
+INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/include")
+
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_APP_ONLY\"")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${dbox_pkgs_LDFLAGS} "-lm")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+#install application HOME directory
+ADD_SUBDIRECTORY(data)
diff --git a/live.viewer/dbox.app-dbox.only/include/instance.h b/live.viewer/dbox.app-dbox.only/include/instance.h
new file mode 100644 (file)
index 0000000..8aba969
--- /dev/null
@@ -0,0 +1,18 @@
+struct instance;
+
+extern struct instance *instance_create(const char *id, const char *content, int w, int h);
+extern int instance_destroy(struct instance *inst);
+
+extern struct instance *instance_find(const char *id);
+
+extern int instance_set_size_by_id(const char *id, int w, int h);
+extern int instance_set_size_by_handle(struct instance *handle, int w, int h);
+
+extern int instance_get_size_by_id(const char *id, int *w, int *h);
+extern int instance_get_size_by_handle(struct instance *handle, int *w, int *h);
+
+extern int instance_set_data(struct instance *inst, void *data);
+extern void *instance_data(struct instance *inst);
+
+extern int instance_crawling(int (*cb)(struct instance *inst, void *data), void *data);
+/* End of a file */
diff --git a/live.viewer/dbox.app-dbox.only/src/instance.c b/live.viewer/dbox.app-dbox.only/src/instance.c
new file mode 100644 (file)
index 0000000..f1a0b25
--- /dev/null
@@ -0,0 +1,143 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <Eina.h>
+
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include "instance.h"
+
+struct instance {
+       char *id;
+       char *content;
+       int w;
+       int h;
+       void *data;
+};
+
+static struct info {
+       Eina_List *inst_list;
+} s_info = {
+       .inst_list = NULL,
+};
+
+struct instance *instance_create(const char *id, const char *content, int w, int h)
+{
+       struct instance *inst;
+
+       inst = calloc(1, sizeof(*inst));
+       if (!inst) {
+               return NULL;
+       }
+
+       inst->id = strdup(id);
+       if (!inst->id) {
+               free(inst);
+               return NULL;
+       }
+
+       inst->w = w;
+       inst->h = h;
+
+       s_info.inst_list = eina_list_append(s_info.inst_list, inst);
+
+       return inst;
+}
+
+int instance_destroy(struct instance *inst)
+{
+       s_info.inst_list = eina_list_remove(s_info.inst_list, inst);
+       free(inst->id);
+       free(inst);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+struct instance *instance_find(const char *id)
+{
+       Eina_List *l;
+       struct instance *inst;
+
+       if (!id) {
+               return NULL;
+       }
+
+       EINA_LIST_FOREACH(s_info.inst_list, l, inst) {
+               if (!strcmp(inst->id, id)) {
+                       return inst;
+               }
+       }
+
+       return NULL;
+}
+
+int instance_set_size_by_id(const char *id, int w, int h)
+{
+       struct instance *inst;
+
+       inst = instance_find(id);
+       if (!inst) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return instance_set_size_by_handle(inst, w, h);
+}
+
+int instance_set_size_by_handle(struct instance *inst, int w, int h)
+{
+       inst->w = w;
+       inst->h = h;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int instance_get_size_by_id(const char *id, int *w, int *h)
+{
+       struct instance *inst;
+
+       inst = instance_find(id);
+       if (!inst) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return instance_get_size_by_handle(inst, w, h);
+}
+
+int instance_get_size_by_handle(struct instance *inst, int *w, int *h)
+{
+       *w = inst->w;
+       *h = inst->h;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int instance_set_data(struct instance *inst, void *data)
+{
+       inst->data = data;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void *instance_data(struct instance *inst)
+{
+       return inst->data;
+}
+
+int instance_crawling(int (*cb)(struct instance *inst, void *data), void *data)
+{
+       Eina_List *l;
+       Eina_List *n;
+       struct instance *inst;
+       int cnt = 0;
+
+       EINA_LIST_FOREACH_SAFE(s_info.inst_list, l, n, inst) {
+               if (cb(inst, data) < 0) {
+                       break;
+               }
+               cnt++;
+       }
+
+       return cnt;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.app-dbox.only/src/main.c b/live.viewer/dbox.app-dbox.only/src/main.c
new file mode 100644 (file)
index 0000000..7399fe3
--- /dev/null
@@ -0,0 +1,322 @@
+#include <Elementary.h>
+
+#include <app.h>
+#include <dlog.h>
+#include <vconf.h>
+
+#include <dynamicbox.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
+
+#include <dynamicbox_provider_app.h>
+
+struct dynamicbox_data {
+       Evas_Object *win;
+       Evas_Object *bg;
+};
+
+static int dbox_create(const char *id, const char *content, int w, int h, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+       Evas_Object *tmp_parent;
+
+       dbox_data = calloc(1, sizeof(*dbox_data));
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       tmp_parent = dynamicbox_get_evas_object(id, 0);
+       if (!tmp_parent) {
+               free(dbox_data);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       dbox_data->win = elm_win_add(tmp_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+       evas_object_del(tmp_parent);
+       if (!dbox_data->win) {
+               free(dbox_data);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       dynamicbox_provider_app_set_data(id, dbox_data);
+       evas_object_resize(dbox_data->win, w, h);
+       evas_object_show(dbox_data->win);
+
+       dbox_data->bg = elm_bg_add(dbox_data->win);
+       elm_win_resize_object_add(dbox_data->win, dbox_data->bg);
+       evas_object_resize(dbox_data->bg, w, h);
+       elm_bg_color_set(dbox_data->bg, 255, 0, 0);
+       evas_object_show(dbox_data->bg);
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static int dbox_resize(const char *id, int w, int h, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       evas_object_resize(dbox_data->win, w, h);
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int dbox_destroy(const char *id, int reason, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       evas_object_del(dbox_data->win);
+       free(dbox_data);
+
+       dynamicbox_provider_app_set_data(id, NULL);
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int gbar_create(const char *id, int w, int h, double x, double y, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int gbar_resize_move(const char *id, int w, int h, double x, double y, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int gbar_destroy(const char *id, int reason, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_update(const char *id, const char *content, int force, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_script_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t info, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_pause(const char *id, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_resume(const char *id, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static bool app_create(void *data)
+{
+       /**
+        * @TODO:
+        */
+       return true;
+}
+
+static void app_terminate(void *data)
+{
+       /**
+        * @TODO:
+        */
+}
+
+static void app_pause(void *data)
+{
+       /**
+        * @TODO:
+        */
+}
+
+static void app_resume(void *data)
+{
+       /**
+        * @TODO:
+        */
+}
+
+static int update_all_cb(struct dynamicbox_data *dbox_data, void *data)
+{
+       int r = 0;
+       int g = 0;
+       int b = 0;
+
+       if (!strcasecmp(data, "red")) {
+               r = 255;
+       } else if (!strcasecmp(data, "blue")) {
+               b = 255;
+       } else if (!strcasecmp(data, "green")) {
+               g = 255;
+       }
+
+       if (dbox_data && dbox_data->bg) {
+               elm_bg_color_set(dbox_data->bg, r, g, b);
+       }
+
+       return 0;
+}
+
+static void _app_control(app_control_h service, void *data)
+{
+       int ret;
+       char *value = NULL;
+
+       ret = app_control_get_extra_data(service, "color", &value);
+       if (ret == APP_CONTROL_ERROR_NONE && value) {
+               Eina_List *list;
+               struct dynamicbox_data *dbox_data;
+
+               LOGD("Color: [%s]\n", value);
+               list = dynamicbox_provider_app_data_list();
+               EINA_LIST_FREE(list, dbox_data) {
+                       update_all_cb(dbox_data, value);
+               }
+               free(value);
+       } else {
+               if (dynamicbox_provider_app_init(service, data) < 0) {
+                       LOGE("Failed to initialize the provider_app\n");
+               }
+       }
+       /**
+        * @TODO:
+        */
+}
+
+static void app_language_changed(void *data)
+{
+       /**
+        * @TODO:
+        */
+}
+
+int main(int argc, char *argv[])
+{
+       struct dynamicbox_provider_event_callback table = {
+               .dbox = {
+                       .create = dbox_create,
+                       .resize = dbox_resize,
+                       .destroy = dbox_destroy,
+               },
+
+               .gbar = {
+                       .create = gbar_create,
+                       .resize_move = gbar_resize_move,
+                       .destroy = gbar_destroy,
+               },
+
+               .update = dbox_update,
+               .script_event = dbox_script_event,
+               .clicked = NULL,
+
+               .pause = dbox_pause,
+               .resume = dbox_resume,
+
+               .connected = NULL,
+               .disconnected = NULL,
+
+               .data = NULL,
+       };
+
+       app_event_callback_s app_callback = {
+               .create = app_create,
+               .terminate = app_terminate,
+               .pause = app_pause,
+               .resume = app_resume,
+               .app_control = _app_control,
+               .language_changed = app_language_changed,
+               .low_memory = NULL,
+               .low_battery = NULL,
+               .device_orientation = NULL,
+               .region_format_changed = NULL,
+       };
+
+       return app_efl_main(&argc, &argv, &app_callback, &table);
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.app-template/CMakeLists.txt b/live.viewer/dbox.app-template/CMakeLists.txt
new file mode 100644 (file)
index 0000000..dc04804
--- /dev/null
@@ -0,0 +1,42 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(provider.dbox.app C)
+
+SET(SRCS
+       src/main.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+       capi-appfw-application
+       elementary
+       dlog
+       dynamicbox_service
+       dynamicbox_provider_app
+       dynamicbox_provider
+       dynamicbox
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -Wall")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -Wall")
+
+INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/include")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-lm")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+#install application HOME directory
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+ADD_SUBDIRECTORY(data)
diff --git a/live.viewer/dbox.app-template/src/main.c b/live.viewer/dbox.app-template/src/main.c
new file mode 100644 (file)
index 0000000..ccf0c16
--- /dev/null
@@ -0,0 +1,177 @@
+#include <Elementary.h>
+
+#include <app.h>
+#include <dlog.h>
+#include <vconf.h>
+
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_provider.h>
+#include <dynamicbox_provider_app.h>
+
+static int dbox_create(const char *id, const char *content, int w, int h, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_resize(const char *id, int w, int h, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_destroy(const char *id, int reason, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int gbar_create(const char *id, int w, int h, double x, double y, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int gbar_resize_move(const char *id, int w, int h, double x, double y, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int gbar_destroy(const char *id, int reason, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_update(const char *id, const char *content, int force, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_script_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t info, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_pause(const char *id, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static int dbox_resume(const char *id, void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return 0;
+}
+
+static bool app_create(void *data)
+{
+       /*!
+        * \TODO:
+        */
+       return true;
+}
+
+static void app_terminate(void *data)
+{
+       /*!
+        * \TODO:
+        */
+}
+
+static void app_pause(void *data)
+{
+       /*!
+        * \TODO:
+        */
+}
+
+static void app_resume(void *data)
+{
+       /*!
+        * \TODO:
+        */
+}
+
+static void app_service(app_control_h service, void *data)
+{
+       if (dynamicbox_provider_app_init(service, data) < 0) {
+               LOGE("Failed to initialize the provider_app\n");
+       }
+       /*!
+        * \TODO:
+        */
+}
+
+static void app_language_changed(void *data)
+{
+       /*!
+        * \TODO:
+        */
+}
+
+int main(int argc, char *argv[])
+{
+       app_event_callback_s app_callback = {
+               .create = app_create,
+               .terminate = app_terminate,
+               .pause = app_pause,
+               .resume = app_resume,
+               .app_control = app_service,
+               .language_changed = app_language_changed,
+               .low_memory = NULL,
+               .low_battery = NULL,
+               .device_orientation = NULL,
+               .region_format_changed = NULL,
+       };
+
+       struct dynamicbox_provider_event_callback table = {
+               .dbox = {
+                       .create = dbox_create,
+                       .resize = dbox_resize,
+                       .destroy = dbox_destroy,
+               },
+
+               .gbar = {
+                       .create = gbar_create,
+                       .resize_move = gbar_resize_move,
+                       .destroy = gbar_destroy,
+               },
+
+               .update = dbox_update,
+               .script_event = dbox_script_event,
+
+               .pause = dbox_pause,
+               .resume = dbox_resume,
+               .data = NULL,
+       };
+
+       return app_efl_main(&argc, &argv, &app_callback, &table);
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.app/CMakeLists.txt b/live.viewer/dbox.app/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cc7ea42
--- /dev/null
@@ -0,0 +1,58 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(provider.dbox.app C)
+
+SET(SRCS
+       src/main.c
+       src/instance.c
+#      src/entry.c
+       src/util.c
+       src/window.c
+       src/htt.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(app_pkgs REQUIRED
+       capi-appfw-application
+       vconf
+       elementary
+       ecore-x
+       dlog
+       dynamicbox_service
+       dynamicbox_provider_app
+       dynamicbox_provider
+       dynamicbox
+)
+
+FOREACH(flag ${app_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall")
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS} -Wall")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -Wall")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -Wall")
+
+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("-DLOG_TAG=\"DBOX_APP\"")
+INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/include")
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${app_pkgs_LDFLAGS} "-lm")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+#install application HOME directory
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+#ADD_SUBDIRECTORY(data)
+ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.desktop.in b/live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.desktop.in
new file mode 100644 (file)
index 0000000..854038d
--- /dev/null
@@ -0,0 +1,5 @@
+Name=Elm Demo TIZEN
+Type=Application
+Exec=/opt/usr/apps/com.samsung.elm-demo-tizen/bin/elm_demo_tizen
+Icon=com.samsung.elm-demo-tizen.png
+Comment=Elementary Demo TIZEN Utility
diff --git a/live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.ini b/live.viewer/dbox.app/data/com.samsung.elm-demo-tizen.ini
new file mode 100644 (file)
index 0000000..5abbace
--- /dev/null
@@ -0,0 +1,2 @@
+[ProcessSetting]
+BG_SCHEDULE=true
diff --git a/live.viewer/dbox.app/data/elm_demo_tizen.edc b/live.viewer/dbox.app/data/elm_demo_tizen.edc
new file mode 100644 (file)
index 0000000..966cd6c
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *
+ */
+
+// Use this
+/*
+#define FONT_BLD       "HelveticaNeueBld"
+#define FONT_MED       "HelveticaNeueMed"
+#define FONT_ROM       "HelveticaNeueRom"
+#define FONT_LIG       "HelveticaNeueLig"
+*/
+
+#define FONT_BLD       "Tizen:style=Bold"
+#define FONT_MED       "Tizen:style=Medium"
+#define FONT_ROM       "Tizen:style=Roman"
+#define FONT_LIG       "Tizen:style=Roman"
+
+collections {
+#include "groups/access.edc"
+#include "groups/button.edc"
+#include "groups/multibuttonentry.edc"
+#include "groups/gengrid_customized_theme.edc"
+#include "groups/genlist.edc"
+#include "groups/genlist_progress_style.edc"
+#include "groups/genlist_variable_size.edc"
+#include "groups/genlist_color.edc"
+#include "groups/genlist_externals.edc"
+#include "groups/genlist_swipe.edc"
+#include "groups/index.edc"
+#include "groups/label.edc"
+#include "groups/controlbar.edc"
+#include "groups/fonttest.edc"
+#include "groups/fonteffecttest.edc"
+#include "groups/entry.edc"
+#include "groups/progressbar_default.edc"
+#include "groups/progressbar_custom.edc"
+#include "groups/check.edc"
+#include "groups/radio.edc"
+#include "groups/radio_custom.edc"
+#include "groups/transit.edc"
+#include "groups/slider_default.edc"
+#include "groups/slider_volume.edc"
+#include "groups/slider_custom.edc"
+#include "groups/dayselector.edc"
+#include "groups/popup_custom.edc"
+#include "groups/style_button.edc"
+#include "groups/style_popup.edc"
+#include "groups/style_ctxpopup_imageeditor.edc"
+#include "groups/style_ctxpopup_camera.edc"
+#include "groups/nocontents.edc"
+#include "groups/ctxpopup.edc"
+#include "groups/colorselector.edc"
+#include "groups/colorpalette.edc"
+#include "groups/calendar.edc"
+#include "groups/autoscroll.edc"
+#include "groups/multitouch.edc"
+#include "groups/segmentcontrol.edc"
+#include "groups/style_navibar.edc"
+#include "groups/datefield.edc"
+#include "groups/video.edc"
+#include "groups/naviframe.edc"
+#include "groups/tickernoti.edc"
+#include "groups/vi.edc"
+#include "groups/floating.edc"
+#include "groups/colorplane.edc"
+#include "groups/dnd.edc"
+}
diff --git a/live.viewer/dbox.app/data/groups/access.edc b/live.viewer/dbox.app/data/groups/access.edc
new file mode 100644 (file)
index 0000000..2b1b2b5
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   name: "scroll_test";
+   parts {
+      part { name: "base";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            min: 0 3000;
+            state: "default" 0.0;
+            color: 64 64 64 255;
+         }
+      }
+      part { name: "edje_button";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.1 0.05;
+            rel2.relative: 0.4 0.10;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button2";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.6 0.07;
+            rel2.relative: 0.9 0.12;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button3";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.2 0.14;
+            rel2.relative: 0.8 0.17;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button4";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.1 0.24;
+            rel2.relative: 0.5 0.32;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button5";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.7 0.22;
+            rel2.relative: 0.9 0.25;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button6";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.7 0.26;
+            rel2.relative: 0.9 0.28;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "edje_button7";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.7 0.31;
+            rel2.relative: 0.9 0.34;
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.1 0.38;
+            rel2.relative: 0.4 0.42;
+         }
+      }
+      part { name: "elm.swallow.content2";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.7 0.38;
+            rel2.relative: 0.9 0.42;
+         }
+      }
+      part { name: "elm.swallow.content3";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.1 0.45;
+            rel2.relative: 0.3 0.47;
+         }
+      }
+      part { name: "elm.swallow.content4";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.4 0.46;
+            rel2.relative: 0.9 0.49;
+         }
+      }
+      part { name: "elm.swallow.genlist";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.1 0.5;
+            rel2.relative: 0.9 0.9;
+         }
+      }
+      part { name: "elm.swallow.toolbar";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.0 0.95;
+            rel2.relative: 1.0 1.0;
+         }
+      }
+   }
+}
+
+group { name: "overlap_test";
+   parts {
+      part {
+         name: "red";
+         type: RECT;
+         scale: 1;
+         description {
+            color: 125 0 0 125;
+            rel1 { relative: 0.1 0.1; }
+            rel2 { relative: 0.9 0.9; }
+         }
+      }
+      part {
+         name: "green";
+         type: RECT;
+         scale: 1;
+         description {
+            color: 0 125 0 125;
+            rel1 { relative: 0.25 0.25; }
+            rel2 { relative: 0.75 0.75; }
+         }
+      }
+      part {
+         name: "blue";
+         type: RECT;
+         scale: 1;
+         description {
+            color: 0 0 125 125;
+            rel1 { relative: 0.4 0.4; }
+            rel2 { relative: 0.6 0.6; }
+         }
+      }
+   }
+}
+
+group { name: "activate_test";
+   parts {
+      part {
+         name: "elm.swallow.label";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1 { relative: 0.05 0.05; }
+            rel2 { relative: 0.95 0.15; }
+         }
+      }
+      part {
+         name: "elm.swallow.entry";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1 { relative: 0.05 0.15; }
+            rel2 { relative: 0.95 0.25; }
+         }
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/autoscroll.edc b/live.viewer/dbox.app/data/groups/autoscroll.edc
new file mode 100644 (file)
index 0000000..989e11d
--- /dev/null
@@ -0,0 +1,639 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+      name: "autoscroll_conform";
+      parts{
+         part {
+            name: "bg";
+            type: RECT;
+            mouse_events: 1;
+            scale:1;
+            description {
+               state: "default" 0.0;
+               color: 0 0 0 0;
+               rel1.relative: 0.0 0.0;
+               rel2.relative: 1.0 1.0;
+            }
+         }
+         part{
+            name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 1; //minimum size for gap filler
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to:bg;
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+                  to:bg;
+               }
+            }
+          }
+          part {
+            name: "left_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 0; //minimum size for gap filler
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to: "bg";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to: "bg";
+               }
+               align: 0.0 0.0;
+            }
+         }
+          part {
+            name: "bg_conform";
+            type: RECT;
+            mouse_events: 0;
+            scale:1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y:top_padding;
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "conform_part";
+            type: SWALLOW;
+            mouse_events: 1;
+            scale:1;
+            description {
+               fixed: 1 1;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to_x:left_padding;
+                  to_y:bg_conform;
+               }
+               align: 0.0 0.0;
+            }
+         }
+      }
+   }
+
+   group {
+      name: "ui_entryfields";
+#define EN_MIN_WIDTH 460.0
+#define EN_MAX_WIDTH 1280.0
+#define EN_HEIGHT 100.0
+#define EN_GAP 30.0
+      parts{
+         part {
+            name: "left_top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_GAP EN_GAP; //minimum size for gap filler
+               fixed: 1 1;
+               rel2.relative: 0.0 0.0;
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "right_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_GAP 0; //minimum size for gap filler
+               fixed: 1 0;
+               rel1.relative: 1.0 0.0;
+               align: 1.0 0.5;
+            }
+         }
+         part {
+            name: "en_rect1";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 50;
+               max: EN_MAX_WIDTH 50;
+               state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+               }
+         }
+         part {
+            name: "en_part1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0 0;
+               rel1.to: "en_rect1";
+               rel2.to: "en_rect1";
+            }
+         }
+         part {
+            name: "en_part1_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_MIN_WIDTH EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part1";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part1";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect2";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 100;
+               max: EN_MAX_WIDTH 100;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part1_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0.0 0.0;
+               rel1.to: "en_rect2";
+               rel2.to: "en_rect2";
+            }
+         }
+         part {
+            name: "en_part2_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part2";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part2";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect3";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 150;
+               max: EN_MAX_WIDTH 150;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part2_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part3";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "en_rect3";
+               rel2.to: "en_rect3";
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_part3_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part3";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part3";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect4";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 200;
+               max: EN_MAX_WIDTH 200;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part3_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part4";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "en_rect4";
+               rel2.to: "en_rect4";
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_part4_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part4";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part4";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect5";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 250;
+               max: EN_MAX_WIDTH 250;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part4_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part5";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "en_rect5";
+               rel2.to: "en_rect5";
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_part5_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part5";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part5";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect6";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 300;
+               max: EN_MAX_WIDTH 300;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part5_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part6";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 0;
+               rel1.to: "en_rect6";
+               rel2.to: "en_rect6";
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               fixed: 0 1;
+               min : EN_MIN_WIDTH 100;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part6";
+               }
+               align: 1.0 1.0;
+            }
+         }
+      }//end parts
+}
+
+   group {
+      name: "ui_entryfields1";
+#define EN_HEIGHT1 450.0
+      parts{
+         part {
+            name: "left_top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_GAP EN_GAP; //minimum size for gap filler
+               fixed: 1 1;
+               rel2.relative: 0.0 0.0;
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "right_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_GAP EN_GAP; //minimum size for gap filler
+               fixed: 1 1;
+               rel1.relative: 1.0 0.0;
+               rel2.relative: 1.0 0.0;
+               align: 1.0 0.5;
+            }
+         }
+         part {
+            name: "en_rect1";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH EN_HEIGHT1;
+               max: EN_MAX_WIDTH EN_HEIGHT1;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0 0;
+               rel1.to: "en_rect1";
+               rel2.to: "en_rect1";
+            }
+         }
+         part {
+            name: "en_part1_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : EN_MIN_WIDTH EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part1";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part1";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect2";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 300;
+               max: EN_MAX_WIDTH 300;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part1_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0 0;
+               rel1.to: "en_rect2";
+               rel2.to: "en_rect2";
+            }
+         }
+         part {
+            name: "en_part2_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part2";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "en_part2";
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "en_rect3";
+            type: RECT;
+            scale: 1;
+            description {
+               min: EN_MIN_WIDTH 100;
+               max: EN_MAX_WIDTH 100;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_x: "left_top_padding";
+                  to_y: "en_part2_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               color: 168 168 168 50;
+            }
+         }
+         part {
+            name: "en_part3";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "en_rect3";
+               rel2.to: "en_rect3";
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 EN_GAP;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "en_part3";
+               }
+               align: 0.0 0.0;
+            }
+         }
+      }//end parts
+#undef EN_MIN_WIDTH
+#undef EN_MAX_WIDTH
+#undef EN_HEIGHT
+#undef EN_HEIGHT1
+#undef EN_GAP
+   }
diff --git a/live.viewer/dbox.app/data/groups/button.edc b/live.viewer/dbox.app/data/groups/button.edc
new file mode 100644 (file)
index 0000000..193c097
--- /dev/null
@@ -0,0 +1,1077 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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_PADDING_WIDTH 170.0
+#define BUTTON_PADDING_HEIGHT 22.0
+   group { name: "elmdemo-test/button";
+      parts {
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT; //minimum size for gap filler
+               fixed: 0 1;
+               rel2.relative: 1.0 0.0;
+               color:  0 0 0 0;
+               align: 0 0;
+            }
+         }
+         part { name: "btn_reveal";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_reveal_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 { 
+                  relative: 0.0 1.0;
+                  to_y: "btn_reveal";
+               }
+               rel2.to_y: "btn_reveal";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_expand";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_reveal_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_reveal_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_expand_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0 1.0;
+                  to_y: "btn_expand";
+               }
+               rel2.to_y: "btn_expand";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_info";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expand_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expand_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_info_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_info";
+               }
+               rel2.to_y: "btn_info";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_rename";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_info_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_info_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_rename_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_rename";
+               }
+               rel2.to_y: "btn_rename";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_call";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_rename_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_rename_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_call_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_call";
+               }
+               rel2.to_y: "btn_call";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_warning";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_call_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_call_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_warning_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_warning";
+               }
+               rel2.to_y: "btn_warning";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_plus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_warning_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_warning_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_plus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_plus";
+               }
+               rel2.to_y: "btn_plus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_minus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_plus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_plus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_minus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_minus";
+               }
+               rel2.to_y: "btn_minus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_cancel";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_minus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_minus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_cancel_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_cancel";
+               }
+               rel2.to_y: "btn_cancel";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_send";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_cancel_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_cancel_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_send_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_send";
+               }
+               rel2.to_y: "btn_send";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_contact";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_send_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_send_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_contact_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_contact";
+               }
+               rel2.to_y: "btn_contact";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_circle";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_contact_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_contact_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_circle_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_circle";
+               }
+               rel2.to_y: "btn_circle";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_icon_plus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_circle_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_circle_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_icon_plus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_icon_plus";
+               }
+               rel2.to_y: "btn_icon_plus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_icon_minus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_plus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_plus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_icon_minus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_icon_minus";
+               }
+               rel2.to_y: "btn_icon_minus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_icon_expand";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_minus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_minus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_icon_expand_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_icon_expand";
+               }
+               rel2.to_y: "btn_icon_expand";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_style1";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_expand_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_expand_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_style1_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_style1";
+               }
+               rel2.to_y: "btn_style1";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_expandable_number";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_style1_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_style1_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_expandable_number_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_expandable_number";
+               }
+               rel2.to_y: "btn_expandable_number";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_sweep";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expandable_number_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expandable_number_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_sweep_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_sweep";
+               }
+               rel2.to_y: "btn_sweep";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_multibuttonentry";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_sweep_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_sweep_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_multibuttonentry_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_multibuttonentry";
+               }
+               rel2.to_y: "btn_multibuttonentry";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_naviframe_title_text";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_multibuttonentry_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_multibuttonentry_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : 0 BUTTON_PADDING_HEIGHT;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_naviframe_title_text";
+               }
+               color: 0 0 0 0;
+               align: 0.5 1.0;
+            }
+         }
+      } //end parts
+   } //end group
+
+   group { name: "elmdemo-test/button-extended";
+      parts {
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT; //minimum size for gap filler
+               fixed: 0 1;
+               rel2.relative: 1.0 0.0;
+               color:  0 0 0 0;
+               align: 0 0;
+            }
+         }
+         part { name: "btn_reveal";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_reveal_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_reveal";
+               }
+               rel2.to_y: "btn_reveal";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_expand";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_reveal_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_reveal_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_expand_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_expand";
+               }
+               rel2.to_y: "btn_expand";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_info";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expand_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_expand_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_info_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_info";
+               }
+               rel2.to_y: "btn_info";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_rename";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_info_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_info_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_rename_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_rename";
+               }
+               rel2.to_y: "btn_rename";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_call";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_rename_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_rename_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_call_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_call";
+               }
+               rel2.to_y: "btn_call";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_warning";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_call_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_call_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_warning_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_warning";
+               }
+               rel2.to_y: "btn_warning";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_plus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_warning_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_warning_bottom_padding";
+               }
+               align: 0.5 0;
+               }
+         }
+         part { name: "btn_plus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_plus";
+               }
+               rel2.to_y: "btn_plus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_minus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_plus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_plus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_minus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_minus";
+               }
+               rel2.to_y: "btn_minus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_cancel";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_minus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_minus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_cancel_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_cancel";
+               }
+               rel2.to_y: "btn_cancel";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_send";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_cancel_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_cancel_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_send_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_send";
+               }
+               rel2.to_y: "btn_send";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_icon_plus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_send_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_send_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_icon_plus_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               max : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_icon_plus";
+               }
+               rel2.to_y: "btn_icon_plus";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "btn_icon_minus";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_plus_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_icon_plus_bottom_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : 0 BUTTON_PADDING_HEIGHT;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_icon_minus";
+               }
+               color: 0 0 0 0;
+               align: 0.5 1.0;
+            }
+         }
+      } //end parts
+   } //end group
+
+#undef BUTTON_PADDING_WIDTH
+#undef BUTTON_HEIGHT
+#undef BUTTON_PADDING_HEIGHT
diff --git a/live.viewer/dbox.app/data/groups/calendar.edc b/live.viewer/dbox.app/data/groups/calendar.edc
new file mode 100644 (file)
index 0000000..5f2e042
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 CAL_PADDING_H 20
+#define CAL_SHOW_H 335
+
+   group {
+      name: "elmdemo-test/calendar";
+      parts{
+         part { name: "base";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               rel1 { relative: 0 0; }
+               rel2 { relative: 1 1; }
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : 0 CAL_PADDING_H;
+               fixed: 0 1;
+               rel1 { relative: 0 0; to: "base"; }
+               rel2 { relative: 1 0; to: "base"; }
+               align: 0.0 0.0;
+               color:  0 0 0 0;
+            }
+         }
+         part { name: "swallow.calendar";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               min : 0 CAL_SHOW_H;
+               fixed: 0 1;
+               rel1 { relative: 0.0 1.0; to: "top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "top_padding"; }
+               align: 0.0 0.0;
+               color: 0 0 0 0;
+            }
+         }
+      }
+} //end group
+
+#undef CAL_PADDING_H
+#undef CAL_SHOW_H
+
diff --git a/live.viewer/dbox.app/data/groups/check.edc b/live.viewer/dbox.app/data/groups/check.edc
new file mode 100644 (file)
index 0000000..d356cfb
--- /dev/null
@@ -0,0 +1,268 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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_PADDING_WIDTH 170.0
+#define CHECK_PADDING_HEIGHT 22.0
+   group {
+      name: "elmdemo-test/check";
+      parts {
+         part {
+            name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH 30; //minimum size for gap filler
+               fixed: 0 1;
+               visible: 0;
+               rel2.relative: 1 0;
+               align: 0 0;
+            }
+         }
+         part {
+            name: "check1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part {
+            name: "check1_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               max : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               fixed: 1 1;
+               visible: 0;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check1";
+               }
+               rel2.to_y: "check1";
+            }
+         }
+         part {
+            name: "check2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "check1_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "check1_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "check2_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               max : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               fixed: 1 1;
+               visible: 0;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check2";
+               }
+               rel2.to_y: "check2";
+            }
+         }
+         part {
+            name: "check3";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "check2_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "check2_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "check3_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               max : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               fixed: 1 1;
+               visible: 0;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check3";
+               }
+               rel2.to_y: "check3";
+            }
+         }
+         part {
+            name: "check4";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "check3_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "check3_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : 0 CHECK_PADDING_HEIGHT;
+               visible: 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check4";
+               }
+               align: 0.5 1;
+            }
+         }
+      } //end parts
+   } //end group
+
+   group {
+      name: "elmdemo-test/check-extended";
+      parts {
+         part {
+            name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH 30; //minimum size for gap filler
+               fixed: 0 1;
+               rel2.relative: 1 0;
+               color:  0 0 0 0;
+               align: 0 0;
+            }
+         }
+         part {
+            name: "check1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part {
+            name: "check1_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               max : CHECK_PADDING_WIDTH CHECK_PADDING_HEIGHT;
+               fixed: 1 1;
+               align: 0.5 0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check1";
+               }
+               rel2.to_y: "check1";
+               color: 0 255 0 0;
+            }
+         }
+         part {
+            name: "check2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "check1_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "check1_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min : 0 CHECK_PADDING_HEIGHT;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "check2";
+               }
+               color: 0 0 0 0;
+               align: 0.5 1.0;
+            }
+         }
+      } //end parts
+   } //end group
+#undef CHECK_PADDING_WIDTH
+#undef CHECK_PADDING_HEIGHT
diff --git a/live.viewer/dbox.app/data/groups/colorpalette.edc b/live.viewer/dbox.app/data/groups/colorpalette.edc
new file mode 100644 (file)
index 0000000..178a58c
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+       name: "colorpalette/rect";
+       parts{
+               part {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 233;
+                               max: -1 233;
+                       }
+               }
+               part {
+                       name: "top_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 33;
+                               fixed: 0 1;
+                               rel1.to: "bg";
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "bg";
+                               }
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "rect";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 168;
+                               fixed: 0 1;
+                               rel1 {
+                                       relative: 0.2 1.0;
+                                       to_x: "bg";
+                                       to_y: "top_padding";
+                               }
+                               rel2 {
+                                       relative: 0.8 1.0;
+                                       to_x: "bg";
+                                       to_y: "top_padding";
+                               }
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "bottom_padding";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 33;
+                               fixed: 0 1;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                                       to_x: "bg";
+                                       to_y: "rect";
+                               }
+                               rel2 {
+                                       to_x: "bg";
+                                       to_y: "rect";
+                               }
+                               align: 0.0 0.0;
+                       }
+               }
+       }//end parts
+} //end group
+
+group {
+       name: "colorpalette";
+               parts{
+                       part {
+                               name: "bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 274;
+                                       max: -1 274;
+                               }
+                               description {
+                                       state: "landscape" 0.0;
+                                       inherit: "default" 0.0;
+                                       min: 0 162;
+                                       max: -1 162;
+                               }
+                       }
+                       part {
+                               name: "top_left_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 8 32;
+                                       fixed: 1 1;
+                                       rel1.to: "bg";
+                                       rel2 {
+                                               to: "bg";
+                                               relative: 0.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "colorpalette";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to: "top_left_padding";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "bottom_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 44;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_x: "bg";
+                                               to_y: "colorpalette";
+                                       }
+                                       rel2 {
+                                               to_x: "bg";
+                                               to_y: "colorpalette";
+                                       }
+                                       align: 1.0 1.0;
+                               }
+                       }
+               }//end parts
+               programs {
+                       program {
+                               name: "landscape";
+                               signal: "landscape";
+                               source: "";
+                               action: STATE_SET "landscape" 0.0;
+                               target: "bg";
+                       }
+                       program {
+                               name: "portrait";
+                               signal: "portrait";
+                               source: "";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg";
+                       }
+               }
+} //end group
+
+group {
+       name: "item/colorpalette";
+       images {
+               image: "00_color_picker_palette_bg.png" COMP;
+       }
+       parts {
+               part {
+                       name: "color_rect";
+                       type: IMAGE;
+                       scale: 1;
+                       description{
+                               state: "default" 0.0;
+                               image.normal: "00_color_picker_palette_bg.png";
+                               image.border: 13 13 13 13;
+                               image.border_scale: 1;
+                       }
+               }
+       }
+}
diff --git a/live.viewer/dbox.app/data/groups/colorplane.edc b/live.viewer/dbox.app/data/groups/colorplane.edc
new file mode 100644 (file)
index 0000000..893c08b
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+       name: "colorplane/rect";
+       parts{
+               part {
+                       name: "bg";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 200;
+                               max: 578 200;
+                       }
+               }
+               part {
+                       name: "rect";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 134;
+                               max: -1 134;
+                               fixed: 0 1;
+                               rel1.to: "bg";
+                               rel2.to: "bg";
+                       }
+               }
+       }//end parts
+}//end group
+
+group {
+       name: "colorplane_popup";
+               parts {
+                       part {
+                               name: "bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 578 342;
+                                       max: 578 342;
+                               }
+                       }
+                       part {
+                               name: "top_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 20;
+                                       fixed: 0 1;
+                                       rel1.to: "bg";
+                                       rel2 {
+                                               to: "bg";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "colorpalette";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_y: "top_padding";
+                                               to_x: "bg";
+                                       }
+                                       rel2 {
+                                               to_y: "top_padding";
+                                               to_x: "bg";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "colorpalette_bottom_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 12;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_y: "colorpalette";
+                                               to_x: "bg";
+                                       }
+                                       rel2 {
+                                               to_x: "bg";
+                                               to_y: "colorpalette";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+               }//end parts
+} //end group
+
+
+group {
+       name: "colorplane";
+               parts{
+                       part {
+                               name: "bg";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 578 344;
+                                       max: 578 344;
+                               }
+                       }
+                       part {
+                               name: "top_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 21;
+                                       fixed: 0 1;
+                                       rel1.to: "bg";
+                                       rel2 {
+                                               to: "bg";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "colorpalette";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_y: "top_padding";
+                                               to_x: "bg";
+                                       }
+                                       rel2 {
+                                               to_y: "top_padding";
+                                               to_x: "bg";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "colorpalette_bottom_padding";
+                               type: SPACER;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 12;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to_y: "colorpalette";
+                                               to_x: "bg";
+                                       }
+                                       rel2 {
+                                               to_x: "bg";
+                                               to_y: "colorpalette";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+               }//end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/colorselector.edc b/live.viewer/dbox.app/data/groups/colorselector.edc
new file mode 100644 (file)
index 0000000..4f5d720
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+       name: "colorselector";
+       parts{
+               part {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name: "top_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 43;
+                               fixed: 0 1;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 1.0 0.0;
+                               rel1.to_y: "bg";
+                               rel2.to_y: "bg";
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "rect";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 134;
+                               fixed: 0 1;
+                               rel1.relative: 0.2 1.0;
+                               rel1.to_x: "bg";
+                               rel1.to_y: "top_padding";
+                               rel2.relative: 0.8 1.0;
+                               rel2.to_x: "bg";
+                               rel2.to_y: "top_padding";
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 43;
+                               fixed: 0 1;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to: "rect";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to: "rect";
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "colorselector";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 1;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_x: "bg";
+                               rel1.to_y: "bottom_padding";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to_x: "bg";
+                               rel2.to_y: "bottom_padding";
+                               align: 0.0 0.0;
+                       }
+               }
+               part {
+                       name: "bottom_padding1";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 10;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_y: "colorselector";
+                               rel2.relative: 1.0 1.0;
+                               align: 0.0 1.0;
+                       }
+               }
+       }//end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/controlbar.edc b/live.viewer/dbox.app/data/groups/controlbar.edc
new file mode 100644 (file)
index 0000000..ffe1019
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+       group {
+               name: "elmdemo-test/controlbar";
+               images{
+                       image: "00_winset_softkey_bg.png" COMP;
+               }
+
+               parts {
+                       part { name: "bg";
+                               mouse_events: 0;
+                               type: RECT;
+                               scale: 1;
+                               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: "elm.swallow.view1";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 0.0; to: "elm.swallow.toolbar1";}
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.view2";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 0.0; to: "elm.swallow.toolbar2";}
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.view3";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 0.0; to_y:"elm.swallow.slider";}
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.view4";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                               }
+                               description {
+                                       state: "hide" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.tabbar";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                       }
+                       part{
+                               name: "bg_image";
+                               type: IMAGE;
+                               scale: 1;
+                               mouse_events:0;
+                               description{
+                                       state: "default" 0.0;
+                                       visible: 0;
+                                       rel1 {relative: 0.0 0.0; offset: 0 0; to:"elm.swallow.slider";}
+                                       rel2 {relative: 1.0 1.0; offset: -1 -1; to:"elm.swallow.toolbar2";}
+                                       image.normal: "00_winset_softkey_bg.png";
+                                       color: 255 255 255 217;
+                               }
+                               description{
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.slider";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 50;
+                                       fixed: 0 1;
+                                       align: 0.5 1.0;
+                                       rel1 { relative: 0.0 0.0; offset: 0 -1; to_y: "elm.swallow.toolbar2";}
+                                       rel2 { relative: 1.0 0.0; offset: 0 -1; to_y: "elm.swallow.toolbar2";}
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.toolbar1";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 104;
+                                       fixed: 0 1;
+                                       align: 0.5 1.0;
+                                       rel1 { relative: 0.0 1.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.toolbar2";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 124;
+                                       fixed: 0 1;
+                                       align: 0.5 1.0;
+                                       rel1 { relative: 0.0 1.0; }
+                                       rel2 { relative: 1.0 1.0; offset: -1 -1;}
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.vertical_left";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 124 0;
+                                       fixed: 1 0;
+                                       align: 0.0 0.5;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 0.0 1.0; offset: -1 -1;}
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.vertical_right";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 124 0;
+                                       fixed: 1 0;
+                                       align: 1.0 0.5;
+                                       rel1 { relative: 1.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; offset: -1 -1;}
+                               }
+                       }
+               }
+
+               programs{
+                       program{
+                               name: "default";
+                               signal: "elm,state,slider,default";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg_image";
+                       }
+                       program{
+                               name: "show";
+                               signal: "elm,state,slider,show";
+                               source: "elm";
+                               action: STATE_SET "show" 0.0;
+                               target: "bg_image";
+                       }
+                       program{
+                               name: "all_view_show";
+                               signal: "elm,state,all_view_show";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "elm.swallow.view1";
+                               target: "elm.swallow.view2";
+                               target: "elm.swallow.view3";
+                               target: "elm.swallow.view4";
+                       }
+                       program{
+                               name: "all_view_hide";
+                               signal: "elm,state,all_view_hide";
+                               source: "elm";
+                               action: STATE_SET "hide" 0.0;
+                               target: "elm.swallow.view1";
+                               target: "elm.swallow.view2";
+                               target: "elm.swallow.view3";
+                               target: "elm.swallow.view4";
+                       }
+               }
+       }
+   group { name: "elmdemo-test/cbar-seg";
+      parts{
+         part{ name:"segment";
+            type: SWALLOW;
+            scale : 1;
+            description { state: "default" 0.0;
+               min: 0 50;
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 0.5;
+               }
+               rel2 {
+                  relative: 1.0 0.5;
+               }
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/ctxpopup.edc b/live.viewer/dbox.app/data/groups/ctxpopup.edc
new file mode 100644 (file)
index 0000000..33feb61
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *
+ */
+
+//Ctxpopup Layout
+group { name: "ctxpopup_layout";
+       parts {
+               part {
+                       name: "btn1";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.025; }
+                               rel2 { relative: 0.5 0.15; }
+                       }
+               }
+               part {
+                       name: "btn2";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.175; }
+                               rel2 { relative: 0.95 0.3; }
+                       }
+               }
+               part {
+                       name: "btn3";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.175; }
+                               rel2 { relative: 0.5 0.3; }
+                       }
+               }
+               part {
+                       name: "btn4";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.025; }
+                               rel2 { relative: 0.95 0.15; }
+                       }
+               }
+               part {
+                       name: "btn5";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.325; }
+                               rel2 { relative: 0.5 0.45; }
+                       }
+               }
+               part {
+                       name: "btn6";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.325; }
+                               rel2 { relative: 0.95 0.45; }
+                       }
+               }
+               part {
+                       name: "btn7";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.475; }
+                               rel2 { relative: 0.5 0.6; }
+                       }
+               }
+               part {
+                       name: "btn8";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.475; }
+                               rel2 { relative: 0.95 0.6; }
+                       }
+               }
+               part {
+                       name: "btn9";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.625; }
+                               rel2 { relative: 0.5 0.75; }
+                       }
+               }
+               part {
+                       name: "btn10";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.625; }
+                               rel2 { relative: 0.95 0.75; }
+                       }
+               }
+               part {
+                       name: "btn11";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.05 0.775; }
+                               rel2 { relative: 0.5 0.9; }
+                       }
+               }
+               part {
+                       name: "btn12";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { relative: 0.55 0.775; }
+                               rel2 { relative: 0.95 0.9; }
+                       }
+               }
+       }
+}
+
+//Buttons Content Layout for Nbeat
+group { name: "ctxpopup_buttons_nbeat";
+       parts {
+               part {
+                       name: "left_top_padding";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               min: 10 12;
+                               max: 10 12;
+                               fixed: 1 1;
+                               align : 0 0;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name:"right_bottom_padding";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               min: 10 12;
+                               max: 10 12;
+                               fixed: 1 1;
+                               align : 1 1;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name: "elm.swallow.table";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               rel1 { to: "left_top_padding"; relative: 1 1; }
+                               rel2 { to: "right_bottom_padding"; relative: 0 0; }
+                       }
+               }
+       }
+}
diff --git a/live.viewer/dbox.app/data/groups/datefield.edc b/live.viewer/dbox.app/data/groups/datefield.edc
new file mode 100644 (file)
index 0000000..dc49b60
--- /dev/null
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 DATETIME_PADDING_HEIGHT 50
+#define DATETIME_TOP_PADDING_HEIGHT 30
+#define DATETIME_PICKER_PADDING_HEIGHT 100
+#define DATETIME_BUTTON_WIDTH 550
+#define DATETIME_TEXT_HEIGHT 60
+#define DATETIME_TEXT_COLOR 173 170 165 255
+#define DATETIME_TEXT_SIZE 24
+
+#define DATETIME_PICKER(_pos, _after, str)\
+   part {\
+      name: "picker"#_pos;\
+      type: SWALLOW;\
+      scale: 1;\
+      description {\
+         state: "default" 0.0;\
+         align: 0.5 0.0;\
+         fixed: 1 1;\
+         rel1 { relative: 0 1; to: "text"#_pos; }\
+         rel2 { relative: 1 1; to: "text"#_pos; }\
+      }\
+   }\
+   part {\
+      name: "text"#_pos;\
+      type: TEXT;\
+      scale: 1;\
+      description {\
+         state: "default" 0.0;\
+         align: 0.5 0.0;\
+         fixed: 0 1;\
+         min: 0 DATETIME_PADDING_HEIGHT;\
+         rel1 { relative: 0 1; to: "padding"#_after; }\
+         rel2 { relative: 1 1; to: "padding"#_after; }\
+         color: DATETIME_TEXT_COLOR;\
+         text {\
+            font: "Tizen:style=Roman";\
+            size: DATETIME_TEXT_SIZE;\
+            min:  1 0;\
+            align: 0.0 0.0;\
+            text: str;\
+         }\
+      }\
+   }\
+   part {\
+      name: "padding"#_pos;\
+      type: SPACER;\
+      scale: 1;\
+      description {\
+         state: "default" 0.0;\
+         min: 0 DATETIME_PADDING_HEIGHT;\
+         fixed: 0 1;\
+         align: 0.5 0.0;\
+         rel1 { relative: 0.0 1.0; to_x: "padding"#_after; to_y: "picker"#_pos; }\
+         rel2 { relative: 1.0 1.0; to_x: "padding"#_after; to_y: "picker"#_pos; }\
+      }\
+   }
+
+   group {
+      name: "elmdemo-test/datetime_styles";
+      parts {
+         part {
+            name: "padding0";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1.relative: 0 0;
+               rel2.relative: 1 0;
+            }
+         }
+         DATETIME_PICKER(1, 0, " Date Time (12hr) :")
+         DATETIME_PICKER(2, 1, " Date Time (24hr) :")
+         DATETIME_PICKER(3, 2, " Time Date (12hr) :")
+         DATETIME_PICKER(4, 3, " Time Date (24hr) :")
+         DATETIME_PICKER(5, 4, " User format changed as per System's Region format :")
+         DATETIME_PICKER(6, 5, " Datetime widget with field limits :")
+         part {
+            name: "bottom.padding";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               align: 0.5 1.0;
+               rel1 { to: "padding6"; relative: 0 1; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datepicker_styles";
+      parts {
+         part {
+            name: "padding0";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1.relative: 0 0;
+               rel2.relative: 1 0;
+            }
+         }
+         DATETIME_PICKER(1, 0, "   DD/MM/YY :")
+         DATETIME_PICKER(2, 1, "   MM/DD/YY :")
+         DATETIME_PICKER(3, 2, "   YY/DD/MM :")
+         DATETIME_PICKER(4, 3, "   DD,MM,YY :")
+         DATETIME_PICKER(5, 4, "   DD-MM-YY :")
+         DATETIME_PICKER(6, 5, "   DD MM YY :")
+         part {
+            name: "bottom.padding";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               align: 0.5 1.0;
+               rel1 { to: "padding6"; relative: 0 1; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/timepicker_styles";
+      parts {
+         part {
+            name: "padding0";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel2.relative: 1 0;
+            }
+         }
+         DATETIME_PICKER(1, 0, "   Time (12hr) :")
+         DATETIME_PICKER(2, 1, "   Time (24hr) :")
+         DATETIME_PICKER(3, 2, "   Time with AM/PM :")
+         part {
+            name: "bottom.padding";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_TOP_PADDING_HEIGHT;
+               align: 0.5 1.0;
+               rel1 { to: "padding3"; relative: 0 1; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datetime_pickerpopup_styles";
+      parts {
+         part {
+            name: "padding1";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel2.relative: 1 0;
+            }
+         }
+         part {
+            name: "picker1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding1"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding1"; }
+            }
+         }
+         part {
+            name: "padding2";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "picker1"; }
+               rel2 { relative: 1.0 1.0; to_y: "picker1"; }
+            }
+         }
+         part {
+            name: "picker2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding2"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding2"; }
+            }
+         }
+         part {
+            name: "padding3";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "picker2"; }
+               rel2 { relative: 1.0 1.0; to_y: "picker2"; }
+            }
+         }
+         part {
+            name: "picker3";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding3"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding3"; }
+            }
+         }
+         part {
+            name: "padding4";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PICKER_PADDING_HEIGHT;
+               align: 0.5 1.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding3"; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datetime_custom_pickerpopup_styles";
+      parts {
+         part {
+            name: "padding1";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel2.relative: 1 0;
+            }
+         }
+         part {
+            name: "picker1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding1"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding1"; }
+            }
+         }
+         part {
+            name: "padding2";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "picker1"; }
+               rel2 { relative: 1.0 1.0; to_y: "picker1"; }
+            }
+         }
+         part {
+            name: "picker2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding2"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding2"; }
+            }
+         }
+         part {
+            name: "padding3";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "picker2"; }
+               rel2 { relative: 1.0 1.0; to_y: "picker2"; }
+            }
+         }
+         part {
+            name: "picker3";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               max: DATETIME_BUTTON_WIDTH DATETIME_PICKER_PADDING_HEIGHT;
+               fixed: 0 1;
+               align: 0.5 0.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding3"; }
+               rel2 { relative: 1.0 1.0; to_y: "padding3"; }
+            }
+         }
+         part {
+            name: "padding4";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 DATETIME_PICKER_PADDING_HEIGHT;
+               align: 0.5 1.0;
+               rel1 { relative: 0.0 1.0; to_y: "padding3"; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datetime_custom_pickerpopup_layout";
+      parts {
+         part {
+            name: "bg";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 684 700;
+               max: 684 700;
+            }
+         }
+         part {
+            name: "datepicker";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 684 350;
+               max: 684 350;
+               fixed: 1 1;
+               align: 0.0 0.0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+            }
+         }
+         part {
+            name: "timepicker";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 684 350;
+               max: 684 350;
+               fixed: 1 1;
+               align: 1.0 1.0;
+               rel1 { relative: 0.0 1.0; to: "datepicker"; }
+               rel2 { relative: 1.0 1.0; }
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datetime_custom_layout";
+      parts {
+         part {
+            name: "bg";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 684 700; //Size of the datetime picker layout
+               max: 684 700;
+            }
+         }
+         part {
+            name: "scroller";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1.to: "bg";
+               rel2.to: "bg";
+            }
+         }
+      }
+   }
+
+   group {
+      name: "elmdemo-test/datetime_custom_layout_landscape";
+      parts {
+         part {
+            name: "bg";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 684 350;
+               max: 684 350;
+            }
+         }
+         part {
+            name: "scroller";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               rel1.to: "bg";
+               rel2.to: "bg";
+            }
+         }
+      }
+   }
+
+
+#undef DATETIME_PICKER
+#undef DATETIME_PADDING_HEIGHT
+#undef DATETIME_PICKER_PADDING_HEIGHT
+#undef DATETIME_BUTTON_WIDTH
+#undef DATETIME_TOP_PADDING_HEIGHT
+#undef DATETIME_TEXT_HEIGHT
+#undef DATETIME_TEXT_COLOR
+#undef DATETIME_TEXT_SIZE
diff --git a/live.viewer/dbox.app/data/groups/dayselector.edc b/live.viewer/dbox.app/data/groups/dayselector.edc
new file mode 100644 (file)
index 0000000..8e66673
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group { name: "elmdemo-test/dayselector";
+   parts {
+         part {
+         name:"left_top_padding";
+         scale: 1;
+         mouse_events: 0;
+         description {
+            min: 5 5;
+            max: 5 5;
+            fixed: 1 1;
+            align : 0 0;
+            visible: 0;
+         }
+      }
+      part {
+         name:"right_bottom_padding";
+         scale: 1;
+         mouse_events: 0;
+         description {
+            min: 5 5;
+            max: 5 5;
+            fixed: 1 1;
+            align : 1 1;
+            visible: 0;
+         }
+      }
+      part {
+         name: "dayselector";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            rel1 { to: "left_top_padding"; relative: 1 1; }
+            rel2 { to: "right_bottom_padding"; relative: 0 0; }
+         }
+      }
+   }
+}
+
+group { name: "elmdemo-test/dayselector_outerlayout";
+   parts {
+      part {
+         name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            rel1 { relative: 0 0; }
+            rel2 { relative: 1 1; }
+         }
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/dnd.edc b/live.viewer/dbox.app/data/groups/dnd.edc
new file mode 100644 (file)
index 0000000..2ba6bfd
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {        name: "dnd_layout";
+       styles {
+               style { name: "dnd_layout_textblock_style";
+                       base: "font=Tizen:style=Roman font_size=20 color=#ffffff wrap=mixed";
+               }
+       }
+       parts{
+               part {
+                       name: "entry1.swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 1;
+                               min: 0 100;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 1.0 0.0;
+                               align: 0.5 0.0;
+                       }
+               }
+               part {
+                       name: "center_padding1";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                fixed : 0 1;
+                               min: 0 15;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_y: "entry1.swallow";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to_y: "entry1.swallow";
+                               align: 0.5 0.0;
+                color: 255 0 0 128;
+                       }
+               }
+               part {
+                       name: "entry2.swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 1;
+                               min: 0 100;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_y: "center_padding1";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to_y: "center_padding1";
+                               align: 0.5 0.0;
+                       }
+               }
+               part {
+                       name: "center_padding2";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                fixed : 0 1;
+                               min: 0 3;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_y: "entry2.swallow";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to_y: "entry2.swallow";
+                               align: 0.5 0.0;
+                color: 255 0 0 128;
+                       }
+               }
+               part {
+                       name: "bg_rect";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1.relative: 0.0 1.0;
+                               rel1.to_y: "center_padding2";
+                               rel2.relative: 1.0 0.0;
+                               rel2.to_y: "bottom_padding";
+                color: 50 50 50 200;
+                       }
+               }
+               part {
+                       name: "file.text";
+                       type: TEXTBLOCK;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1.relative: 0.0 0.0;
+                               rel1.to_y: "bg_rect";
+                               rel2.relative: 1.0 1.0;
+                               rel2.to_y: "bg_rect";
+                fixed: 1 1;
+                               text {
+                                       style: "dnd_layout_textblock_style";
+                                       min: 0 0;
+                                       align: 0 0;
+                               }
+                       }
+               }
+               part {
+                       name: "bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                fixed : 0 1;
+                               min: 0 15;
+                               rel1.relative: 0.0 1.0;
+                               rel2.relative: 1.0 1.0;
+                               align: 0.5 1.0;
+                color: 255 255 0 128;
+                       }
+               }
+       }//end parts
+} //end group
+
+group { name: "dnd/box_layout";
+       parts {
+               part {
+                       name: "bg_for_dnd";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 1;
+                               color: 0 255 255 50;
+                               min: 4*150 150;
+                       }
+               }
+               part {
+                       name: "box_swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       offset: 0 0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       offset: 0 0;
+                               }
+                       }
+               }
+       } //end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/entry.edc b/live.viewer/dbox.app/data/groups/entry.edc
new file mode 100644 (file)
index 0000000..c592f06
--- /dev/null
@@ -0,0 +1,329 @@
+/*\r
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ *  Licensed under the Apache License, Version 2.0 (the "License");\r
+ *  you may not use this file except in compliance with the License.\r
+ *  You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ *  Unless required by applicable law or agreed to in writing, software\r
+ *  distributed under the License is distributed on an "AS IS" BASIS,\r
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ *  See the License for the specific language governing permissions and\r
+ *  limitations under the License.\r
+ *\r
+ */\r
+\r
+   group { \r
+               name: "entry_test";             \r
+               parts{  \r
+                       part { \r
+                               name: "bg";\r
+                               type: RECT;\r
+                               mouse_events: 1;                                \r
+                               scale:1;\r
+\r
+                               description {                                           \r
+                                       state: "default" 0.0;                                           \r
+                                       color: 0 0 0 0;\r
+                                       rel1.relative: 0.0 0.0;\r
+                                       rel2.relative: 1.0 1.0;\r
+                               }                               \r
+                       }\r
+                       part{\r
+                               name: "top_padding";\r
+                               type: RECT;\r
+                               scale: 1; //allow scaling\r
+\r
+                               description {\r
+                                       state: "default" 0.0;\r
+                                       min : 0 24; //minimum size for gap filler\r
+                                       fixed: 0 1;\r
+                                       rel1 { relative: 0 0;to:bg; }\r
+                                       rel2 { relative: 1 0;to:bg; }\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                        }      \r
+                        part {         \r
+                               name: "left_padding";   \r
+                               type: RECT;\r
+                               scale: 1;\r
+\r
+                               description {\r
+                                       state: "default" 0.0;\r
+                                       min : 10 0; //minimum size for gap filler                               \r
+                                       fixed: 1 0;\r
+                                       rel1 { relative: 0 0; to: "bg"; }\r
+                                       rel2 { relative: 0 1; to: "bg"; }\r
+                                       color: 0 0 0 0;\r
+                                       align: 0 0;\r
+                               }\r
+                       } \r
+                        part {         \r
+                               name: "bg_entry";       \r
+                               type: RECT;\r
+                               mouse_events: 0;\r
+                               scale:1;                                        \r
+\r
+                               description {                                                   \r
+                                       state: "default" 0.0;   \r
+                                       min: 0 75;\r
+                                       max: 480 75;\r
+                                       fixed:1 1;\r
+                                       rel1 { relative: 0.0  1.0;to_y:top_padding;}                                                    \r
+                                       color: 0 0 0 0;\r
+                                       align: 0 0;\r
+                               } \r
+                       } \r
+\r
+                       part {  \r
+                               name: "entry_part";     \r
+                               type: SWALLOW;\r
+                               mouse_events: 1;\r
+                               scale:1;\r
+                               \r
+                               description {           \r
+                                       min : 0 75; //minimum size for gap filler\r
+                                       max: 5000 75;\r
+                                       fixed: 1 1;\r
+                                       state: "default" 0.0;                                           \r
+                                       rel1 { relative: 1.0  0.0;to_x:left_padding;to_y:bg_entry;}             \r
+                                       align: 0 0;\r
+                               } \r
+                       } \r
+                       part {\r
+                               name: "padding";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               description { state: "default" 0.0;\r
+                                       min : 0 30;\r
+                                       align: 0 1;\r
+                                       rel1 { relative: 0 1.0; to_y: "entry_part"; }\r
+                                       rel2 { relative: 1 1.0; }\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+               }\r
+       } \r
+\r
+group {\r
+   name: "entry_test_multi";\r
+   parts{\r
+      part{\r
+         name: "top_padding";\r
+         type: RECT;\r
+         scale: 1; //allow scaling\r
+         description {\r
+            state: "default" 0.0;\r
+            min : 0 24; //minimum size for gap filler\r
+            fixed: 0 1;\r
+            rel1.relative: 0 0;\r
+            rel2.relative: 1 0;\r
+            color: 0 0 0 0;\r
+         }\r
+      }\r
+      part {\r
+         name: "left_padding";\r
+         type: RECT;\r
+         scale: 1;\r
+         description {\r
+            state: "default" 0.0;\r
+            min : 10 0; //minimum size for gap filler\r
+            fixed: 1 0;\r
+            rel1.relative: 0 0;\r
+            rel2.relative: 0 1;\r
+            color: 0 0 0 0;\r
+            align: 0 0;\r
+         }\r
+      }\r
+      part {\r
+         name: "entry_part";\r
+         type: SWALLOW;\r
+         mouse_events: 1;\r
+         scale:1;\r
+         description {\r
+            state: "default" 0.0;\r
+            rel1 {\r
+               relative: 1.0 0.0;\r
+               to_x:left_padding;\r
+            }\r
+         align: 0 0;\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group {\r
+      name: "entry_test_change_text_size";\r
+         parts{\r
+                 part{ name: "bg";\r
+            type: RECT;\r
+            mouse_events: 0;\r
+            scale: 1;\r
+               description{\r
+               state: "default" 0.0;\r
+               color: 0 0 0 0;\r
+                  rel1.relative: 0 0;\r
+                  rel2.relative: 1 1;\r
+               }\r
+                 }\r
+                 part{ name: "top_padding";\r
+           type: RECT;\r
+           scale: 1;\r
+                  description {\r
+              state: "default" 0.0;\r
+              min: 0 24;\r
+              fixed: 0 1;\r
+                 rel1 {relative: 0 0; to: "bg";}\r
+                 rel2 {relative: 1 0; to: "bg";}\r
+              color: 0 0 0 0;\r
+                  }\r
+                 }\r
+                 part { name: "left_padding";\r
+            type: RECT;\r
+            scale: 1;\r
+               description {\r
+               state: "default" 0.0;\r
+               min: 10 0;\r
+               fixed: 1 0;\r
+                  rel1{ relative: 0 0; to: "bg"; }\r
+                  rel2{ relative: 0 1; to: "bg"; }\r
+               color: 0 0 0 0;\r
+               align: 0 0;\r
+               }\r
+                 }\r
+                 part { name: "box1";\r
+              type: RECT;\r
+              scale: 1;\r
+                 description {\r
+                 state: "default" 0.0;\r
+                 min: 0 80;\r
+                 fixed: 0 1;\r
+                    rel1 { relative: 1.0 1.0; to_x: "left_padding"; to_y: "top_padding";}\r
+                                rel2 { relative: 1.0 1.0; to: "bg"; to_y: "top_padding";}\r
+                 color: 0 0 0 0;\r
+                 align: 0 0;\r
+                 }\r
+                 }\r
+                 part { name: "label";\r
+              type: SWALLOW;\r
+              mouse_events: 1;\r
+              scale: 1;\r
+                 description {\r
+                 state: "default" 0.0;\r
+                 min: 180 80;\r
+                 max: 180 80;\r
+                 fixed: 1 1;\r
+                    rel1 { relative: 0.0 0.0; to: "box1";}\r
+                                rel2 { relative: 1.0 1.0; to: "box1";}\r
+                 align: 0 0.5;\r
+                 }\r
+                 }\r
+                 part { name: "entry_size";\r
+              type: SWALLOW;\r
+              mouse_events: 1;\r
+              scale: 1;\r
+                 description {\r
+                 state: "default" 0.0;\r
+                 min: 100 80;\r
+                 max: 100 80;\r
+                 fixed: 1 1;\r
+                    rel1 { relative: 1.0 0.0; to: "label";}\r
+                                rel2 { relative: 1.0 1.0; to: "box1";}\r
+                 align: 0 0.5;\r
+                 }\r
+                 }\r
+                  part { name: "button";\r
+              type: SWALLOW;\r
+              mouse_events: 1;\r
+              scale: 1;\r
+                 description {\r
+                 state: "default" 0.0;\r
+                    rel1 { relative: 1.0 0.0; to: "entry_size"; offset: 10 0;}\r
+                                rel2 { relative: 1.0 1.0; to: "box1";}\r
+                 align: 0 0.5;\r
+                 }\r
+                 }\r
+                 part {\r
+              name: "entry_part1";\r
+              type: SWALLOW;\r
+              mouse_events: 1;\r
+              scale: 1;\r
+                 description {\r
+                 state: "default" 0.0;\r
+                 min: 0 80;\r
+                 max: 999999 250;\r
+                 fixed: 0 0;\r
+                    rel1 { relative: 0.0 1.0; to: "box1";}\r
+                 align: 0 0;\r
+                 }\r
+                 }\r
+                 part {\r
+              name: "middle_padding";\r
+              type: RECT;\r
+              mouse_events: 0;\r
+                         description {\r
+                 state: "default" 0.0;\r
+                 color: 0 0 0 0;\r
+                 min: 1 20;\r
+                 max: 9999999 20;\r
+                    rel1 { relative: 0.0 1.0; to: "entry_part1";}\r
+                 align: 0 0;\r
+                         }\r
+                }\r
+                part { name: "entry_part2";\r
+             type: SWALLOW;\r
+             mouse_events: 1;\r
+             scale: 1;\r
+                description {\r
+                state: "default" 0.0;\r
+                min: 0 80;\r
+                fixed: 0 0;\r
+                   rel1 { relative: 0.0 1.0; to: "middle_padding";}\r
+                align: 0 0;\r
+                }\r
+                }\r
+         }\r
+}\r
+\r
+group { name: "entry_test_translate";\r
+       parts {\r
+               part { name: "check_part";\r
+                       type: SWALLOW;\r
+                       mouse_events: 1;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min: 1 120;\r
+                               max: 999999 120;\r
+                               align: 0 0;\r
+                       }\r
+               }\r
+               part { name: "padding";\r
+                       type: RECT;\r
+                       mouse_events: 0;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min: 1 40;\r
+                               max: 999999 40;\r
+                               rel1 { relative: 0.0 1.0; to: "check_part"; }\r
+                               align: 0 0;\r
+                               color: 0 0 0 0;\r
+                       }\r
+               }\r
+               part { name: "entry_part";\r
+                       type: SWALLOW;\r
+                       mouse_events: 1;\r
+                       scale: 1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               min: 0 100;\r
+                               fixed: 0 0;\r
+                               rel1 { relative: 0.0 1.0; to: "padding";}\r
+                               align: 0 0;\r
+                       }\r
+               }\r
+       }\r
+}\r
diff --git a/live.viewer/dbox.app/data/groups/floating.edc b/live.viewer/dbox.app/data/groups/floating.edc
new file mode 100644 (file)
index 0000000..7ed3d10
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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_PADDING_WIDTH 170.0
+#define BUTTON_PADDING_HEIGHT 22.0
+#define BUTTON_MIN_WIDTH 350
+#define BUTTON_MIN_HEIGHT 64
+   group { name: "elmdemo-test/floating";
+      parts {
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description { state: "default" 0.0;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT; //minimum size for gap filler
+               fixed: 0 1;
+               rel2.relative: 1.0 0.0;
+               color:  0 0 0 0;
+               align: 0 0;
+            }
+         }
+         part { name: "btn_default";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: BUTTON_MIN_WIDTH BUTTON_MIN_HEIGHT;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "top_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "middle_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min : BUTTON_PADDING_WIDTH BUTTON_PADDING_HEIGHT; //minimum size for gap filler
+               color:  0 0 0 0;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_default";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "btn_default";
+               }
+               align: 0.5 0;
+            }
+         }
+         part { name: "btn_default2";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: BUTTON_MIN_WIDTH BUTTON_MIN_HEIGHT;
+               rel1 {
+                  relative: 0.5 1.0;
+                  to_y: "middle_padding";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_y: "middle_padding";
+               }
+               align: 0.5 0;
+            }
+         }
+      } //end parts
+   } //end group
+
+#undef BUTTON_PADDING_WIDTH
+#undef BUTTON_PADDING_HEIGHT
+#undef BUTTON_MIN_WIDTH
+#undef BUTTON_MIN_HEIGHT
+
diff --git a/live.viewer/dbox.app/data/groups/fonteffecttest.edc b/live.viewer/dbox.app/data/groups/fonteffecttest.edc
new file mode 100644 (file)
index 0000000..9ab819f
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   styles
+   {
+      style { name: "textblock_effect_test";
+         //base: "font=Tizen:style=Regular font_size=28 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium font_size=30 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium font_size=25 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium,Italic font_size=25 align=left color=#000000 wrap=char";
+         base: "font=Arial:style=Italic font_size=25 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "textblock_effect_test2";
+         //base: "font=Tizen:style=Regular,Italic font_size=28 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium,Italic font_size=30 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Regular,Italic font_size=30 align=left color=#000000 wrap=char";
+         base: "font=Georgia:style=Italic font_size=30 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "textblock_effect_test3";
+         //base: "font=Tizen:style=Regular font_size=28 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium font_size=30 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium font_size=35 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Regular,Italic font_size=35 align=left color=#000000 wrap=char";
+         base: "font=Tizen:style=Bold,Italic font_size=35 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "textblock_effect_test4";
+         //base: "font=Tizen:style=Regular,Italic font_size=28 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium,Italic font_size=30 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium,Italic font_size=40 align=left color=#000000 wrap=char";
+         //base: "font=Tizen:style=Medium font_size=40 align=left color=#000000 wrap=char";
+         base: "font=Times:style=Italic font_size=40 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "strike_textblock_effect";
+         base: "font=Tizen:style=Roman,Italic font_size=35 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+         tag:  "strike" "+ strikethrough=on strikethrough_color=#FF0000";
+      }
+   }
+
+   name: "group_fonteffecttest";
+   parts {
+      part { name: "background";
+         type: RECT;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+         }
+      }
+      // 1st item
+      part { name: "text1";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 0.0; }
+            rel2 { relative: 1.0 0.0; }
+            text {
+               //font: "Tizen:style=Regular,Italic";
+               //font: "Tizen:style=Medium,Italic";
+               font: "Arial:style=Italic";
+               //size: 28;
+               size: 30;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+         color: 0 0 0 255;
+         }
+      }
+      // 2nd item
+      part { name: "text2";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text1"; }
+            rel2 { relative: 1.0 1.0; to_y: "text1"; }
+            text {
+               //font: "Tizen:style=Regular";
+               //font: "Tizen:style=Medium";
+               //font: "Tizen:style=Regular,Italic";
+               font: "Georgia:style=Italic";
+               //size: 28;
+               //size: 30;
+               size: 35;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+            color: 0 0 0 255;
+         }
+      }
+      // 3rd item
+      part { name: "text3";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text2"; }
+            rel2 { relative: 1.0 1.0; to_y: "text2"; }
+            text {
+               //font: "Tizen:style=Medium,Italic";
+               font: "Tizen:style=Bold,Italic";
+               //font: "Tizen:style=Regular,Italic";
+               //size: 28;
+               //size: 30;
+               size: 40;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+            color: 0 0 0 255;
+         }
+      }
+      // 1st textblock item
+      part { name: "textblock1";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text3"; }
+            rel2 { relative: 1.0 1.0; to_y: "text3"; }
+            text {
+               style: textblock_effect_test;
+               min: 1 1;
+            }
+         }
+      }
+      // 2nd textblock item
+      part { name: "textblock2";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock1"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock1"; }
+            text {
+               style: textblock_effect_test2;
+               min: 1 1;
+            }
+         }
+      }
+      // 3rd textblock item
+      part { name: "textblock3";
+         type: TEXTBLOCK;
+ //        scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock2"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock2"; }
+            text {
+               style: textblock_effect_test3;
+               min: 1 1;
+            }
+         }
+      }
+      // 4th textblock item
+      part { name: "textblock4";
+         type: TEXTBLOCK;
+//         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock3"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock3"; }
+            text {
+               style: textblock_effect_test4;
+               min: 1 1;
+            }
+         }
+      }
+      // 1st strike
+      part { name: "strike1";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock4"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock4"; }
+            text {
+               style: strike_textblock_effect;
+               min: 1 1;
+            }
+         }
+      }
+      // 2nd strike
+      part { name: "strike2";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "strike1"; }
+            rel2 { relative: 1.0 1.0; to_y: "strike1"; }
+            text {
+               style: strike_textblock_effect;
+               min: 1 1;
+            }
+         }
+      }
+
+      part { name: "bottom_padding";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            visible: 0;
+            rel1 { relative: 0 1; to_y: "strike2"; }
+            align: 0.5 1.0;
+         }
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/fonttest.edc b/live.viewer/dbox.app/data/groups/fonttest.edc
new file mode 100644 (file)
index 0000000..7e9df8d
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   styles
+   {
+      style { name: "textblock_style_test";
+         base: "font=Tizen:style=Bold font_size=35 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "textblock_style_test2";
+         base: "font=Tizen:style=Roman font_size=35 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+      style { name: "strike_textblock_style";
+         base: "font=Tizen:style=Roman font_size=35 align=left color=#000000 wrap=char text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+         tag:  "strike" "+ strikethrough=on strikethrough_color=#FF0000";
+      }
+   }
+
+   name: "group_fonttest";
+   parts {
+      part { name: "background";
+         type: RECT;
+         mouse_events: 0;
+         description { state: "default" 0.0;
+         }
+      }
+      // 1st item
+      part { name: "text1";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 0.0; }
+            rel2 { relative: 1.0 0.0; }
+            text {
+               font: "Tizen:style=Bold";
+               size: 35;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+         color: 0 0 0 255;
+         }
+      }
+      // 2nd item
+      part { name: "text2";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text1"; }
+            rel2 { relative: 1.0 1.0; to_y: "text1"; }
+            text {
+               font: "Tizen:style=Roman";
+               size: 35;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+            color: 0 0 0 255;
+         }
+      }
+      // 3rd item
+      part { name: "text3";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 60;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text2"; }
+            rel2 { relative: 1.0 1.0; to_y: "text2"; }
+            text {
+               font: "Tizen:style=Medium";
+               size: 35;
+               min: 1 1;
+               align: 0 0.5;
+               text_class: "tizen";
+            }
+            color: 0 0 0 255;
+         }
+      }
+      // 1st textblock item
+      part { name: "textblock1";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "text3"; }
+            rel2 { relative: 1.0 1.0; to_y: "text3"; }
+            text {
+               style: textblock_style_test;
+               min: 1 1;
+            }
+         }
+      }
+      // 2nd textblock item
+      part { name: "textblock2";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock1"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock1"; }
+            text {
+               style: textblock_style_test2;
+               min: 1 1;
+            }
+         }
+      }
+      // 3rd textblock item
+      part { name: "textblock3";
+         type: TEXTBLOCK;
+ //        scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock2"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock2"; }
+            text {
+               style: textblock_style_test2;
+               min: 1 1;
+            }
+         }
+      }
+      // 4th textblock item
+      part { name: "textblock4";
+         type: TEXTBLOCK;
+//         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock3"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock3"; }
+            text {
+               style: textblock_style_test2;
+               min: 1 1;
+            }
+         }
+      }
+      // 1st strike
+      part { name: "strike1";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "textblock4"; }
+            rel2 { relative: 1.0 1.0; to_y: "textblock4"; }
+            text {
+               style: strike_textblock_style;
+               min: 1 1;
+            }
+         }
+      }
+      // 2nd strike
+      part { name: "strike2";
+         type: TEXTBLOCK;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0;
+            rel1 { relative: 0.05 1.0; to_y: "strike1"; }
+            rel2 { relative: 1.0 1.0; to_y: "strike1"; }
+            text {
+               style: strike_textblock_style;
+               min: 1 1;
+            }
+         }
+      }
+
+      part { name: "bottom_padding";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            visible: 0;
+            rel1 { relative: 0 1; to_y: "strike2"; }
+            align: 0.5 1.0;
+         }
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/gengrid_customized_theme.edc b/live.viewer/dbox.app/data/groups/gengrid_customized_theme.edc
new file mode 100644 (file)
index 0000000..e0f003b
--- /dev/null
@@ -0,0 +1,879 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *
+ */
+
+/****************Gengrid Textblock Styles******************/
+
+   styles {
+      style { name: "gengrid_textblock_style";
+         base: "font=Tizen:style=Bold font_size=26 color=#FAFAFAFF align=center wrap=mixed ellipsis=1.0 text_class=tizen";
+         tag: "br" "\n";
+         tag: "ps" "ps";
+         tag: "tab" "\t";
+         tag: "b" "+ font_weight=Bold";
+      }
+   }
+
+/****************Gengrid Macros******************/
+
+   #define GENGRID_ITEM_SELECT_VI_EFFECT \
+   } \
+   description { state: "pressed" 0.0; \
+      inherit: "default" 0.0; \
+      map { \
+         on: 1; \
+         perspective: "persp1"; \
+         smooth: 0; \
+      } \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      map { \
+         on: 1; \
+         perspective: "persp"; \
+         smooth: 1; \
+      }
+
+   #define GENGRID_PART_CHECK(PART) \
+         part { name: "check_top_left_padding"; \
+            type: RECT; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+               min: 6 6; \
+               align: 0.0 0.0; \
+               fixed: 1 1; \
+               rel1 { \
+                  relative: 0.0 0.0; \
+                  to: PART; \
+               } \
+               rel2 { \
+                  relative: 0.0 0.0; \
+                  to: PART; \
+               } \
+            } \
+         } \
+         part { name: "check_bg_clip"; \
+            type: RECT; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+            } \
+            description { state: "visible" 0.0; \
+               visible: 1; \
+            } \
+         } \
+         part { name: "elm.check.bg"; \
+            type: IMAGE; \
+            mouse_events: 0; \
+            scale: 1; \
+            clip_to: "check_bg_clip"; \
+            description { state: "default" 0.0; \
+               min: 63 63; \
+               align: 0.0 0.0; \
+               fixed: 1 1; \
+               rel1 { \
+                  relative: 1.0 1.0; \
+                  to: "check_top_left_padding"; \
+               } \
+               rel2 { \
+                  relative: 1.0 1.0; \
+                  to: "check_top_left_padding"; \
+               } \
+               image.normal: "00_check_bg.png"; \
+               fill.smooth : 0; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               map { \
+                  on: 1; \
+                  perspective: "persp1"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_press_bg.png"; \
+               map { \
+                  on: 1; \
+                  perspective: "persp"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_dim_bg.png"; \
+            } \
+         } \
+         part { name: "elm.check.bg2"; \
+            type: IMAGE; \
+            mouse_events: 0; \
+            scale: 1; \
+            clip_to: "check_bg_clip"; \
+            description { state: "default" 0.0; \
+               rel1.to: "elm.check.bg"; \
+               rel2.to: "elm.check.bg"; \
+               image.normal: "00_check_inactivated.png"; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               map { \
+                  on: 1; \
+                  perspective: "persp1"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_inactivated_press.png"; \
+               map { \
+                  on: 1; \
+                  perspective: "persp"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_inactivated_dim.png"; \
+            } \
+         } \
+         part { name: "check_clip"; \
+            type: RECT; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+               rel1.to: "elm.check.bg"; \
+               rel2.to: "elm.check.bg"; \
+               rel2.relative: 0.0 1.0; \
+               color: 255 255 255 255; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+            description { state: "checked" 0.0; \
+               inherit: "visible" 0.0; \
+               rel2.relative: 1.0 1.0; \
+            } \
+         } \
+         part { name: "elm.check"; \
+            mouse_events: 0; \
+            scale: 1; \
+            clip_to: "check_clip"; \
+            description { state: "default" 0.0; \
+               rel1.to: "elm.check.bg"; \
+               rel2.to: "elm.check.bg"; \
+               image.normal: "00_check_activated.png"; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               map { \
+                  on: 1; \
+                  perspective: "persp1"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_activated_press.png"; \
+               map { \
+                  on: 1; \
+                  perspective: "persp"; \
+                  smooth: 0; \
+               } \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_activated_dim.png"; \
+            } \
+         }
+
+   #define GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT( TARGET ) \
+         program { name: "vi_pressed"; \
+            action: STATE_SET "pressed" 0.0; \
+            TARGET \
+            after: "vi_zoom_in"; \
+         } \
+         program { name: "vi_zoom_in"; \
+            action: STATE_SET "selected" 0.0; \
+            TARGET \
+            transition: SIN_FAC 0.167 1.1; \
+         } \
+         program { name: "vi_zoom_out"; \
+            action: STATE_SET "pressed" 0.0; \
+            TARGET \
+            transition: SIN_FAC 0.167 1.1; \
+            after: "vi_default"; \
+         } \
+         program { name: "vi_default"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         }
+
+   #define GENGRID_PROGRAM_DEFAULT( TARGET ) \
+         program { name: "default"; \
+            signal: "elm,state,default"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "focus_bg"; \
+            TARGET \
+         } \
+
+   #define GENGRID_PROGRAM_CHECK \
+         program { name: "check_show"; \
+            signal: "check,state,show"; \
+            source: ""; \
+            script { \
+               set_int(check_mode, 1); \
+               set_state(PART:"check_bg_clip", "visible", 0.0); \
+            } \
+         } \
+         program { name: "check_hide"; \
+            signal: "check,state,hide"; \
+            source: ""; \
+            script { \
+               set_int(check_mode, 0); \
+               set_state(PART:"check_bg_clip", "default", 0.0); \
+            } \
+         } \
+         program { name: "check_on_no_effect"; \
+            signal: "check,state,on,no_effect"; \
+            source: ""; \
+            script { \
+               if (get_int(check_mode)) { \
+                  set_state(PART:"check_clip", "checked", 0.0); \
+               } \
+            } \
+         } \
+         program { name: "check_off"; \
+            signal: "check,state,off"; \
+            source: ""; \
+            action: STATE_SET "default" 0.0; \
+            target: "check_clip"; \
+         } \
+         program { name: "check_on"; \
+            signal: "check,state,on"; \
+            source: ""; \
+            script { \
+               if (get_int(check_mode)) { \
+                  set_state(PART:"check_clip", "visible", 0.0); \
+                  run_program(PROGRAM:"check_on_transit"); \
+               } \
+            } \
+         } \
+         program { name: "check_on_transit"; \
+            action: STATE_SET "checked" 0.0; \
+            transition: LINEAR 0.267; \
+            target: "check_clip"; \
+         } \
+         program { name: "check_disabled"; \
+            signal: "check,state,disabled"; \
+            source: ""; \
+            action: STATE_SET "disabled" 0.0; \
+            target: "elm.check.bg"; \
+            target: "elm.check.bg2"; \
+            target: "elm.check"; \
+         }
+
+   group { name: "elm/gengrid/item/elm_demo_tizen/customized_default_style/default";
+      data.item: "contents" "elm.swallow.icon elm.swallow.end";
+      parts {
+         part { name: "bg";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "left_top_padding";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 10 24;
+               align: 0.0 0.0;
+               visible: 0;
+               rel1.to: "bg";
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "bg";
+               }
+            }
+         }
+         part { name: "right_bottom_padding";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 10 0;
+               align: 1.0 1.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "bg";
+               }
+               rel2.to: "bg";
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "right_bottom_padding";
+               }
+            }
+         }
+         part { name: "elm.swallow.end";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1.to: "elm.swallow.icon";
+               rel2.to: "elm.swallow.icon";
+            }
+         }
+         part { name: "reorder_bg";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               color: 0 0 0 128;
+               visible: 0;
+               rel1.to: "elm.swallow.icon";
+               rel2.to: "elm.swallow.icon";
+            }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+      }
+      programs {
+         program { name: "go_reorder_disabled";
+            signal: "elm,state,reorder,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "reorder_bg";
+            transition: ACCELERATE 0.3;
+         }
+         program { name:    "go_reorder_enabled";
+            signal:  "elm,state,reorder,enabled";
+            source:  "elm";
+            action:  STATE_SET "enabled" 0.0;
+            target:  "reorder_bg";
+            transition: ACCELERATE 0.3;
+         }
+      }
+   }
+
+   group { name: "elm/gengrid/item/elm_demo_tizen/customized_photo_style/default";
+      data.item: "contents" "elm.swallow.icon elm.swallow.end";
+      parts {
+         part { name: "bg";
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "left_top_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 24;
+               align: 0.0 0.0;
+               visible: 0;
+               rel1.to: "bg";
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "bg";
+               }
+            }
+         }
+         part { name: "right_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 10 0;
+               align: 1.0 1.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "bg";
+               }
+               rel2.to: "bg";
+            }
+         }
+         part { name: "item_bg";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "right_bottom_padding";
+               }
+            }
+         }
+         part { name: "photo_frame";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to: "elm.swallow.icon";
+                  offset: -2 -2;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to: "elm.swallow.icon";
+                  offset: 1 1;
+               }
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1.to_x: "right_bottom_padding";
+               rel1 {
+                  relative: 0.5 0.5;
+                  to: "item_bg";
+               }
+               rel2 {
+                  relative: 0.5 0.5;
+                  to: "item_bg";
+               }
+               align: 0.5 0.5;
+            }
+         }
+         part { name: "elm.swallow.end";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1.to: "item_bg";
+               rel2.to: "item_bg";
+            }
+         }
+         part { name: "reorder_bg";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 128;
+               visible: 0;
+               rel1.to: "elm.swallow.icon";
+               rel2.to: "elm.swallow.icon";
+            }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+      }
+      programs {
+         program { name: "go_reorder_disabled";
+            signal: "elm,state,reorder,disabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "reorder_bg";
+            transition: ACCELERATE 0.3;
+         }
+         program { name:    "go_reorder_enabled";
+            signal:  "elm,state,reorder,enabled";
+            source:  "elm";
+            action:  STATE_SET "enabled" 0.0;
+            target:  "reorder_bg";
+            transition: ACCELERATE 0.3;
+         }
+      }
+   }
+
+   group { name: "elm/gengrid/item/elm_demo_tizen/customized_incheck_style/default";
+      data.item: "focus_highlight" "on";
+      data.item: "texts" "elm.text";
+      data.item: "contents" "elm.swallow.icon elm.swallow.block";
+
+      images {
+         image : "00_focus_01.png" COMP;
+         image : "00_sub_depth_thumbs_bg.png" COMP;
+         image: "00_check_bg.png" COMP;
+         image: "00_check_dim_bg.png" COMP;
+         image: "00_check_activated_press.png" COMP;
+         image: "00_check_activated_dim.png" COMP;
+         image: "00_check_activated.png" COMP;
+         image: "00_check_inactivated_press.png" COMP;
+         image: "00_check_inactivated_dim.png" COMP;
+         image: "00_check_inactivated.png" COMP;
+         image: "00_check_press_bg.png" COMP;
+      }
+
+      script {
+         public check_mode = 0;
+         public selected = 0;
+      }
+      parts {
+         part { name: "persp";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: -70;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "persp1";
+            type: RECT;
+            description { state: "default" 0.0;
+               min: 32 32;
+               max: 32 32;
+               fixed: 1 1;
+               align: 0.5 0.5;
+               color: 0 0 0 0;
+               visible: 1;
+               perspective {
+                  zplane: 0;
+                  focal: 1000;
+               }
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "left_top_padding";
+            type: SPACER;
+            scale : 1;
+            description { state: "default" 0.0;
+               min: 6 6;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               rel1.to: "bg";
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "bg";
+               }
+            }
+         }
+         part { name: "right_bottom_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 6 6;
+               align: 1.0 1.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "bg";
+               }
+               rel2.to: "bg";
+            }
+         }
+         part { name: "item_bg";
+            type: IMAGE;
+            description { state: "default" 0.0;
+               visible: 1;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "right_bottom_padding";
+               }
+               image.normal: "00_sub_depth_thumbs_bg.png";
+               image.border: 13 12 12 13;
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_bg_left_top_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+                          min: 1 1;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               rel1.to: "item_bg";
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "item_bg";
+               }
+            }
+         }
+         part { name: "item_bg_right_bottom_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 1 1;
+               align: 1.0 1.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "item_bg";
+               }
+               rel2.to: "item_bg";
+            }
+         }
+         part { name: "item_real_bg";
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "item_bg_left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "item_bg_right_bottom_padding";
+               }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "item_real_bg_left_top_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               rel1.to: "item_real_bg";
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "item_real_bg";
+               }
+            }
+         }
+         part { name: "item_real_bg_right_bottom_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 0;
+               align: 1.0 1.0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "item_real_bg";
+               }
+               rel2.to: "item_real_bg";
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to: "item_real_bg_left_top_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to: "item_real_bg_right_bottom_padding";
+               }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "text_left_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 6 0;
+               align: 0.0 0.5;
+               rel1 {
+                  relative: 0.0 0.0;
+                  to: "item_bg";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to: "item_bg";
+               }
+            }
+         }
+         part { name: "text_right_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 6 0;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "item_bg";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to: "item_bg";
+               }
+            }
+         }
+         part { name: "text_bottom_padding";
+            type: SPACER;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 10;
+               align: 0.5 1.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to: "elm.swallow.icon";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to: "elm.swallow.icon";
+               }
+            }
+         }
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 26;
+               align: 0.5 1.0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to_x: "text_left_padding";
+                  to_y: "text_bottom_padding";
+               }
+               rel2 {
+                  relative: 0.0 0.0;
+                  to_x: "text_right_padding";
+                  to_y: "text_bottom_padding";
+               }
+               text {
+                  style: "gengrid_textblock_style";
+                  min: 0 1;
+                  align: 0.5 1.0;
+               }
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         part { name: "elm.swallow.block";
+            type: SWALLOW;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to : "elm.text";
+               rel2.to : "elm.text";
+               GENGRID_ITEM_SELECT_VI_EFFECT
+            }
+         }
+         GENGRID_PART_CHECK("item_bg");
+
+         part { name: "reorder_bg";
+            type: RECT;
+            repeat_events: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               rel1.to: "item_bg";
+               rel2.to: "item_bg";
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "focus_bg";
+            type: IMAGE;
+            mouse_events: 0;
+            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";
+               }
+               image.normal: "00_focus_01.png";
+               image.border: 8 8 8 8;
+            }
+            description { state: "enabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+      }
+      programs {
+         program { name: "selected";
+            signal: "elm,state,selected";
+            source: "elm";
+            script {
+               if (!get_int(selected)) {
+                  set_int(selected, 1);
+                  run_program(PROGRAM:"vi_pressed");
+               }
+            }
+         }
+         program { name: "unselected";
+            signal: "elm,state,unselected";
+            source: "elm";
+            script {
+               if (get_int(selected)) {
+                  set_int(selected, 0);
+                  run_program(PROGRAM:"vi_zoom_out");
+               }
+            }
+         }
+         GENGRID_PROGRAM_ITEM_SELECT_VI_EFFECT(
+            target: "item_bg";
+            target: "item_real_bg";
+            target: "elm.swallow.icon";
+            target: "elm.text";
+            target: "elm.swallow.block";
+            target: "elm.check";
+            target: "elm.check.bg";
+            target: "elm.check.bg2";
+         )
+         program { name: "touch_snd";
+            signal: "mouse,clicked,1";
+            source: "item_bg";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"item_bg", st, 30, vl);
+               if (!strcmp(st, "selected") ||
+                   !strcmp(st, "pressed"))
+                  play_sample("touch_sound", 1.0);
+            }
+         }
+         program { name: "action_focus";
+            signal: "elm,action,focus_highlight,show";
+            source: "elm";
+            action: STATE_SET "enabled" 0.0;
+            target: "focus_bg";
+         }
+         program { name: "action_unfocus";
+            signal: "elm,action,focus_highlight,hide";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "focus_bg";
+         }
+         GENGRID_PROGRAM_DEFAULT(
+            target: "item_bg";
+            target: "item_real_bg";
+            target: "elm.swallow.icon";
+            target: "elm.text";
+            target: "elm.swallow.block";
+            target: "elm.check";
+            target: "elm.check.bg";
+            target: "elm.check.bg2";
+            target: "check_bg_clip";
+            target: "check_clip";
+         )
+         GENGRID_PROGRAM_CHECK
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/genlist.edc b/live.viewer/dbox.app/data/groups/genlist.edc
new file mode 100644 (file)
index 0000000..f8dd811
--- /dev/null
@@ -0,0 +1,244 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+       group {
+               name: "genlist_swallow_style";
+               data.item: "contents" "icon1 icon2 icon3";
+               images {
+                               image: "01_indicator_emn.png" COMP;
+                               image: "01_indicator_CS_3G_active.png" COMP;
+                               image: "01_indicator_im_online.png" LOSSY 60;
+                       }
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min : 96 32; //minimum size for gap filler
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0  0.0; }
+                                       rel2 { relative: 1.0  1.0; }
+                                       color: 0 0 0 0;
+                                       }
+                       }
+
+                       part {
+                               name: "icon1";
+                               type: IMAGE;
+                               scale:1;
+
+                               description {
+                                       min: 31 31;
+                                       max: 31 31;
+                                       fixed: 1 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0  0.0; }
+                                       rel2 { relative: 1.0  1.0;  to:bg;}
+                                       image {
+                                               normal, "01_indicator_emn.png";
+                                       }
+                                       align: 0 0;
+                               }
+                       }
+
+                       part{
+                               name: "icon2";
+                               type: IMAGE;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min: 31 31;
+                                       max: 31 31;
+                                       fixed: 1 1;
+                                       rel1 { relative: 1.0  0.0; to:icon1; }
+                                       rel2 { relative: 1.0  1.0; to:icon1; }
+                                       image {
+                                               normal, "01_indicator_im_online.png";
+                                       }
+                                       align: 0 0;
+                               }
+                       }
+                       part {
+                               name: "icon3";
+                               type: IMAGE;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min: 31 31;
+                                       max: 31 31;
+                                       fixed: 1 1;
+                                       rel1 { relative: 1.0  0.0; to:icon2; }
+                                       rel2 { relative: 1.0  1.0; to:icon2; }
+                                       image {
+                                               normal, "01_indicator_CS_3G_active.png";
+                                       }
+                                       align: 0 0;
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "check_genlist_swallow_style";
+               data.item: "contents" "check_box";
+               parts {
+                       part {
+                               name: "check_box";
+                               type: SWALLOW;
+                               scale:1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min : 50 32; //minimum size for gap filler
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0  0.0; }
+                                       rel2 { relative: 1.0  1.0; }
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+
+       /*********************************************/
+       /* elm_layout -> Horz-handler     */
+       /*********************************************/
+       group {
+       name: "elmdemo-test/horz_handler";
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "scroller";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {relative: 0.0 0.1; to: "bg";}
+                               rel2 {relative: 1.0 1.0; to: "bg";}
+                               align: 0.5 0.5;
+                       }
+               }
+       }//end parts
+} //end group
+
+       /*********************************************/
+       /* elm_layout -> fastscroll     */
+       /*********************************************/
+       group {
+               name: "fastscroll";
+               parts {
+                       /* for transparency */
+                       part {
+                               name: "base";
+                               type: RECT;
+                               mouse_events: 0;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.content.genlist";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                               }
+                       }
+
+                       part {
+                               name: "elm.swallow.content.index";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { to: "elm.swallow.content.genlist"; }
+                                       rel2 { to: "elm.swallow.content.genlist"; }
+                               }
+                       }
+               }
+       }
+
+       group { name: "elmdemo-test/genlist_add";
+               parts{
+                       part {
+                               name: "top_padding";
+                               type: RECT;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       min : 20 20;
+                                       fixed: 1 1;
+                                       rel1 { relative: 0 0; }
+                                       rel2 { relative: 1 0; }
+                                       color:  0 0 0 0;
+                                       align: 0 0;
+                               }
+                       }
+                       part {
+                               name: "Label";
+                               type: SWALLOW;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: 300 100;
+                                       max: 300 100;
+                                       rel1 { relative: 0 1.0; to_y: "top_padding"; }
+                                       align: 0.5 0;
+                                       }
+                       }
+
+
+                       part {
+                               name: "Button";
+                               type: SWALLOW;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 100 35;
+                                       max: 100 35;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "Label";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "Label";
+                                       }
+                                       align: 0.5 0.0;
+                               }
+                       }
+               }
+       }
diff --git a/live.viewer/dbox.app/data/groups/genlist_color.edc b/live.viewer/dbox.app/data/groups/genlist_color.edc
new file mode 100644 (file)
index 0000000..f528674
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "genlist_macro.edc"
+
+group { name: "elm/genlist/item/elm_demo_tizen/dynamic_text_style_change/default";
+
+   data.item: "selectraise" "on";
+   data.item: "texts" "elm.text elm.text.sub";
+   data.item: "contents" "elm.thumbnail elm.swallow.color.bg elm.swallow.end";
+   images {
+      image: "00_list_bar_press_1x80.png" COMP;
+      image: "00_list_thumbnail_bg.png" COMP;
+   }
+   script {
+      public g_text_color_changed_state = 0;
+   }
+   parts {
+      GENLIST_PART_BASE
+      GENLIST_PART_BG_NORMAL
+      GENLIST_PART_BOTTOM_LINE
+      GENLIST_PART_PADDING_LEFT
+      GENLIST_PART_PADDING_RIGHT
+      GENLIST_PART_PADDING_TOP
+      GENLIST_PART_PADDING_BOTTOM
+
+      part { name: "elm.swallow.color.bg";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+         }
+      }
+
+      part { name: "elm.swallow.end";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "defualt" 0.0;
+            min: 190 0;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+            rel1 {
+               relative: 0.0 0.5;
+               to_x : "elm.padding.right";
+               to_y : "base";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x : "elm.padding.right";
+               to_y: "base";
+            }
+         }
+      }
+      part { name: "elm.thumbnail";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            rel1.to: "elm.thumbnail.bg";
+            rel2.to: "elm.thumbnail.bg";
+         }
+      }
+      part { name: "elm.thumbnail.bg";
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 100 100;
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "elm.padding.left";
+               to_y: "elm.padding.top";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "elm.padding.left";
+               to_y: "elm.padding.bottom";
+            }
+            image {
+               normal: "00_list_thumbnail_bg.png";
+               border: 1 1 1 1;
+               border_scale: 1;
+               middle: NONE;
+            }
+         }
+      }
+      part { name: "elm.padding.thumbnail.right";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 15 0;
+            fixed: 1 0;
+            visible: 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "elm.thumbnail";
+               to_y: "elm.padding.top";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "elm.thumbnail";
+               to_y: "elm.padding.bottom";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 40;
+            fixed: 0 1;
+            align: 0 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "elm.padding.thumbnail.right";
+               to_y: "elm.padding.top";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "elm.swallow.end";
+               to_y: "elm.padding.top";
+            }
+            color: 0 0 0 255;
+            text {
+               font: "Tizen:style=Roman";
+               size: 32;
+               min: 0 1;
+               align: 0.0 0.5;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "color_changed" 0.0;
+            inherit: "default" 0.0;
+            text {
+               font: "Tizen:style=Bold";
+            }
+            color: 0 0 255 255;
+         }
+      }
+      part { name: "elm.text.sub";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "elm.padding.thumbnail.right";
+               to_y: "elm.text";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               offset: 0 0;
+               to_x: "elm.swallow.end";
+               to_y: "elm.text";
+            }
+            color: 0 0 0 255;
+            text {
+               font: "Tizen:style=Medium";
+               size: 22;
+               min: 0 1;
+               align: 0.0 0.5;
+            }
+         }
+         description { state: "selected" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "color_changed" 0.0;
+            inherit: "default" 0.0;
+            text {
+               font: "Tizen:style=Bold";
+            }
+            color: 255 0 0 255;
+         }
+      }
+   }
+   programs {
+      program { name: "go_active";
+         signal: "elm,state,selected";
+         source: "elm";
+         action: STATE_SET "selected" 0.0;
+         target: "bg";
+         target: "elm.text";
+         target: "elm.text.sub";
+      }
+      program { name: "go_passive";
+         signal: "elm,state,unselected";
+         source: "elm";
+         script {
+            if (get_int(g_text_color_changed_state) == 1) {
+               set_state(PART:"bg", "default", 0.0);
+               set_state(PART:"elm.text", "color_changed", 0.0);
+               set_state(PART:"elm.text.sub", "color_changed", 0.0);
+            }
+            else {
+               set_state(PART:"bg", "default", 0.0);
+               set_state(PART:"elm.text", "default", 0.0);
+               set_state(PART:"elm.text.sub", "default", 0.0);
+            }
+         }
+         transition: LINEAR 0.1;
+      }
+      program { name: "change_label_color";
+         signal: "elm,state,change_label_color";
+         source: "elm";
+         script {
+            set_int (g_text_color_changed_state, 1);
+            set_state(PART:"elm.text", "color_changed", 0.0);
+            set_state(PART:"elm.text.sub", "color_changed", 0.0);
+         }
+
+      }
+      program { name: "change_label_color_default";
+         signal: "elm,state,change_label_color_default";
+         source: "elm";
+         script {
+            set_int (g_text_color_changed_state, 0);
+            set_state(PART:"bg", "default", 0.0);
+            set_state(PART:"elm.text", "default", 0.0);
+            set_state(PART:"elm.text.sub", "default", 0.0);
+         }
+      }
+   }
+}
+
diff --git a/live.viewer/dbox.app/data/groups/genlist_externals.edc b/live.viewer/dbox.app/data/groups/genlist_externals.edc
new file mode 100644 (file)
index 0000000..49ff222
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group { name: "elm_demo_tizen/layout/genlist_externals";
+      parts {
+         part { name: "bg";
+            type: RECT;
+            description { state: "default" 0.0;
+            }
+         }
+         part { name: "top_buttons";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 100;
+               fixed: 0 1;
+               color: 0 0 0 0;
+               rel1.to : "bg";
+               rel2 {
+                  relative: 1.0 0.0;
+                  to: "bg";
+               }
+            }
+         }
+         part { name: "genlist";
+            type: EXTERNAL;
+            source: "elm/genlist";
+            description { state: "default" 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to: "top_buttons";
+               }
+               rel2.to: "bg";
+               params {
+                  bool: "multi select" 0;
+                  bool: "always select" 0;
+                  bool: "no select" 0;
+                  bool: "compress" 0;
+                  bool: "height bounce" 0;
+                  bool: "widget bounce" 1;
+                  bool: "homogeneous" 0;
+                  bool: "pinch zoom mode" 0;
+               }
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/genlist_macro.edc b/live.viewer/dbox.app/data/groups/genlist_macro.edc
new file mode 100644 (file)
index 0000000..ebc26f0
--- /dev/null
@@ -0,0 +1,3709 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "tizen-dark-inc.edc"
+
+sounds {
+   sample {
+      name: "touch_sound" RAW;
+      source: "Tizen_Touch.wav";
+   }
+}
+
+//****************************************************************************//
+// *******************************  Default size macro **********************//
+//**************************************************************************//
+// if size is different for each theme, split it into each theme inc.
+
+#define GENLIST_HEIGHT_1LINE              104  // (114 - top/bottom padding)
+#define GENLIST_HEIGHT_2LINE_MAIN         57
+#define GENLIST_HEIGHT_2LINE_SUB          45
+#define GENLIST_HEIGHT_MULTILINE_SUB      38
+#define GENLIST_PART_LIST_LINE_HEIGHT     1
+#define GENLIST_HEIGHT_GROUPTITLE         46
+
+#define GENLIST_PADDING_SIZE_DEFAULT            16
+#define GENLIST_PADDING_SIZE_LEFT               26
+#define GENLIST_PADDING_SIZE_RIGHT              26
+// Dialogue group image has bottom padding (2piexl), Giant font can overlapped bottom line of image.
+#define GENLIST_PADDING_SIZE_TOP                5
+#define GENLIST_PADDING_SIZE_BOTTOM             5
+// -----------------------------------------------------
+#define GENLIST_PADDING_SIZE_TOP_2LINE          19
+#define GENLIST_PADDING_SIZE_BOTTOM_2LINE       19
+#define GENLIST_PADDING_SIZE_TOP_3LINE          17
+#define GENLIST_PADDING_SIZE_BOTTOM_3LINE       17
+#define GENLIST_PADDING_SIZE_NDEPTH             26
+
+#define DIALOGUE_PADDING_SIZE_LEFT        16+20
+#define DIALOGUE_PADDING_SIZE_RIGHT       16+20
+#define DIALOGUE_EDITFIELD_PADDING_SIZE_LEFT   16+10
+#define DIALOGUE_EDITFIELD_PADDING_SIZE_RIGHT  16+10
+
+#define GENLIST_ICON_SMALL_SIZE           45
+#define GENLIST_ICON_STAR_SIZE            45
+#define GENLIST_ICON_MEDIUM_SIZE          81
+#define GENLIST_ICON_LARGE_SIZE           99
+#define GENLIST_ICON_THUMBNAIL_SIZE       99
+
+#define GENLIST_BTN_01_HEIGHT             74
+#define GENLIST_BTN_02_SIZE               72
+#define GENLIST_ICON_ONOFF_WIDTH          135
+#define GENLIST_ICON_ONOFF_HEIGHT         63
+#define GENLIST_ICON_CHECK_RADIO_SIZE     64
+#define GENLIST_ICON_COLORBAR_SIZE        7
+#define GENLIST_ICON_PASSWORD_SIZE        82
+// 26(left padding)+2*74(Button Min width)+16(centre padding)+26(right padding)
+#define GENLIST_MIN_SLIDE2_BASE_WIDTH     216
+// 26(left padding)+3*74(Button Min width)+2*16(centre padding)+26(right padding)
+#define GENLIST_MIN_SLIDE3_BASE_WIDTH     306
+// 26(left padding)+4*74(Button Min width)+3*16(centre padding)+26(right padding)
+#define GENLIST_MIN_SLIDE4_BASE_WIDTH     396
+
+#define GENLIST_ICON_ENTRY_SIZE           54
+
+#define GENLIST_TREESIZE_DEFAULT          26
+
+//#define GENLIST_DIALOGUE_SEPARATOR_DEFAULT_HEIGHT 40
+
+//****************************************************************************//
+// *****************  EDJE description have 24 patterns **********************//
+ //**************************************************************************//
+// ------------------
+// |  PART == HERE  |
+// ------------------
+ #define GENLIST_DESCRIPTION_ENVELOP( PART, PARAM ) \
+      description { state: "default" 0.0;\
+         rel1 { \
+            relative: 0 0; \
+            to: PART; \
+         }\
+         rel2 {\
+            relative: 1 1;\
+            to: PART; \
+         }\
+         PARAM\
+      }
+
+//      |   top  |
+// ---------------------
+// left |  HERE  | right
+// ---------------------
+//      | bottom |
+#define GENLIST_DESCRIPTION( left, right, top, bottom, param ) \
+      description { state: "default" 0.0;\
+         rel1 { \
+            relative: 1 1; \
+            to_x: left; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 0 0;\
+            to_x: right;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+// ---------------------
+// left |--> HERE
+// ---------------------
+#define GENLIST_DESCRIPTION_L( left, param ) \
+      description { state: "default" 0.0;\
+         align: 0 0.5; \
+         fixed: 1 0; \
+         rel1 { \
+            relative: 1 0; \
+            to_x: left; \
+            to_y: "base"; \
+         }\
+         rel2 { \
+            relative: 1 1;\
+            to_x: left; \
+            to_y: "base"; \
+         }\
+         param\
+      }
+
+// ---------------------
+//   HERE  <--| right
+// ---------------------
+#define GENLIST_DESCRIPTION_R( right, param ) \
+      description { state: "default" 0.0;\
+         align: 1 0.5; \
+         fixed: 1 0; \
+         rel1 { \
+            relative: 0 0; \
+            to_x: right; \
+            to_y: "base"; \
+         }\
+         rel2 {\
+            relative: 0 1;\
+            to_x: right; \
+            to_y: "base"; \
+         }\
+         param\
+      }
+
+// --------------------------
+// left |--> HERE  <--| right
+// --------------------------
+#define GENLIST_DESCRIPTION_LR( left, right, param ) \
+      description { state: "default" 0.0;\
+         rel1 { \
+            relative: 1 0; \
+            to_x: left; \
+            to_y: "base"; \
+         }\
+         rel2 {\
+            relative: 0 1;\
+            to_x: right;\
+            to_y: "base"; \
+         }\
+         param\
+      }
+
+//   |  top     |
+// -----------------
+//  |  HERE  <--| right
+// -----------------
+//  | bottom   |
+#define GENLIST_DESCRIPTION_RTB( right, top, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 1 0.5;\
+         rel1 { \
+            relative: 0 1; \
+            to_x: right; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 0 0;\
+            to_x: right;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+// left |  HERE  | right
+// ---------------------
+//      | bottom |
+#define GENLIST_DESCRIPTION_LRB( left, right, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 0.5 1;\
+         rel1 { \
+            relative: 1 0; \
+            to_x: left; \
+            to_y: bottom; \
+         }\
+         rel2 {\
+            relative: 0 0;\
+            to_x: right;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+//      |   top  |
+// ---------------------
+// left |  HERE  | right
+#define GENLIST_DESCRIPTION_LRT( left, right, top, param ) \
+      description { state: "default" 0.0;\
+         align: 0.5 0;\
+         rel1 { \
+            relative: 1 1; \
+            to_x: left; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 0 1;\
+            to_x: right;\
+            to_y: top;\
+         }\
+         param\
+      }
+
+//      |       top  |
+// ---------------------
+// left | -->  HERE  |
+#define GENLIST_DESCRIPTION_LT( left, top, param ) \
+      description { state: "default" 0.0;\
+         align: 0 0;\
+         rel1 { \
+            relative: 1 1; \
+            to_x: left; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 1 1;\
+            to_x: left;\
+            to_y: top;\
+         }\
+         param\
+      }
+
+// left |  --> HERE  |
+// ---------------------
+//      |     bottom |
+#define GENLIST_DESCRIPTION_LB( left, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 0 1;\
+         rel1 { \
+            relative: 1 0; \
+            to_x: left; \
+            to_y: bottom; \
+         }\
+         rel2 {\
+            relative: 1 0;\
+            to_x: left;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+//      |     top  |
+// ---------------------
+// left |--> HERE  |
+// ---------------------
+//      |   bottom |
+#define GENLIST_DESCRIPTION_LTB( left, top, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 0 0.5;\
+         rel1 { \
+            relative: 1 1; \
+            to_x: left; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 1 0;\
+            to_x: left;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+//      |   top  |
+// ---------------------
+//     |  HERE <--| right
+#define GENLIST_DESCRIPTION_RT( right, top, param ) \
+      description { state: "default" 0.0;\
+         align: 1 0;\
+         rel1 { \
+            relative: 0 1; \
+            to_x: right; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 0 1;\
+            to_x: right;\
+            to_y: top;\
+         }\
+         param\
+      }
+
+//  | HERE <-- | right
+// ---------------------
+//  |  bottom  |
+#define GENLIST_DESCRIPTION_RB( right, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 1 1;\
+         rel1 { \
+            relative: 0 0; \
+            to_x: right; \
+            to_y: bottom; \
+         }\
+         rel2 {\
+            relative: 0 0;\
+            to_x: right;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+// |   top  |
+// ----------
+// |  HERE  |
+// ----------
+// | bottom |
+#define GENLIST_DESCRIPTION_TB( top, bottom, param ) \
+      description { state: "default" 0.0;\
+         align: 0.5 0.5;\
+         rel1 { \
+            relative: 0 1; \
+            to_y: top; \
+         }\
+         rel2 {\
+            relative: 1 0;\
+            to_y: bottom;\
+         }\
+         param\
+      }
+
+#define GENLIST_PROLOG \
+      data.item: "selectraise" "on"; \
+      data.item: "treesize" 0;
+
+#define GENLIST_PROLOG_NORMAL \
+      GENLIST_PROLOG \
+      data.item: "treesize" GENLIST_TREESIZE_DEFAULT; \
+      data.item: "flips" "elm.flip.icon elm.flip.content"; \
+      images { \
+         image : "00_list_group_bg.png" COMP; \
+         image : "00_list_group_bg_press.png" COMP; \
+      }
+
+#define GENLIST_PROLOG_DIALOGUE \
+      GENLIST_PROLOG \
+      data.item: "flips" "elm.flip.icon elm.flip.content"; \
+      images { \
+         image : "00_list_group_bg.png" COMP; \
+         image : "00_list_group_bg_press.png" COMP; \
+         image : "00_list_group_bg_top.png" COMP; \
+         image : "00_list_group_bg_top_press.png" COMP; \
+         image : "00_list_group_bg_center.png" COMP; \
+         image : "00_list_group_bg_center_press.png" COMP; \
+         image : "00_list_group_bg_bottom.png" COMP; \
+         image : "00_list_group_bg_bottom_press.png" COMP; \
+         image : "00_list_group_bg_top_focus.png" COMP; \
+         image : "00_list_group_bg_center_focus.png" COMP; \
+         image : "00_list_group_bg_bottom_focus.png" COMP; \
+         image : "00_expandable_bg.png" COMP; \
+         image : "00_expandable_bg_top.png" COMP; \
+         image : "00_expandable_bg_center.png" COMP; \
+         image : "00_expandable_bg_bottom.png" COMP; \
+      }
+
+
+#define GENLIST_NAME(NAME) \
+      name: "elm/genlist/item/"NAME;
+
+/*****************************************************************************/
+/******************************* Dialogue group ******************************/
+/*****************************************************************************/
+#define GENLIST_DIALOGUE_INHERIT_BODY( _PARTS ) \
+      data.item: "treesize" 0; \
+      parts { \
+         GENLIST_PART_BG_NORMAL_OFF \
+         GENLIST_PART_BOTTOM_LINE_OFF \
+         GENLIST_PART_BG_DIALOGUE \
+         GENLIST_PART_PADDING_LEFT_SIZE( DIALOGUE_PADDING_SIZE_LEFT ) \
+         GENLIST_PART_PADDING_RIGHT_EDIT \
+         _PARTS \
+         GENLIST_PART_FLIP \
+         GENLIST_PART_FOCUS_DIALOGUE \
+      }
+
+#define GENLIST_DIALOGUE_EDITFIELD_INHERIT_BODY( _PARTS ) \
+      data.item: "treesize" 0; \
+      parts { \
+         GENLIST_PART_BG_NORMAL_OFF \
+         GENLIST_PART_BOTTOM_LINE_OFF \
+         GENLIST_PART_BG_DIALOGUE \
+         GENLIST_PART_PADDING_LEFT_SIZE( DIALOGUE_EDITFIELD_PADDING_SIZE_LEFT ) \
+         GENLIST_PART_PADDING_RIGHT_EDIT_SIZE( DIALOGUE_EDITFIELD_PADDING_SIZE_RIGHT ) \
+         _PARTS \
+         GENLIST_PART_FLIP \
+         GENLIST_PART_FOCUS_DIALOGUE \
+     }
+
+
+#define GENLIST_INHERIT_THUMB_CIRCLE(SIZE, PARENT) \
+     images { \
+         image: "Content_views/00_list_circle_thumbnail_bg.png" COMP; \
+         image: "Content_views/00_list_circle_thumbnail_bg_press.png" COMP; \
+         image: "Content_views/00_dialogue_circle_thumbnail_bg.png" COMP; \
+         image: "Content_views/00_dialogue_circle_thumbnail_bg_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_RECT("elm.thumb.clip", \
+            description { state: "default";  \
+            } \
+            description { state: "flipped";  \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("elm.thumb", \
+            insert_before: "focus_part"; \
+            clip_to: "elm.thumb.clip"; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(PARENT, \
+               image.normal: "Content_views/00_list_circle_thumbnail_bg.png"; \
+               min: SIZE SIZE; \
+               max: SIZE SIZE; \
+               fixed:1 1; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_list_circle_thumbnail_bg_press.png"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg.png"; \
+            } \
+            description { state: "reorder_selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg_press.png"; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "reorder" 0.0; \
+            } \
+         ) \
+      }
+
+#define GENLIST_INHERIT_THUMB_SQUARE(SIZE, PARENT) \
+      images { \
+         image: "Content_views/00_square_thumbnail_bg.png" COMP; \
+         image: "Content_views/00_square_thumbnail_bg_press.png" COMP; \
+         image: "Content_views/00_square_thumbnail_bg.png" COMP; \
+         image: "Content_views/00_square_thumbnail_bg_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_RECT("elm.thumb.clip", \
+            description { state: "default";  \
+            } \
+            description { state: "flipped";  \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("elm.thumb", \
+            insert_before: "focus_part"; \
+            clip_to: "elm.thumb.clip"; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(PARENT, \
+               image.normal: "Content_views/00_square_thumbnail_bg.png"; \
+               min: SIZE SIZE; \
+               max: SIZE SIZE; \
+               fixed:1 1; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg_press.png"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg.png"; \
+            } \
+            description { state: "reorder_selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg_press.png"; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "reorder" 0.0; \
+            } \
+         ) \
+      }
+
+
+#define GENLIST_INHERIT_THUMB_CIRCLE_DIALOGUE(SIZE, PARENT) \
+     images { \
+         image: "Content_views/00_dialogue_circle_thumbnail_bg.png" COMP; \
+         image: "Content_views/00_dialogue_circle_thumbnail_bg_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_RECT("elm.thumb.clip", \
+            description { state: "default";  \
+            } \
+            description { state: "flipped";  \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("elm.thumb", \
+            insert_before: "focus_part_dialogue"; \
+            clip_to: "elm.thumb.clip"; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(PARENT, \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg.png"; \
+               min: SIZE SIZE; \
+               max: SIZE SIZE; \
+               fixed:1 1; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg_press.png"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg.png"; \
+            } \
+            description { state: "reorder_selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_dialogue_circle_thumbnail_bg_press.png"; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "reorder" 0.0; \
+            } \
+         ) \
+      }
+
+#define GENLIST_INHERIT_THUMB_SQUARE_DIALOGUE(SIZE, PARENT) \
+      images { \
+         image: "Content_views/00_square_thumbnail_bg_normal.png" COMP; \
+         image: "Content_views/00_square_thumbnail_bg_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_RECT("elm.thumb.clip", \
+            description { state: "default";  \
+            } \
+            description { state: "flipped";  \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("elm.thumb", \
+            insert_before: "focus_part_dialogue"; \
+            clip_to: "elm.thumb.clip"; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(PARENT, \
+               image.normal: "Content_views/00_square_thumbnail_bg.png"; \
+               min: SIZE SIZE; \
+               max: SIZE SIZE; \
+               fixed:1 1; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg_press.png"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg.png"; \
+            } \
+            description { state: "reorder_selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Content_views/00_square_thumbnail_bg_press.png"; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "reorder" 0.0; \
+            } \
+         ) \
+      }
+
+#define GENLIST_INHERIT_THUMB_POPUP(SIZE, PARENT) \
+     images { \
+         image: "Popup/00_popup_thumbnail_bg.png" COMP; \
+         image: "Popup/00_popup_thumbnail_bg_press.png" COMP; \
+         image: "Popup/00_popup_thumbnail_bg.png" COMP; \
+         image: "Popup/00_popup_thumbnail_bg_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_RECT("elm.thumb.clip", \
+            description { state: "default";  \
+            } \
+            description { state: "flipped";  \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("elm.thumb", \
+            insert_before: "focus_part"; \
+            clip_to: "elm.thumb.clip"; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(PARENT, \
+               image.normal: "Popup/00_popup_thumbnail_bg.png"; \
+               min: SIZE SIZE; \
+               max: SIZE SIZE; \
+               fixed:1 1; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Popup/00_popup_thumbnail_bg_press.png"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Popup/00_popup_thumbnail_bg.png"; \
+            } \
+            description { state: "reorder_selected" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "Popup/00_popup_thumbnail_bg_press.png"; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "reorder" 0.0; \
+            } \
+         ) \
+      }
+
+//****************************************************************************//
+// ****************************** BG Image **********************************//
+//****************************************************************************//
+
+#define GENLIST_PART_BG_NORMAL \
+      GENLIST_PART_RECT("bg_clip", \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            visible: 1; \
+            color: 255 255 255 255; \
+         } \
+         description { state: "decorate" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "reorder" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "decorate_reorder" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+      ) \
+      GENLIST_PART_RECT("bg_reorder_clip", \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "reorder" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 1; \
+            color: 255 255 255 255; \
+         } \
+         description { state: "decorate_reorder" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "decorate" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "reorder_flip" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+      ) \
+      GENLIST_PART_RECT("bg",  \
+         clip_to: "bg_clip"; \
+         description { state: "default" 0.0; \
+            color: GENLIST_LIST_BG_COLOR; \
+         } \
+         description { state: "selected" 0.0; \
+            inherit: "default" 0.0; \
+            color: GENLIST_LIST_PRESS_COLOR; \
+         } \
+         description { state: "disabled" 0.0; \
+            inherit: "default" 0.0; \
+            color: GENLIST_LIST_DIM_COLOR; \
+         } \
+      ) \
+      GENLIST_PART_SPACER("bg_reorder_left", \
+         description { state: "default" 0.0; \
+            min: 16 0; \
+            max: 16 -1; \
+            fixed: 1 0; \
+            align: 0 0.5; \
+            rel2.relative: 0 1; \
+         } \
+      ) \
+      GENLIST_PART_SPACER("bg_reorder_right", \
+         description { state: "default" 0.0; \
+            min: 16 0; \
+            max: 16 -1; \
+            fixed: 1 0; \
+            align: 1.0 0.5; \
+            rel1.relative: 1 0; \
+         } \
+      ) \
+      GENLIST_PART_SPACER("bg_reorder_top", \
+         description { state: "default" 0.0; \
+            min: 0 2; \
+            max: -1 2; \
+            fixed: 0 1; \
+            align: 0.5 0; \
+            rel2.relative: 1 0; \
+         } \
+      ) \
+      GENLIST_PART_SPACER("bg_reorder_bottom", \
+         description { state: "default" 0.0; \
+            min: 0 2; \
+            max: -1 2; \
+            fixed: 0 1; \
+            align: 0.5 1.0; \
+            rel1.relative: 0 1; \
+         } \
+      ) \
+      GENLIST_PART_IMAGE("bg_reorder", \
+         clip_to: "bg_reorder_clip"; \
+         description { state: "default" 0.0; \
+            rel1 { \
+               relative: 1 1; \
+               to_x: "bg_reorder_left"; \
+               to_y: "bg_reorder_top"; \
+            } \
+            rel2 { \
+               relative: 0 0; \
+               to_x: "bg_reorder_right"; \
+               to_y: "bg_reorder_bottom"; \
+            } \
+            image { \
+               normal: "00_list_group_bg.png"; \
+               border: 17 17 8 8; \
+               border_scale: 1; \
+            } \
+         } \
+         description { state: "selected" 0.0; \
+            inherit: "default"; \
+            image { \
+               normal: "00_list_group_bg_press.png"; \
+               border: 17 17 8 8; \
+               border_scale: 1; \
+            } \
+         } \
+         description { state: "flipped" 0.0; \
+            inherit: "default"; \
+            visible: 0; \
+         } \
+      ) \
+      GENLIST_PART_RECT("sound",  \
+         repeat_events: 1;  /*for play_sound to check selected state*/ \
+         description { state: "default" 0.0; \
+            color: 0 0 0 0; \
+         } \
+      ) \
+
+#define GENLIST_PART_BG_NORMAL_OFF \
+   GENLIST_PART_RECT("bg_clip", \
+      mouse_events: 0; \
+      description { state: "default" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "decorate" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "reorder" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "decorate_reorder" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 0; \
+      } \
+   ) \
+   GENLIST_PART_RECT("bg", \
+      mouse_events: 0; \
+      description { state: "default" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "selected" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "disabled" 0.0; \
+         visible: 0; \
+      } \
+   ) \
+   GENLIST_PART_RECT("bg_reorder_clip", \
+      mouse_events: 0; \
+      description { state: "default" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "reorder" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "decorate_reorder" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "decorate" 0.0; \
+         visible: 0; \
+      } \
+      description { state: "reorder_flip" 0.0; \
+         visible: 0; \
+      } \
+   ) \
+   GENLIST_PART_IMAGE("bg_reorder", \
+      mouse_events: 0; \
+      description {state: "default" 0.0;\
+         visible: 0;\
+      }\
+      description { state: "selected" 0.0; {\
+         visible: 0; \
+      } \
+      description { state: "flipped" 0.0; {\
+         visible: 0; \
+      } \
+   )
+
+#define GENLIST_PART_BG_DIALOGUE \
+   GENLIST_PART_RECT("2depth", \
+      description { state: "default" 0.0; \
+         visible: 0;\
+      } \
+      description { state: "2depth" 0.0; \
+         visible: 0; \
+      } \
+   ) \
+   GENLIST_PART_SPACER("bg_dialogue_left", \
+      description { state: "default" 0.0; \
+         min: 16 0; \
+         max: 16 -1; \
+         fixed: 1 0; \
+         align: 0 0.5; \
+         rel2.relative: 0 1; \
+      } \
+   ) \
+   GENLIST_PART_SPACER("bg_dialogue_right", \
+      description { state: "default" 0.0; \
+         min: 16 0; \
+         max: 16 -1; \
+         fixed: 1 0; \
+         align: 1.0 0.5; \
+         rel1.relative: 1 0; \
+      } \
+      description { state: "editmode" 0.0; \
+         inherit: "default" 0.0; \
+         min: (GENLIST_PADDING_SIZE_DEFAULT*2+GENLIST_BTN_02_SIZE) 0; \
+         max: (GENLIST_PADDING_SIZE_DEFAULT*2+GENLIST_BTN_02_SIZE) 0; \
+      } \
+   ) \
+   GENLIST_PART_IMAGE("bg_dialogue", \
+      insert_after: "base"; \
+      GENLIST_DESCRIPTION_LR("bg_dialogue_left", "bg_dialogue_right", \
+         image { \
+            normal: "00_list_group_bg.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      ) \
+      description { state: "selected" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_press.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "top" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_top.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "top_selected" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_top_press.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "center" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_center.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "center_selected" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_center_press.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "bottom" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_bottom.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "bottom_selected" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_list_group_bg_bottom_press.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "2depth" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_expandable_bg.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "2depth_top" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_expandable_bg_top.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "2depth_center" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_expandable_bg_center.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "2depth_bottom" 0.0; \
+         inherit: "default" 0.0; \
+         image { \
+            normal: "00_expandable_bg_bottom.png"; \
+            border: 17 17 8 8; \
+            border_scale: 1; \
+         } \
+      } \
+   ) \
+   GENLIST_PART_RECT("sound",  \
+      repeat_events: 1;  /*for play_sound to check selected state*/ \
+      description { state: "default" 0.0; \
+         color: 0 0 0 0; \
+      } \
+   ) \
+
+//****************************************************************************//
+// ****************************** BASE  ********************************//
+//****************************************************************************//
+#define GENLIST_PART_BASE_SIZE(HEIGHT) \
+         part { name: "base"; \
+            type: RECT; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+               min: 0 HEIGHT; \
+            } \
+         } \
+         part { name: "state"; \
+            type: RECT; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default"; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default"; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "default"; \
+            } \
+         }
+
+#define GENLIST_PART_BASE \
+         GENLIST_PART_BASE_SIZE(0)
+
+#define GENLIST_PART_FOCUS \
+   GENLIST_PART_IMAGE("focus_part", \
+      mouse_events: 0; \
+      description { state: "default" 0.0; \
+         visible: 0; \
+         image { \
+            normal: "00_focus.png"; \
+            border: 6 6 6 6; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+      } \
+   ) \
+   GENLIST_PART_ICON("elm.icon.focus", \
+      repeat_events: 1; \
+      GENLIST_DESCRIPTION_ENVELOP("focus_part", \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_FOCUS_REORDER \
+   GENLIST_PART_IMAGE("focus_part_reorder", \
+      mouse_events: 0; \
+         description { state: "default" 0.0; \
+            rel1 { \
+               relative: 1 1; \
+               to_x: "bg_reorder_left"; \
+               to_y: "bg_reorder_top"; \
+            } \
+            rel2 { \
+               relative: 0 0; \
+               to_x: "bg_reorder_right"; \
+               to_y: "bg_reorder_bottom"; \
+            } \
+         visible: 0; \
+         image { \
+            normal: "00_focus.png"; \
+            border: 6 6 6 6; \
+            border_scale: 1; \
+         } \
+      } \
+      description { state: "focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+      } \
+   )
+
+#define GENLIST_PART_FOCUS_NORMAL \
+   GENLIST_PART_FOCUS \
+   GENLIST_PART_FOCUS_REORDER
+
+
+#define GENLIST_PART_FOCUS_DIALOGUE \
+   GENLIST_PART_IMAGE("focus_part_dialogue", \
+      mouse_events: 0; \
+      GENLIST_DESCRIPTION_LR("bg_dialogue_left", "bg_dialogue_right", \
+         visible: 0; \
+         image { \
+            normal: "00_focus.png"; \
+            border: 6 6 6 6; \
+            border_scale: 1; \
+         } \
+      ) \
+      description { state: "focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+      } \
+      description { state: "top_focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+         image { \
+            normal: "00_list_group_bg_top_focus.png"; \
+            border: 7 7 7 7; \
+         } \
+      } \
+      description { state: "center_focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+         image { \
+            normal: "00_list_group_bg_center_focus.png"; \
+            border: 7 7 7 7; \
+         } \
+      } \
+      description { state: "bottom_focused" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+         image { \
+            normal: "00_list_group_bg_bottom_focus.png"; \
+            border: 7 7 7 7; \
+         } \
+      } \
+   ) \
+   GENLIST_PART_ICON("elm.icon.focus", \
+      repeat_events: 1; \
+      GENLIST_DESCRIPTION_ENVELOP("focus_part_dialogue", \
+         fixed: 1 1; \
+      ) \
+   )
+
+//****************************************************************************//
+// ****************************** LINE ********************************//
+//****************************************************************************//
+#define GENLIST_PART_BOTTOM_LINE \
+         GENLIST_PART_RECT("bottom_line_clip", \
+            description { state: "default" 0.0; \
+               color: 255 255 255 255; \
+            } \
+            description { state: "decorate" 0.0; \
+               inherit: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+            description { state: "decorate_reorder" 0.0; \
+               inherit: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_RECT("bottom_line", \
+            mouse_events: 0; \
+            clip_to: "bottom_line_clip"; \
+            description { state: "default" 0.0; \
+               min: 0 GENLIST_PART_LIST_LINE_HEIGHT; \
+               max: -1 GENLIST_PART_LIST_LINE_HEIGHT; \
+               fixed: 0 1; \
+               align: 0.5 1; \
+               color: GENLIST_LIST_LINE1_COLOR; \
+               rel1.to: "bottom_line2"; \
+               rel2.to: "bottom_line2"; \
+               rel2.relative: 1 0; \
+               rel1.offset: -1 -1; \
+            } \
+            description { state: "flipped" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         ) \
+         GENLIST_PART_RECT("bottom_line2", \
+            mouse_events: 0; \
+            clip_to: "bottom_line_clip"; \
+            description { state: "default" 0.0; \
+               min: 0 GENLIST_PART_LIST_LINE_HEIGHT; \
+               max: -1 GENLIST_PART_LIST_LINE_HEIGHT; \
+               fixed: 0 1; \
+               align: 0.5 1; \
+               color: GENLIST_LIST_LINE2_COLOR; \
+               rel1.to_x: "base"; \
+               rel1.relative: 0 0; \
+               rel2.to_x: "base"; \
+               rel2.relative: 1 1; \
+               rel1.offset: -1 -1; \
+            } \
+            description { state: "flipped" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         )
+
+#define GENLIST_PART_BOTTOM_LINE_OFF \
+         GENLIST_PART_RECT("bottom_line", \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         ) \
+         GENLIST_PART_RECT("bottom_line2", \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         )
+
+#define GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_SPACER("elm.padding.divider.top", \
+            description { state: "default" 0.0; \
+               align: 0.5 0; \
+               min: 0 30; \
+               max: -1 30; \
+               fixed: 0 1; \
+               rel2.relative: 1 0; \
+            } \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.divider.bottom", \
+            description { state: "default" 0.0; \
+               align: 0.5 1; \
+               min: 0 30; \
+               max: -1 30; \
+               fixed: 0 1; \
+               rel1.relative: 0 1; \
+            } \
+         )
+
+#define GENLIST_PART_DIVIDER_L(LEFT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_LIST_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB("elm.divider1", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_LIST_DIVIDER2_COLOR; \
+            ) \
+         )
+
+#define GENLIST_PART_DIVIDER_R(RIGHT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB("elm.divider2", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_LIST_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_LIST_DIVIDER2_COLOR; \
+            ) \
+         )
+
+#define GENLIST_PART_MULTILINE_DIVIDER_L(LEFT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_MULTILINE_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB("elm.divider1", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_MULTILINE_DIVIDER2_COLOR; \
+            ) \
+         )
+
+#define GENLIST_PART_MULTILINE_DIVIDER_R(RIGHT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB("elm.divider2", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_MULTILINE_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_MULTILINE_DIVIDER2_COLOR; \
+            ) \
+         )
+
+#define GENLIST_PART_DIALOGUE_GROUP_DIVIDER_L(LEFT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_DIALOGUE_GROUP_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LTB("elm.divider1", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               align: 0 0.5; \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel2.offset: 0 0; \
+               color: GENLIST_DIALOGUE_GROUP_DIVIDER2_COLOR; \
+            ) \
+         )
+
+#define GENLIST_PART_DIALOGUE_GROUP_DIVIDER_R(RIGHT) \
+         GENLIST_PART_DIVIDER_PADDING \
+         GENLIST_PART_RECT("elm.divider1", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB("elm.divider2", "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_DIALOGUE_GROUP_DIVIDER1_COLOR; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("elm.divider2", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.divider.top", "elm.padding.divider.bottom", \
+               min: 1 0; \
+               max: 1 -1; \
+               fixed: 1 0; \
+               rel1.offset: -1 0;\
+               color: GENLIST_DIALOGUE_GROUP_DIVIDER2_COLOR; \
+            ) \
+         )
+#define GENLIST_PART_CENTER_LINE_LRT(LEFT, RIGHT, TOP) \
+         GENLIST_PART_RECT("center_line", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, TOP, \
+               min: 0 1; \
+               max: -1 1; \
+               fixed: 0 1; \
+               color: GENLIST_MULTILINE_DIVIDER1_COLOR; \
+               rel2.relative: 1 1; \
+            ) \
+         ) \
+         GENLIST_PART_RECT("center_line2", \
+            GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, "center_line", \
+               min: 0 1; \
+               max: -1 1; \
+               fixed: 0 1; \
+               color: GENLIST_MULTILINE_DIVIDER2_COLOR; \
+               rel2.relative: 1 1; \
+            ) \
+         )
+
+#define GENLIST_PART_COLORBAR \
+         GENLIST_PART_SPACER("elm.padding.colorbar.top", \
+             GENLIST_DESCRIPTION_ENVELOP("base", \
+               align: 0.5 0; \
+               fixed: 0 1; \
+               min: 0 4; \
+               max: -1 4; \
+               rel2.relative: 1 0; \
+             ) \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.colorbar.bottom", \
+             GENLIST_DESCRIPTION_ENVELOP("base", \
+               align: 0.5 1; \
+               fixed: 0 1; \
+               min: 0 4; \
+               max: -1 4; \
+               rel1.relative: 0 1; \
+             ) \
+         ) \
+         GENLIST_PART_ICON("elm.swallow.colorbar", \
+            GENLIST_DESCRIPTION_TB("elm.padding.colorbar.top", "elm.padding.colorbar.bottom", \
+               min: GENLIST_ICON_COLORBAR_SIZE 0; \
+               max: GENLIST_ICON_COLORBAR_SIZE -1; \
+               fixed: 1 0; \
+               align: 0 0.5; \
+               rel1.relative: 0 1; \
+               rel2.relative: 0 0; \
+            ) \
+         )
+
+#define GENLIST_PART_COLORBAR_DIALOGUE \
+         GENLIST_PART_SPACER("elm.padding.colorbar.top", \
+             GENLIST_DESCRIPTION_ENVELOP("base", \
+               align: 0.5 0; \
+               fixed: 0 1; \
+               min: 0 4; \
+               max: -1 4; \
+               rel2.relative: 1 0; \
+             ) \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.colorbar.bottom", \
+             GENLIST_DESCRIPTION_ENVELOP("base", \
+               align: 0.5 1; \
+               fixed: 0 1; \
+               min: 0 4; \
+               max: -1 4; \
+               rel1.relative: 0 1; \
+             ) \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.colorbar.left", \
+             description{ state: "default" 0.0; \
+               min: 19 0; \
+               max: 19 -1; \
+               fixed: 1 0; \
+               align: 0 0.5; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel2.relative: 0 1; \
+             } \
+         ) \
+         GENLIST_PART_ICON("elm.swallow.colorbar", \
+            GENLIST_DESCRIPTION_LTB("elm.padding.colorbar.left","elm.padding.colorbar.top", "elm.padding.colorbar.bottom", \
+               min: GENLIST_ICON_COLORBAR_SIZE 0; \
+               max: GENLIST_ICON_COLORBAR_SIZE -1; \
+               fixed: 1 0; \
+            ) \
+         )
+
+//****************************************************************************//
+//********************************* PADDING **********************************//
+//****************************************************************************//
+#define GENLIST_PART_EXPANDED_PAD \
+         part { name: "elm.swallow.pad"; \
+            type: SWALLOW; \
+            scale: 1; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+               min: 0 0; \
+               fixed: 1 0; \
+               align: 0.0 0.5; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel2.relative: 0.0 1.0; \
+            } \
+         } \
+
+#define GENLIST_PART_PADDING( NAME, SIZE, REL1, REL2 ) \
+      GENLIST_PART_SPACER(NAME, \
+         description { state: "default" 0.0; \
+            min: SIZE 0; \
+            max: SIZE -1; \
+            fixed: 1 0; \
+            align: 0.5 0.5; \
+            rel1 { \
+               relative: REL1; \
+               to: "base"; \
+            } \
+            rel2 { \
+               relative: REL2; \
+               to: "base"; \
+            } \
+         } \
+      )
+
+#define GENLIST_DESCRIPTION_DECORATE_PADDING \
+   description { state: "decorate" 0.0; \
+      inherit: "default" 0.0; \
+      min: 0 0; \
+      max: 0 0; \
+   }
+
+#define GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+   description { state: "decorate_reorder" 0.0; \
+      inherit: "default" 0.0; \
+      min: 0 0; \
+      max: 0 0; \
+   }
+
+#define GENLIST_DESCRIPTION_REORDER_PADDING \
+   description { state: "reorder" 0.0; \
+      inherit: "default" 0.0; \
+      min: 32 0; \
+      max: 32 -1; \
+   }
+
+#define GENLIST_PART_PADDING_LEFT \
+         GENLIST_PART_EXPANDED_PAD \
+         GENLIST_PART_SPACER("elm.padding.left", \
+            GENLIST_DESCRIPTION_L("elm.swallow.pad",  \
+               min: GENLIST_PADDING_SIZE_LEFT 0; \
+               max: GENLIST_PADDING_SIZE_LEFT -1; \
+               fixed: 1 0; \
+            ) \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         )
+
+#define GENLIST_PART_PADDING_LEFT_SIZE( SIZE ) \
+         GENLIST_PART_EXPANDED_PAD \
+         GENLIST_PART_SPACER("elm.padding.left", \
+            GENLIST_DESCRIPTION_L("elm.swallow.pad",  \
+               min: SIZE 0; \
+               max: SIZE -1; \
+               fixed: 1 0; \
+            ) \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         )
+
+#define GENLIST_PART_EDITBTN \
+   GENLIST_PART_SPACER("elm.padding.edit.right", \
+      description { state: "default" 0.0; \
+         fixed: 1 0; \
+         align: 1.0 0.5; \
+         rel1.relative: 1 0; \
+         min: GENLIST_PADDING_SIZE_DEFAULT 0; \
+         max: GENLIST_PADDING_SIZE_DEFAULT -1; \
+      } \
+   ) \
+   GENLIST_PART_ICON("elm.icon.edit", \
+      GENLIST_DESCRIPTION_R("elm.padding.edit.right", \
+         visible: 0; \
+      ) \
+      description { state: "editmode" 0.0; \
+         inherit: "default" 0.0; \
+         visible: 1; \
+         fixed: 1 1; \
+         min: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE; \
+         max: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE; \
+      } \
+   )
+
+#define GENLIST_PART_PADDING_RIGHT \
+         GENLIST_PART_SPACER("elm.padding.right", \
+            description { state: "default" 0.0; \
+               min: GENLIST_PADDING_SIZE_RIGHT 0; \
+               max: GENLIST_PADDING_SIZE_RIGHT -1; \
+               fixed: 1 0; \
+               align: 1.0 0.5; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel1.relative: 1 0; \
+            } \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         )
+
+#define GENLIST_PART_PADDING_RIGHT_SIZE( SIZE ) \
+         GENLIST_PART_SPACER("elm.padding.right", \
+            description { state: "default" 0.0; \
+               min: SIZE 0; \
+               max: SIZE -1; \
+               fixed: 1 0; \
+               align: 1.0 0.5; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel1.relative: 1 0; \
+            } \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         )
+
+// FIXME: Use RECT instead of SPACER if this group is used on layout
+// for blocking events
+#define GENLIST_PART_PADDING_RIGHT_EDIT \
+         GENLIST_PART_SPACER("elm.padding.right", \
+            GENLIST_DESCRIPTION_R("elm.padding.right.edit", \
+               min: DIALOGUE_PADDING_SIZE_RIGHT 0; \
+               max: DIALOGUE_PADDING_SIZE_RIGHT -1; \
+               fixed: 1 0; \
+            ) \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.right.edit", \
+            description { state: "default" 0.0; \
+               min:0 0; \
+               max: 0 -1; \
+               fixed: 1 0; \
+               align: 1.0 0.5; \
+               rel1.relative: 1 0; \
+            } \
+            description { state: "editmode" 0.0; \
+               inherit: "default" 0.0; \
+               min: (GENLIST_PADDING_SIZE_DEFAULT+GENLIST_BTN_02_SIZE) 0; \
+               max: (GENLIST_PADDING_SIZE_DEFAULT+GENLIST_BTN_02_SIZE) -1; \
+            } \
+         ) \
+         GENLIST_PART_EDITBTN
+
+// FIXME: Use RECT instead of SPACER if this group is used on layout
+// for blocking events
+#define GENLIST_PART_PADDING_RIGHT_EDIT_SIZE( SIZE ) \
+         GENLIST_PART_SPACER("elm.padding.right", \
+            GENLIST_DESCRIPTION_R("elm.padding.right.edit", \
+               min: SIZE 0; \
+               max: SIZE -1; \
+               fixed: 1 0; \
+            ) \
+            GENLIST_DESCRIPTION_DECORATE_PADDING \
+            GENLIST_DESCRIPTION_REORDER_PADDING \
+            GENLIST_DESCRIPTION_DECORATE_REORDER_PADDING \
+         ) \
+         GENLIST_PART_SPACER("elm.padding.right.edit", \
+            description { state: "default" 0.0; \
+               min:0 0; \
+               max: 0 -1; \
+               fixed: 1 0; \
+               align: 1.0 0.5; \
+               rel1.relative: 1 0; \
+            } \
+            description { state: "editmode" 0.0; \
+               inherit: "default" 0.0; \
+               min: (GENLIST_PADDING_SIZE_DEFAULT+GENLIST_BTN_02_SIZE) 0; \
+               max: (GENLIST_PADDING_SIZE_DEFAULT+GENLIST_BTN_02_SIZE) -1; \
+            } \
+         ) \
+         GENLIST_PART_EDITBTN
+
+#define GENLIST_PART_PADDING_TOP \
+         GENLIST_PART_SPACER("elm.padding.top", \
+            description { \
+               state: "default" 0.0; \
+               min: 0 GENLIST_PADDING_SIZE_TOP; \
+               max: -1 GENLIST_PADDING_SIZE_TOP; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel2.relative: 1.0 0.0; \
+               align: 0.5 0.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (GENLIST_PADDING_SIZE_TOP+2); \
+               max: -1 (GENLIST_PADDING_SIZE_TOP+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_TOP_2LINE \
+         GENLIST_PART_SPACER("elm.padding.top", \
+            description { \
+               state: "default" 0.0; \
+               min: 0 GENLIST_PADDING_SIZE_TOP_2LINE; \
+               max: -1 GENLIST_PADDING_SIZE_TOP_2LINE; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel2.relative: 1.0 0.0; \
+               align: 0.5 0.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (GENLIST_PADDING_SIZE_TOP_2LINE+2); \
+               max: -1 (GENLIST_PADDING_SIZE_TOP_2LINE+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_TOP_SIZE( SIZE ) \
+         GENLIST_PART_SPACER("elm.padding.top", \
+            description { \
+               state: "default" 0.0; \
+               min: 0 SIZE; \
+               max: -1 SIZE; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel2.relative: 1.0 0.0; \
+               align: 0.5 0.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (SIZE+2); \
+               max: -1 (SIZE+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_BOTTOM \
+         GENLIST_PART_SPACER("elm.padding.bottom", \
+            description { state: "default" 0.0; \
+               min: 0 GENLIST_PADDING_SIZE_BOTTOM; \
+               max: -1 GENLIST_PADDING_SIZE_BOTTOM; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel1.relative: 0.0 1.0; \
+               align: 0.5 1.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (GENLIST_PADDING_SIZE_BOTTOM+2); \
+               max: -1 (GENLIST_PADDING_SIZE_BOTTOM+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_BOTTOM_2LINE \
+         GENLIST_PART_SPACER("elm.padding.bottom", \
+            description { state: "default" 0.0; \
+               min: 0 GENLIST_PADDING_SIZE_BOTTOM_2LINE; \
+               max: -1 GENLIST_PADDING_SIZE_BOTTOM_2LINE; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel1.relative: 0.0 1.0; \
+               align: 0.5 1.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (GENLIST_PADDING_SIZE_BOTTOM_2LINE+2); \
+               max: -1 (GENLIST_PADDING_SIZE_BOTTOM_2LINE+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_BOTTOM_SIZE( SIZE ) \
+         GENLIST_PART_SPACER("elm.padding.bottom", \
+            description { state: "default" 0.0; \
+               min: 0 SIZE; \
+               max: -1 SIZE; \
+               fixed: 0 1; \
+               rel1.to: "base"; \
+               rel2.to: "base"; \
+               rel1.relative: 0.0 1.0; \
+               align: 0.5 1.0; \
+            } \
+            description { state: "reorder" 0.0; \
+               inherit: "default" 0.0; \
+               min: 0 (SIZE+2); \
+               max: -1 (SIZE+2); \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_R( NAME, RIGHT ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               min: GENLIST_PADDING_SIZE_DEFAULT 0; \
+               max: GENLIST_PADDING_SIZE_DEFAULT -1; \
+               align: 1 0.5; \
+               rel1 { \
+                  relative: 0 0; \
+                  to_x: RIGHT; \
+               } \
+               rel2 { \
+                  relative: 0 1; \
+                  to_x: RIGHT; \
+               } \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_R_SIZE( NAME, RIGHT, SIZE ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               min: SIZE 0; \
+               max: SIZE -1; \
+               align: 1 0.5; \
+               rel1 { \
+                  relative: 0 0; \
+                  to_x: RIGHT; \
+               } \
+               rel2 { \
+                  relative: 0 1; \
+                  to_x: RIGHT; \
+               } \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_L( NAME, LEFT ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               min: GENLIST_PADDING_SIZE_DEFAULT 0; \
+               max: GENLIST_PADDING_SIZE_DEFAULT -1; \
+               align: 0 0.5; \
+               rel1 { \
+                  relative: 1 0; \
+                  to_x: LEFT; \
+               } \
+               rel2 { \
+                  relative: 1 1; \
+                  to_x: LEFT; \
+               } \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_L_SIZE( NAME, LEFT, SIZE ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               min: SIZE 0; \
+               max: SIZE -1; \
+               align: 0 0.5; \
+               rel1 { \
+                  relative: 1 0; \
+                  to_x: LEFT; \
+               } \
+               rel2 { \
+                  relative: 1 1; \
+                  to_x: LEFT; \
+               } \
+            } \
+         )
+
+
+#define GENLIST_PART_PADDING_T_SIZE( NAME, TOP, SIZE ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               min: 0 SIZE; \
+               max: -1 SIZE; \
+               fixed: 0 1; \
+               align: 0.5 0; \
+               rel1 { \
+                  relative: 0 1; \
+                  to: TOP; \
+               } \
+               rel2 { \
+                  relative: 1 1; \
+                  to: TOP; \
+               } \
+            } \
+         )
+
+#define GENLIST_PART_PADDING_B_SIZE( NAME, BOTTOM, SIZE ) \
+         GENLIST_PART_SPACER(NAME, \
+            description { state: "default" 0.0; \
+               min: 0 SIZE; \
+               max: -1 SIZE; \
+               fixed: 0 1; \
+               align: 0.5 1; \
+               rel1 { \
+                  relative: 0.5 0; \
+                  to: BOTTOM; \
+               } \
+               rel2 { \
+                  relative: 0.5 0; \
+                  to: BOTTOM; \
+               } \
+            } \
+         )
+
+#define GENLIST_PROGRAM_EXPAND_ROOT( TARGET ) \
+         program { \
+            name: "go_expanded"; \
+            signal: "elm,state,expanded"; \
+            source: "elm"; \
+            action: STATE_SET "expand_opened" 0.0; \
+            TARGET \
+         } \
+         program { \
+            name: "go_contracted"; \
+            signal: "elm,state,contracted"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         } \
+
+// 2.2.7 Genlist_Edit mode (Rename)
+// FIXME: padding is not needed when swallow content is NULL.
+// But how can edje know existence of swallow content?
+#define GENLIST_PART_FLIP \
+         GENLIST_PART_RECT("elm.flip.bg", \
+            mouse_events: 0; \
+            description { state: "default" 0.0;\
+               color: 0 0 0 0;\
+            } \
+            description { state: "flipped" 0.0; \
+               inherit: "default" 0.0; \
+               rel2.offset: 0 -3; \
+               color: GENLIST_LIST_BG_COLOR;\
+            }\
+         ) \
+         GENLIST_PART_SPACER("elm.flip.padding.right", \
+            description { state: "default" 0.0; \
+               min: 26 0; \
+               max: 26 -1; \
+               fixed: 1 0; \
+               align: 1 0.5; \
+               rel1.relative: 1 0; \
+            } \
+         ) \
+         GENLIST_PART_ICON("elm.flip.content", \
+            GENLIST_DESCRIPTION("elm.padding.left", "elm.flip.padding.icon.left",  \
+               "elm.padding.top", "elm.padding.bottom", \
+               visible: 1; \
+               min: 0 96; \
+            ) \
+            description { state: "flipped" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         ) \
+         GENLIST_PART_PADDING_R("elm.flip.padding.icon.left", "elm.flip.icon") \
+         GENLIST_PART_ICON( "elm.flip.icon", \
+            GENLIST_DESCRIPTION_RTB("elm.flip.padding.right", \
+               "elm.padding.top", "elm.padding.bottom", \
+               visible: 0; \
+               aspect: 1 1; \
+               align: 1 0.5; \
+               max: 158 74; \
+            ) \
+            description { state: "flipped" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         )
+
+//****************************************************************************//
+// *******************************  Programs ********************************//
+//**************************************************************************//
+// signal: elm,state,%s,active
+//   a "check" item named %s went active
+// signal: elm,state,%s,passive
+//   a "check" item named %s went passive
+// default is passive
+#define GENLIST_PROGRAM_DEFAULT( TARGET ) \
+         program { name: "default"; \
+            signal: "elm,state,default"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         } \
+
+#define GENLIST_PROGRAM_DISABLED( TARGET ) \
+         program { name: "enabled"; \
+            signal: "elm,state,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         } \
+         program { name: "disabled"; \
+            signal: "elm,state,disabled"; \
+            source: "elm"; \
+            action: STATE_SET "disabled" 0.0; \
+            TARGET \
+         }
+
+#define GENLIST_PROGRAM_FOCUS \
+      program { name: "focused"; \
+         signal: "elm,state,focused"; \
+         source: "elm"; \
+         action: STATE_SET "focused" 0.0; \
+         target: "focus_part"; \
+      } \
+      program { name: "unfocused"; \
+         signal: "elm,state,unfocused"; \
+         source: "elm"; \
+         action: STATE_SET "default" 0.0; \
+         target: "focus_part"; \
+      }
+
+#define GENLIST_PROGRAM_FOCUS_NORMAL \
+      program { name: "focused"; \
+         signal: "elm,state,focused"; \
+         source: "elm"; \
+         script { \
+            new st[31]; \
+            new Float:vl; \
+            get_state(PART:"bg_reorder_clip", st, 30, vl); \
+            if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) \
+               set_state(PART:"focus_part_reorder", "focused", 0.0); \
+            else \
+               set_state(PART:"focus_part", "focused", 0.0); \
+         } \
+      } \
+      program { name: "unfocused"; \
+         signal: "elm,state,unfocused"; \
+         source: "elm"; \
+         action: STATE_SET "default" 0.0; \
+         target: "focus_part_reorder"; \
+         target: "focus_part"; \
+      }
+
+#define GENLIST_PROGRAM_FOCUS_DIALOGUE \
+      program { name: "focused"; \
+         signal: "elm,state,focused"; \
+         source: "elm"; \
+         script { \
+            new st[31]; \
+            new Float:vl; \
+            get_state(PART:"bg_dialogue", st, 30, vl); \
+            if (!strcmp(st, "top") || !strcmp(st, "top_selected") || !strcmp(st, "2depth_top")) \
+               set_state(PART:"focus_part_dialogue", "top_focused", 0.0); \
+            else if (!strcmp(st, "center") || !strcmp(st, "center_selected") || !strcmp(st, "2depth_center")) \
+               set_state(PART:"focus_part_dialogue", "center_focused", 0.0); \
+            else if (!strcmp(st, "bottom") || !strcmp(st, "bottom_selected") || !strcmp(st, "2depth_bottom")) \
+               set_state(PART:"focus_part_dialogue", "bottom_focused", 0.0); \
+            else if (!strcmp(st, "default") || !strcmp(st, "selected") || !strcmp(st, "2depth")) \
+               set_state(PART:"focus_part_dialogue", "focused", 0.0); \
+         } \
+      } \
+      program { name: "unfocused"; \
+         signal: "elm,state,unfocused"; \
+         source: "elm"; \
+         action: STATE_SET "default" 0.0; \
+         target: "focus_part_dialogue"; \
+      }
+
+#define GENLIST_PROGRAM_SOUND( SRC ) \
+      program { name: "play_sound"SRC; \
+         signal: "mouse,clicked,1"; \
+         source: SRC; \
+         script { \
+            new st[31]; \
+            new Float:vl; \
+            get_state(PART:SRC, st, 30, vl); \
+            if (!strcmp(st, "selected") || \
+                !strcmp(st, "top_selected") || \
+                !strcmp(st, "center_selected") || \
+                !strcmp(st, "bottom_selected")) \
+               play_sample("touch_sound", 1.0); \
+         } \
+      }
+
+#define GENLIST_PROGRAM_SELECT( TARGET ) \
+         program { name: "selected"; \
+            signal: "elm,state,selected"; \
+            source: "elm"; \
+            action: STATE_SET "selected" 0.0; \
+            TARGET \
+         } \
+         program { name: "unselected"; \
+            signal: "elm,state,unselected"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         }
+
+#define GENLIST_PROGRAM_BG_DIALOGUE \
+         program { name: "bg_top"; \
+            signal: "elm,state,top"; \
+            source: "*"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               new st2[31]; \
+               new Float:vl2; \
+               get_state(PART:"2depth", st, 30, vl); \
+               get_state(PART:"bg_dialogue", st2, 30, vl2); \
+               if (!strcmp(st2, "selected") || \
+                  !strcmp(st2, "top_selected") || \
+                  !strcmp(st2, "center_selected") ||  \
+                  !strcmp(st2, "bottom_selected")) \
+                  set_state(PART:"bg_dialogue", "top_selected", 0.0); \
+               else if (!strcmp(st, "2depth")) \
+                  set_state(PART:"bg_dialogue", "2depth_top", 0.0); \
+               else \
+                  set_state(PART:"bg_dialogue", "top", 0.0); \
+            } \
+         } \
+         program { name: "bg_center"; \
+            signal: "elm,state,center"; \
+            source: "*"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               new st2[31]; \
+               new Float:vl2; \
+               get_state(PART:"2depth", st, 30, vl); \
+               get_state(PART:"bg_dialogue", st2, 30, vl2); \
+               if (!strcmp(st2, "selected") || \
+                  !strcmp(st2, "top_selected") || \
+                  !strcmp(st2, "center_selected") ||  \
+                  !strcmp(st2, "bottom_selected")) \
+                  set_state(PART:"bg_dialogue", "center_selected", 0.0); \
+               else if (!strcmp(st, "2depth")) \
+                  set_state(PART:"bg_dialogue", "2depth_center", 0.0); \
+               else \
+                  set_state(PART:"bg_dialogue", "center", 0.0); \
+            } \
+         } \
+         program { name: "bg_bottom"; \
+            signal: "elm,state,bottom"; \
+            source: "*"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               new st2[31]; \
+               new Float:vl2; \
+               get_state(PART:"2depth", st, 30, vl); \
+               get_state(PART:"bg_dialogue", st2, 30, vl2); \
+               if (!strcmp(st2, "selected") || \
+                  !strcmp(st2, "top_selected") || \
+                  !strcmp(st2, "center_selected") ||  \
+                  !strcmp(st2, "bottom_selected")) \
+                  set_state(PART:"bg_dialogue", "bottom_selected", 0.0); \
+               else if (!strcmp(st, "2depth")) \
+                  set_state(PART:"bg_dialogue", "2depth_bottom", 0.0); \
+               else \
+                  set_state(PART:"bg_dialogue", "bottom", 0.0); \
+            } \
+         } \
+         program { name: "bg_normal"; \
+            signal: "elm,state,normal"; \
+            source: "*"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               new st2[31]; \
+               new Float:vl2; \
+               get_state(PART:"2depth", st, 30, vl); \
+               get_state(PART:"bg_dialogue", st2, 30, vl2); \
+               if (!strcmp(st2, "selected") || \
+                  !strcmp(st2, "top_selected") || \
+                  !strcmp(st2, "center_selected") ||  \
+                  !strcmp(st2, "bottom_selected")) \
+                  set_state(PART:"bg_dialogue", "selected", 0.0); \
+               else if (!strcmp(st, "2depth")) \
+                  set_state(PART:"bg_dialogue", "2depth", 0.0); \
+               else \
+                  set_state(PART:"bg_dialogue", "default", 0.0); \
+            } \
+         }
+
+#define GENLIST_PROGRAM_SELECT_DIALOGUE( TARGET ) \
+         program { name: "selected"; \
+            signal: "elm,state,selected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"bg_dialogue", st, 30, vl); \
+               if (!strcmp(st, "top") || !strcmp(st, "2depth_top")) \
+                  set_state(PART:"bg_dialogue", "top_selected", 0.0); \
+               else if (!strcmp(st, "center") || !strcmp(st, "2depth_center")) \
+                  set_state(PART:"bg_dialogue", "center_selected", 0.0); \
+               else if (!strcmp(st, "bottom") || !strcmp(st, "2depth_bottom")) \
+                  set_state(PART:"bg_dialogue", "bottom_selected", 0.0); \
+               else if (!strcmp(st, "default") || !strcmp(st, "2depth")) \
+                  set_state(PART:"bg_dialogue", "selected", 0.0); \
+               run_program(PROGRAM:"target_selected"); \
+            } \
+         } \
+         program { name: "unselected"; \
+            signal: "elm,state,unselected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"2depth", st, 30, vl); \
+               if (!strcmp(st, "2depth")) { \
+                  get_state(PART:"bg_dialogue", st, 30, vl); \
+                  if (!strcmp(st, "top_selected")) \
+                     set_state(PART:"bg_dialogue", "2depth_top", 0.0); \
+                  else if (!strcmp(st, "center_selected"))  \
+                     set_state(PART:"bg_dialogue", "2depth_center", 0.0); \
+                  else if (!strcmp(st, "bottom_selected"))  \
+                     set_state(PART:"bg_dialogue", "2depth_bottom", 0.0); \
+                  else if (!strcmp(st, "selected")) \
+                     set_state(PART:"bg_dialogue", "2depth", 0.0); \
+               } else { \
+                  get_state(PART:"bg_dialogue", st, 30, vl); \
+                  if (!strcmp(st, "top_selected")) \
+                  set_state(PART:"bg_dialogue", "top", 0.0); \
+                  else if (!strcmp(st, "center_selected"))  \
+                     set_state(PART:"bg_dialogue", "center", 0.0); \
+                  else if (!strcmp(st, "bottom_selected"))  \
+                     set_state(PART:"bg_dialogue", "bottom", 0.0); \
+                  else if (!strcmp(st, "selected")) \
+                     set_state(PART:"bg_dialogue", "default", 0.0); \
+               } \
+               run_program(PROGRAM:"target_unselected"); \
+            } \
+         } \
+         program { name: "target_selected"; \
+            action: STATE_SET "selected" 0.0; \
+            TARGET \
+         }\
+         program { name: "target_unselected"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         } \
+         GENLIST_PROGRAM_BG_DIALOGUE
+
+
+#define GENLIST_PROGRAM_SELECT_ARROW \
+         program { name: "selected_arrow"; \
+            signal: "elm,state,selected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"arrow", st, 30, vl); \
+               if (!strcmp(st, "default")) { \
+                  set_state(PART:"arrow", "default_press", 0.0); \
+                  set_state(PART:"arrow_clip", "default_press", 0.0); \
+               } \
+               else if (!strcmp(st, "expand_opened")) { \
+                  set_state(PART:"arrow", "expand_opened_press", 0.0); \
+                  set_state(PART:"arrow_clip", "expand_opened_press", 0.0); \
+               } \
+            } \
+         } \
+         program { name: "unselected_arrow"; \
+            signal: "elm,state,unselected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"arrow", st, 30, vl); \
+               if (!strcmp(st, "default_press")) { \
+                  set_state(PART:"arrow", "default", 0.0); \
+                  set_state(PART:"arrow_clip", "default", 0.0); \
+               } \
+               else if (!strcmp(st, "expand_opened_press")) { \
+                  set_state(PART:"arrow", "expand_opened", 0.0); \
+                  set_state(PART:"arrow_clip", "expand_opened", 0.0); \
+               } \
+            } \
+         } \
+         program { name: "selected_arrow_shadow"; \
+            signal: "elm,state,selected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"arrow_shadow_clip", st, 30, vl); \
+               if (!strcmp(st, "default")) { \
+                  set_state(PART:"arrow_shadow_clip", "default_press", 0.0); \
+               } \
+               else if (!strcmp(st, "expand_opened")) { \
+                  set_state(PART:"arrow_shadow_clip", "expand_opened_press", 0.0); \
+               } \
+            } \
+         } \
+         program { name: "unselected_arrow_shadow"; \
+            signal: "elm,state,unselected"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"arrow_shadow_clip", st, 30, vl); \
+               if (!strcmp(st, "default_press")) { \
+                  set_state(PART:"arrow_shadow_clip", "default", 0.0); \
+               } \
+               else if (!strcmp(st, "expand_opened_press")) { \
+                  set_state(PART:"arrow_shadow_clip", "expand_opened", 0.0); \
+               } \
+            } \
+         }
+
+#define GENLIST_PROGRAM_REORDER( TARGET ) \
+         program { name: "reorder_enabled"; \
+            signal: "elm,state,reorder,mode_set"; \
+            source: "elm"; \
+            action: STATE_SET "reorder" 0.0; \
+            TARGET \
+         } \
+         program { name: "reorder_disabled"; \
+            signal: "elm,state,reorder,mode_unset"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            TARGET \
+         }
+
+#define GENLIST_PROGRAM_DECORATE_REORDER( NAME, TARGET ) \
+         program { name: "reorder_enabled"NAME; \
+            signal: "elm,state,reorder,mode_set"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "decorate") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"decorate_reorder_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"reorder_set"NAME); \
+               } \
+            } \
+         } \
+         program { name: "reorder_disabled"NAME; \
+            signal: "elm,state,reorder,mode_unset"; \
+            source: "elm"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "decorate") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"decorate_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"default_set"NAME); \
+               } \
+            } \
+         } \
+         program { name: "decorate_enabled_effect"NAME; \
+            signal: "elm,state,decorate,enabled,effect";\
+            source: "elm";\
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"decorate_reorder_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"decorate_set"NAME); \
+               } \
+            } \
+         }\
+         program { name: "decorate_disabled_effect"NAME;\
+            signal: "elm,state,decorate,disabled,effect";\
+            source: "elm";\
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"reorder_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"default_set"NAME); \
+               } \
+            } \
+         }\
+         program { name: "decorate_enabled"NAME;\
+            signal: "elm,state,decorate,enabled";\
+            source: "elm";\
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"decorate_reorder_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"decorate_set"NAME); \
+               } \
+            } \
+         }\
+         program { name: "decorate_disabled"NAME;\
+            signal: "elm,state,decorate,disabled";\
+            source: "elm";\
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"state", st, 30, vl); \
+               if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) { \
+                  run_program(PROGRAM:"reorder_set"NAME); \
+               } else { \
+                  run_program(PROGRAM:"default_set"NAME); \
+               } \
+            } \
+         } \
+         program { name: "default_set"NAME; \
+            action: STATE_SET "default" 0.0;\
+            target: "state"; \
+            TARGET \
+         } \
+         program { name: "decorate_set"NAME; \
+            action: STATE_SET "decorate" 0.0;\
+            target: "state"; \
+            TARGET \
+         } \
+         program { name: "reorder_set"NAME; \
+            action: STATE_SET "reorder" 0.0;\
+            target: "state"; \
+            TARGET \
+         } \
+         program { name: "decorate_reorder_set"NAME; \
+            action: STATE_SET "decorate_reorder" 0.0;\
+            target: "state"; \
+            TARGET \
+         }
+
+#define GENLIST_PROGRAM_FLIP \
+         program { name: "flip_enabled"; \
+            signal:  "elm,state,flip,enabled"; \
+            source:  "elm"; \
+            transition: DECELERATE 0.5; \
+            action:  STATE_SET "flipped" 0.0; \
+            target: "elm.flip.content"; \
+            target: "elm.flip.icon"; \
+         } \
+         program { name: "flip_disabled"; \
+            signal:  "elm,state,flip,disabled"; \
+            source:  "elm"; \
+            transition: DECELERATE 0.5; \
+            action:  STATE_SET "default" 0.0; \
+            target: "elm.flip.content"; \
+            target: "elm.flip.icon"; \
+         } \
+         program { name: "flip_enabled_bg"; \
+            signal:  "elm,state,flip,enabled"; \
+            source:  "elm"; \
+            action:  STATE_SET "flipped" 0.0; \
+            target: "elm.flip.bg"; \
+         } \
+         program { name: "flip_disabled_bg"; \
+            signal:  "elm,state,flip,disabled"; \
+            source:  "elm"; \
+            action:  STATE_SET "default" 0.0; \
+            target: "elm.flip.bg"; \
+         }
+
+#define GENLIST_PROGRAM_FLIP_TARGET( TARGET ) \
+         program { name: "flip_enabled_target"; \
+            signal:  "elm,state,flip,enabled"; \
+            source:  "elm"; \
+            action:  STATE_SET "flipped" 0.0; \
+            TARGET \
+         } \
+         program { name: "flip_disabled_target"; \
+            signal:  "elm,state,flip,disabled"; \
+            source:  "elm"; \
+            action:  STATE_SET "default" 0.0; \
+            TARGET \
+         }
+
+#define GENLIST_PROGRAM_EDITMODE \
+   program { name: "edit_enabled"; \
+      signal:  "elm,state,edit,enabled"; \
+      source:  "*"; \
+      action:  STATE_SET "editmode" 0.0; \
+      target: "elm.padding.right.edit"; \
+      target: "elm.icon.edit"; \
+      target: "bg_dialogue_right"; \
+   } \
+   program { name: "edit_disabled"; \
+      signal:  "elm,state,edit,disabled"; \
+      source:  "*"; \
+      action:  STATE_SET "default" 0.0; \
+      target: "elm.padding.right.edit"; \
+      target: "elm.icon.edit"; \
+      target: "bg_dialogue_right"; \
+   }
+
+/***************************************************************************/
+/***************************************************************************/
+
+#define GENLIST_PROGRAMS_NORMAL( TARGET ) \
+   programs { \
+      GENLIST_PROGRAM_DEFAULT( TARGET \
+         target: "bg"; \
+         target: "bg_clip"; \
+         target: "bottom_line"; \
+         target: "bottom_line2"; \
+         target: "bottom_line_clip"; \
+         target: "bg_reorder"; \
+         target: "bg_reorder_clip"; \
+         target: "elm.padding.left"; \
+         target: "elm.padding.right"; \
+         target: "elm.padding.top"; \
+         target: "elm.padding.bottom"; \
+      ) \
+      GENLIST_PROGRAM_DISABLED( TARGET \
+         target: "bg"; \
+         target: "bg_reorder"; \
+      ) \
+      GENLIST_PROGRAM_FOCUS_NORMAL \
+      GENLIST_PROGRAM_SELECT( TARGET \
+         target: "bg"; \
+         target: "bg_reorder"; \
+      ) \
+      GENLIST_PROGRAM_SOUND("bg") \
+      GENLIST_PROGRAM_SOUND("bg_reorder") \
+      GENLIST_PROGRAM_DECORATE_REORDER("normal", TARGET \
+         target: "bg_clip"; \
+         target: "bg_reorder_clip"; \
+         target: "bottom_line_clip"; \
+         target: "elm.padding.left"; \
+         target: "elm.padding.right"; \
+         target: "elm.padding.top"; \
+         target: "elm.padding.bottom"; \
+      ) \
+      GENLIST_PROGRAM_FLIP \
+   }
+
+#define GENLIST_PROGRAMS_DIALOGUE( TARGET ) \
+   programs { \
+      GENLIST_PROGRAM_DEFAULT( TARGET \
+         target: "bg_dialogue"; \
+         target: "elm.padding.left"; \
+         target: "elm.padding.right"; \
+         target: "elm.padding.right.edit"; \
+         target: "elm.icon.edit"; \
+         target: "bg_dialogue_right"; \
+      ) \
+      GENLIST_PROGRAM_DISABLED( TARGET ) \
+      GENLIST_PROGRAM_FOCUS_DIALOGUE \
+      GENLIST_PROGRAM_SELECT_DIALOGUE( TARGET ) \
+      program { name: "bg_color_change"; \
+         signal: "bg_color_change"; \
+         source: "elm"; \
+         action: STATE_SET "2depth" 0.0; \
+         target: "2depth"; \
+      } \
+      GENLIST_PROGRAM_SOUND("bg_dialogue") \
+      GENLIST_PROGRAM_DECORATE_REORDER( "normal", TARGET \
+         target: "elm.padding.left"; \
+         target: "elm.padding.right"; \
+      ) \
+      GENLIST_PROGRAM_FLIP \
+      GENLIST_PROGRAM_EDITMODE \
+   }
+
+#define GENLIST_PROGRAMS_DECORATE_EFFECT( TARGET ) \
+   program { name: "decorate_enabled_effect_ef"; \
+      signal: "elm,state,decorate,enabled,effect";\
+      source: "elm";\
+      transition: DECELERATE 0.5;\
+      action:  STATE_SET "decorate" 0.0;\
+      TARGET \
+   }\
+   program { name: "decorate_disabled_effect_ef";\
+      signal: "elm,state,decorate,disabled,effect";\
+      source: "elm";\
+      transition: ACCELERATE 0.5;\
+      action:  STATE_SET "default" 0.0;\
+      TARGET \
+   } \
+   program { name: "decorate_enabled_ef";\
+      signal: "elm,state,decorate,enabled";\
+      source: "elm";\
+      action:  STATE_SET "decorate" 0.0;\
+      TARGET \
+   }\
+   program { name: "decorate_disabled_ef";\
+      signal: "elm,state,decorate,disabled";\
+      source: "elm";\
+      action:  STATE_SET "default" 0.0;\
+      TARGET \
+   }
+
+#define GENLIST_PROGRAMS_ENTRY( TARGET ) \
+   GENLIST_PROGRAM_DEFAULT( TARGET \
+      target: "bg"; \
+      target: "bg_clip"; \
+      target: "bottom_line"; \
+      target: "bottom_line2"; \
+      target: "bottom_line_clip"; \
+      target: "bg_reorder"; \
+      target: "elm.padding.left"; \
+      target: "elm.padding.right"; \
+   ) \
+   GENLIST_PROGRAM_DISABLED( TARGET ) \
+   GENLIST_PROGRAM_FOCUS_NORMAL \
+   GENLIST_PROGRAM_DECORATE_REORDER("editfield", TARGET \
+      target: "bg_clip"; \
+      target: "bg_reorder_clip"; \
+      target: "bottom_line_clip"; \
+      target: "elm.padding.left"; \
+      target: "elm.padding.right"; \
+   )
+
+#define GENLIST_PROGRAMS_DIALOGUE_ENTRY( TARGET ) \
+   GENLIST_PROGRAM_DEFAULT( TARGET \
+      target: "bg_dialogue"; \
+      target: "elm.padding.left"; \
+      target: "elm.padding.right"; \
+   ) \
+   GENLIST_PROGRAM_DISABLED( TARGET ) \
+   GENLIST_PROGRAM_FOCUS_DIALOGUE \
+   program { name: "bg_color_change"; \
+      signal: "bg_color_change"; \
+      source: "elm"; \
+      action: STATE_SET "2depth" 0.0; \
+      target: "2depth"; \
+   } \
+   GENLIST_PROGRAM_BG_DIALOGUE \
+   GENLIST_PROGRAM_DECORATE_REORDER( "normal", TARGET \
+      target: "elm.padding.left"; \
+      target: "elm.padding.right"; \
+   ) \
+   GENLIST_PROGRAM_FLIP \
+   GENLIST_PROGRAM_EDITMODE
+
+
+#define GENLIST_PROGRAMS_THUMB \
+   GENLIST_PROGRAM_DECORATE_REORDER( "thumb", target: "elm.thumb"; ) \
+   GENLIST_PROGRAM_FLIP_TARGET( target: "elm.thumb.clip"; ) \
+   program { name: "enabled_thumb"; \
+      signal: "elm,state,enabled"; \
+      source: "elm"; \
+      action: STATE_SET "default" 0.0; \
+      target: "elm.thumb"; \
+   } \
+   program { name: "disabled_thumb"; \
+      signal: "elm,state,disabled"; \
+      source: "elm"; \
+      action: STATE_SET "disabled" 0.0; \
+      target: "elm.thumb"; \
+   } \
+   program { name: "selected_thumb"; \
+      signal: "elm,state,selected"; \
+      source: "elm"; \
+      script { \
+         new st[31]; \
+         new Float:vl; \
+         get_state(PART:"elm.thumb", st, 30, vl); \
+         if (!strcmp(st, "reorder") || !strcmp(st, "decorate_reorder")) \
+            set_state(PART:"elm.thumb", "reorder_selected", 0.0); \
+         else \
+            set_state(PART:"elm.thumb", "selected", 0.0); \
+      } \
+   } \
+   program { name: "unselected_thumb"; \
+      signal: "elm,state,unselected"; \
+      source: "elm"; \
+      script { \
+         new st[31]; \
+         new Float:vl; \
+         get_state(PART:"elm.thumb", st, 30, vl); \
+         if (!strcmp(st, "reorder_selected")) \
+            set_state(PART:"elm.thumb", "reorder", 0.0); \
+         else \
+            set_state(PART:"elm.thumb", "default", 0.0); \
+      } \
+   }
+
+//****************************************************************************//
+// *******************************  Icon Part ******************************//
+//***************************************************************************//
+#define GENLIST_PART_ICON(NAME, DESCRIPION) \
+   part { name: NAME; \
+      scale: 1; \
+      type: SWALLOW; \
+      DESCRIPION \
+   }
+
+#define GENLIST_PARAM_ICON_LARGE \
+         min: GENLIST_ICON_LARGE_SIZE GENLIST_ICON_LARGE_SIZE; \
+         max: GENLIST_ICON_LARGE_SIZE GENLIST_ICON_LARGE_SIZE;
+
+#define GENLIST_PARAM_ICON_MEDIUM \
+         min: GENLIST_ICON_MEDIUM_SIZE GENLIST_ICON_MEDIUM_SIZE; \
+         max: GENLIST_ICON_MEDIUM_SIZE GENLIST_ICON_MEDIUM_SIZE;
+
+#define GENLIST_PARAM_ICON_SMALL \
+         min: GENLIST_ICON_SMALL_SIZE GENLIST_ICON_SMALL_SIZE; \
+         max: GENLIST_ICON_SMALL_SIZE GENLIST_ICON_SMALL_SIZE;
+
+#define GENLIST_PARAM_ICON_BTN_01 \
+         min: 0 GENLIST_BTN_01_HEIGHT; \
+         max: -1 GENLIST_BTN_01_HEIGHT;
+
+#define GENLIST_PARAM_ICON_BTN_02 \
+         min: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE; \
+         max: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE;
+
+#define GENLIST_PARAM_ICON_ONOFF_WIDTH \
+         min: GENLIST_ICON_ONOFF_WIDTH GENLIST_ICON_ONOFF_HEIGHT; \
+         max: GENLIST_ICON_ONOFF_WIDTH GENLIST_ICON_ONOFF_HEIGHT;
+
+#define GENLIST_PARAM_ICON_CHECK_RADIO \
+         min: GENLIST_ICON_CHECK_RADIO_SIZE GENLIST_ICON_CHECK_RADIO_SIZE; \
+         max: GENLIST_ICON_CHECK_RADIO_SIZE GENLIST_ICON_CHECK_RADIO_SIZE;
+
+#define GENLIST_PARAM_ICON_STAR \
+         min: GENLIST_ICON_STAR_SIZE GENLIST_ICON_STAR_SIZE; \
+         max: GENLIST_ICON_STAR_SIZE GENLIST_ICON_STAR_SIZE; \
+
+#define GENLIST_PART_ICON_LARGE_R(NAME, RIGHT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_LARGE \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_LARGE_L(NAME, LEFT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_LARGE \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_MEDIUM_R(NAME, RIGHT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         fixed: 1 1; \
+         GENLIST_PARAM_ICON_MEDIUM \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_MEDIUM_L(NAME, LEFT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_MEDIUM \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_SMALL_L(NAME, LEFT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_SMALL \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_SMALL_LB(NAME, LEFT, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LB(LEFT, BOTTOM, \
+        GENLIST_PARAM_ICON_SMALL \
+        fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_SMALL_LTB(NAME, LEFT, TOP, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, TOP, BOTTOM, \
+         GENLIST_PARAM_ICON_SMALL \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_SMALL_RT(NAME, RIGHT, TOP) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RT(RIGHT, TOP, \
+         GENLIST_PARAM_ICON_SMALL \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_SMALL_RTB(NAME, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         GENLIST_PARAM_ICON_SMALL \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_BTN_01_RTB(NAME, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM,\
+         GENLIST_PARAM_ICON_BTN_01 \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_BTN_02_RTB(NAME, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM,\
+         GENLIST_PARAM_ICON_BTN_02 \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_BTN_ONOFF_R(NAME, RIGHT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_ONOFF_WIDTH \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_BTN_ONOFF_L(NAME, LEFT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_ONOFF_WIDTH \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_CHECK_RADIO_L(NAME, LEFT) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         GENLIST_PARAM_ICON_CHECK_RADIO \
+         fixed: 1 1; \
+      ) \
+   )
+
+#define GENLIST_PART_ICON_STAR_RTB(NAME, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_ICON(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         GENLIST_PARAM_ICON_STAR \
+         fixed: 1 1; \
+      ) \
+   )
+
+/*****************************************************************************/
+/******************************* Genlist IMAGE ********************************/
+/*****************************************************************************/
+#define GENLIST_PART_IMAGE(NAME, DESCRIPION) \
+   part { name: NAME; \
+      scale: 1; \
+      type: IMAGE; \
+      DESCRIPION \
+   }
+
+#define GENLIST_PARAM_PASSWORD_IMAGE \
+            min: GENLIST_ICON_PASSWORD_SIZE GENLIST_ICON_PASSWORD_SIZE; \
+            max: GENLIST_ICON_PASSWORD_SIZE GENLIST_ICON_PASSWORD_SIZE; \
+            image.normal: "00_search_edit_field_bg.png"; \
+            image.border: 12 13 12 13; \
+            image.border_scale: 1;
+
+/*****************************************************************************/
+/******************************* Genlist Proxy ********************************/
+/*****************************************************************************/
+#define GENLIST_PART_PROXY(NAME, DESCRIPION) \
+   part { name: NAME; \
+      scale: 1; \
+      type: PROXY; \
+      DESCRIPION \
+   }
+
+/*****************************************************************************/
+/******************************* Genlist Bubble ********************************/
+/*****************************************************************************/
+#define GENLIST_IMAGES_EXPANDABLE_BTN \
+         images { \
+            image: "00_list_button_expand_closed.png" COMP; \
+            image: "00_list_button_expand_opened.png" COMP; \
+         }
+
+#define GENLIST_PART_EXPANDABLE_ARROW \
+         GENLIST_PART_ICON("touch_arrow", \
+            ignore_flags: ON_HOLD; \
+            GENLIST_DESCRIPTION_ENVELOP("arrow", ) \
+         ) \
+         GENLIST_PART_RECT("arrow_clip", \
+            GENLIST_DESCRIPTION_ENVELOP("arrow", \
+               color: GENLIST_EXPANDABLE_ARROW_NORMAL_COLOR; \
+            ) \
+            description { state: "disabled" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_DIM_COLOR; \
+            } \
+            description { state: "expand_opened_press" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_PRESS_COLOR; \
+            } \
+            description { state: "default_press" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_PRESS_COLOR; \
+            } \
+         ) \
+         GENLIST_PART_RECT("arrow_shadow_clip", \
+            GENLIST_DESCRIPTION_ENVELOP("arrow_shadow", \
+               color: GENLIST_EXPANDABLE_ARROW_SHADOW_NORMAL_COLOR; \
+            ) \
+            description { state: "disabled" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_SHADOW_DIM_COLOR; \
+            } \
+            description { state: "expand_opened_press" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_SHADOW_PRESS_COLOR; \
+               visible: 0; \
+            } \
+            description { state: "default_press" 0.0; \
+               color: GENLIST_EXPANDABLE_ARROW_SHADOW_PRESS_COLOR; \
+               visible: 0; \
+            } \
+         ) \
+         GENLIST_PART_PROXY("arrow_shadow", \
+            clip_to: "arrow_shadow_clip"; \
+            ignore_flags: ON_HOLD; \
+            mouse_events: 0; \
+            description { state : "default" 0.0; \
+               source: "arrow"; \
+               rel1.to: "arrow"; \
+               rel1.offset: 0 2; \
+               rel2.to: "arrow"; \
+               rel2.offset: 0 2; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("arrow", \
+            clip_to: "arrow_clip"; \
+            ignore_flags: ON_HOLD; \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_R("elm.padding.right", \
+               fixed: 1 1; \
+               min: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE; \
+               max: GENLIST_BTN_02_SIZE GENLIST_BTN_02_SIZE; \
+               image.normal: "00_list_button_expand_closed.png"; \
+            ) \
+            description { state: "default_press" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "expand_opened" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_list_button_expand_opened.png"; \
+            } \
+            description { state: "expand_opened_press" 0.0; \
+               inherit: "expand_opened" 0.0; \
+            } \
+         )
+
+/*****************************************************************************/
+/******************************* Genlist RECT ********************************/
+/*****************************************************************************/
+#define GENLIST_PART_SPACER(NAME, DESCRIPION) \
+    part { name: NAME; \
+      scale: 1; \
+      mouse_events: 0; \
+      type: SPACER; \
+      DESCRIPION \
+   }
+
+#define GENLIST_PART_RECT(NAME, DESCRIPION) \
+    part { name: NAME; \
+      scale: 1; \
+      type: RECT; \
+      DESCRIPION \
+   }
+
+/*****************************************************************************/
+/******************************* Genlist TEXT ********************************/
+/*****************************************************************************/
+// FIXME: because, when naviframe item is pushed,
+// naviframe freeze all events so text events cannot be repeated. :-(
+// So all texts should have it's own sound program, not repeat to BG
+#define GENLIST_PART_TEXT(NAME, DESCRIPION) \
+    part { name: NAME; \
+      scale: 1; \
+      type: TEXT; \
+      repeat_events: 1; \
+      DESCRIPION \
+   }
+
+#define GENLIST_PART_TEXTBLOCK(NAME, DESCRIPION) \
+    part { name: NAME; \
+      scale: 1; \
+      type: TEXTBLOCK; \
+      repeat_events: 1; \
+      DESCRIPION \
+   }
+
+/*************************** parameters **********************************/
+#define GENLIST_PARAM_TEXT_LIMIT_RB \
+   rel1.to_x: "base"; /* This limits text growing. */\
+   rel1.relative: 0.65 0; /* This limits text growing. */\
+   text.max: 1 0; /* This limits text growing. */
+
+#define GENLIST_PARAM_TEXT_LIMIT_RT \
+   rel1.to_x: "base"; /* This limits text growing. */\
+   rel1.relative: 0.65 1; /* This limits text growing. */\
+   text.max: 1 0; /* This limits text growing. */
+
+#define GENLIST_PARAM_TEXT_LIMIT_RT_( LIMIT ) \
+   rel1.to_x: "base"; /* This limits text growing. */\
+   rel1.relative: LIMIT 1; /* This limits text growing. */\
+   text.max: 1 0; /* This limits text growing. */
+
+// Group Title
+#define GENLIST_PARAM_DIALOGUE_GROUP_TITLE \
+   color: GENLIST_DIALOGUE_GROUP_TITLE_COLOR; \
+   text { \
+      align: 0.0 0.5; \
+      font: "Tizen:style=Bold"; \
+      min: 0 1; \
+      size: GENLIST_DIALOGUE_GROUP_TITLE_SIZE; \
+      text_class: "list_item"; \
+   }
+
+// Password style
+#define GENLIST_PARAM_PASSWORD_TITLE \
+   color: DIALOGUE_PASSWORD_TITLE_COLOR; \
+   text { \
+      font: "Tizen:style=Bold"; \
+      size: DIALOGUE_PASSWORD_TITLE_SIZE; \
+      min: 0 1; \
+      align: 0 0.5; \
+      text_class: "list_item"; \
+   }
+
+// Progress main text
+#define GENLIST_PARAM_PROGRESS_MAIN \
+   color: GENLIST_LIST_MAIN_TEXT_UNREAD_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Regular"; \
+      size: GENLIST_PROGRESS_MAIN_TEXT_SIZE; \
+      text_class: "list_item"; \
+   }
+
+// list main text
+#define GENLIST_PARAM_LISTITEM \
+   color: GENLIST_LIST_MAIN_TEXT_UNREAD_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Regular"; \
+      size: GENLIST_LIST_MAIN_TEXT_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_LISTITEM_TB \
+   text { \
+      min: 0 1; \
+      style: "genlist_style_list_main_text_unread"; \
+   }
+
+#define GENLIST_PARAM_LISTITEM_TB_WRAP \
+   text { \
+      min: 0 1; \
+      style: "genlist_style_list_main_text_unread_wrap"; \
+   }
+
+// list subtext
+#define GENLIST_PARAM_SUBITEM_DEFAULT \
+   color: GENLIST_LIST_SUB_TEXT_DEFAULT_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_LIST_SUB_TEXT_SIZE; \
+      text_class: "tizen"; \
+   }
+
+#define GENLIST_PARAM_SUBITEM_SETTINGS \
+   color: GENLIST_LIST_SUB_TEXT_SETTINGS_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_LIST_SUB_TEXT_SIZE; \
+      text_class: "tizen"; \
+   }
+
+#define GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+   text { \
+      min: 0 1; \
+      style: "genlist_style_list_sub_text_default"; \
+   }
+
+#define GENLIST_PARAM_SUBITEM_DEFAULT_TB_WRAP \
+   text { \
+      min: 0 1; \
+      style: "genlist_style_list_sub_text_default_wrap"; \
+   }
+
+#define GENLIST_PARAM_SUBITEM_SETTINGS_TB \
+   text { \
+      min: 0 1; \
+      style: "genlist_style_list_sub_text_settings"; \
+   }
+
+// list subtext 02
+#define GENLIST_PARAM_SUBITEM_02 \
+   color: GENLIST_LIST_SUB_TEXT_02_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_LIST_SUB_TEXT_02_SIZE; \
+      text_class: "tizen"; \
+   }
+
+// Dialogue group - Apps
+#define GENLIST_PARAM_APPS_NAME\
+   color: GENLIST_APPS_NAME_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_APPS_NAME_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_APPS_INC\
+   color: GENLIST_APPS_INC_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_APPS_INC_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_APPS_RATING\
+   color: GENLIST_APPS_RATING_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_APPS_RATING_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_APPS_PRICE\
+   color: GENLIST_APPS_PRICE_ORIGINAL_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_APPS_PRICE_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_APPS_PRICE_SALE\
+   color: GENLIST_APPS_PRICE_SALE_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_APPS_PRICE_SIZE; \
+      text_class: "list_item"; \
+   }
+
+#define GENLIST_PARAM_CONTENTS_TEXT \
+   color: GENLIST_CONTENTS_TEXT_COLOR; \
+   text { \
+      align: 0 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Regular"; \
+      size: GENLIST_CONTENTS_TEXT_SIZE; \
+      text_class: "tizen"; \
+   }
+
+/*************************** Descriptions **********************************/
+// list main text
+#define GENLIST_DESCRIPTION_LISTITEM_OTHERS \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_MAIN_TEXT_UNREAD_DIM_COLOR; \
+   } \
+   description { state: "read" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_MAIN_TEXT_READ_COLOR; \
+   } \
+   description { state: "read,disabled" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_MAIN_TEXT_READ_DIM_COLOR; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_TEXT_FOCUS_COLOR; \
+   }
+
+#define GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_unread_dim"; \
+   } \
+   description { state: "read" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_read"; \
+   } \
+   description { state: "read,disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_read_dim"; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_focus"; \
+   }
+
+// list sub text
+#define GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_SUB_TEXT_DEFAULT_DIM_COLOR; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_TEXT_FOCUS_COLOR; \
+   }
+
+#define GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_default_dim"; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_focus"; \
+   }
+
+#define GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB_WRAP \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_default_dim_wrap"; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_focus_wrap"; \
+   }
+
+#define GENLIST_DESCRIPTION_SUBITEM_SETTINGS_OTHERS \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_SUB_TEXT_SETTINGS_DIM_COLOR; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      color: GENLIST_LIST_TEXT_FOCUS_COLOR; \
+   }
+
+#define GENLIST_DESCRIPTION_SUBITEM_SETTINGS_OTHERS_TB \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_settings_dim"; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_sub_text_focus"; \
+   }
+
+// list main text multiline
+#define GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB_WRAP \
+   description { state: "disabled" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_unread_dim_wrap"; \
+   } \
+   description { state: "selected" 0.0; \
+      inherit: "default" 0.0; \
+      text.style: "genlist_style_list_main_text_focus_wrap"; \
+   }
+
+/*************************** Parts **********************************/
+#define GENLIST_PART_DIALOGUE_GROUP_HELP_TEXT(NAME, LEFT, RIGHT, TOP, BOTTOM, PARAM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, TOP, BOTTOM, \
+         text { \
+            min: 0 1; \
+            style: "genlist_style_dialogue_group_help_text"; \
+         } \
+         PARAM) \
+   )
+
+#define GENLIST_PART_LISTITEM(NAME, DESCRIPTION) \
+   GENLIST_PART_TEXT(NAME, \
+      DESCRIPTION \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS \
+   )
+
+#define GENLIST_PART_LISTITEM_TB(NAME, DESCRIPTION) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      DESCRIPTION \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB \
+   )
+
+#define GENLIST_PART_LISTITEM_(NAME, HEIGHT, LEFT, RIGHT, TOP, BOTTOM, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_LISTITEM \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS \
+   )
+
+#define GENLIST_PART_LISTITEM_TB_(NAME, HEIGHT, LEFT, RIGHT, TOP, BOTTOM, PARAM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         fixed: 1 0; \
+         GENLIST_PARAM_LISTITEM_TB \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB \
+   )
+
+#define GENLIST_PART_LISTITEM_LR(NAME, HEIGHT, LEFT, RIGHT, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_LISTITEM \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS \
+   )
+
+#define GENLIST_PART_LISTITEM_LRT(NAME, HEIGHT, LEFT, RIGHT, TOP, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, TOP, \
+         min: 0 HEIGHT; \
+         fixed: 0 1; \
+         GENLIST_PARAM_LISTITEM \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS \
+   )
+
+#define GENLIST_PART_LISTITEM_LRT_TB(NAME, HEIGHT, LEFT, RIGHT, TOP, PARAM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, TOP, \
+         min: 0 HEIGHT; \
+         fixed: 0 1; \
+         GENLIST_PARAM_LISTITEM_TB \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB \
+   )
+
+#define GENLIST_PART_LISTITEM_LR_TB(NAME, HEIGHT, LEFT, RIGHT, PARAM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: 0 HEIGHT; \
+         fixed: 1 0; \
+         GENLIST_PARAM_LISTITEM_TB \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_LISTITEM_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_(NAME, HEIGHT, LEFT, RIGHT, TOP, BOTTOM, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM(NAME, DESCRIPTION) \
+   GENLIST_PART_TEXT(NAME, \
+      DESCRIPTION \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_TB(NAME, DESCRIPTION) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      DESCRIPTION \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_R(NAME, HEIGHT, RIGHT) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: 0 HEIGHT; \
+         fixed: 1 0; \
+         GENLIST_PARAM_TEXT_LIMIT_RB \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_R_TB(NAME, HEIGHT, RIGHT) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: 0 HEIGHT; \
+         fixed: 1 0; \
+         GENLIST_PARAM_TEXT_LIMIT_RB \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_RB(NAME, HEIGHT, RIGHT, BOTTOM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RB(RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         fixed: 1 1; \
+         GENLIST_PARAM_TEXT_LIMIT_RB \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_RB_TB(NAME, HEIGHT, RIGHT, BOTTOM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_RB(RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RB \
+         fixed: 1 1; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_TB_(NAME, HEIGHT, LEFT, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_R_FIXED(NAME, WIDTH, HEIGHT, RIGHT) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: WIDTH HEIGHT; \
+         fixed: 1 1; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_R_FIXED_TB(NAME, WIDTH, HEIGHT, RIGHT) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+       GENLIST_DESCRIPTION_R(RIGHT, \
+         min: WIDTH HEIGHT; \
+         fixed: 1 0; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_L_FIXED(NAME, WIDTH, HEIGHT, LEFT) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, "elm.padding.top", "elm.padding.bottom", \
+         min: WIDTH HEIGHT; \
+         fixed: 1 1; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_LR(NAME, HEIGHT, LEFT, RIGHT, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION(LEFT, RIGHT, "elm.padding.top", "elm.padding.bottom", \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+         PARAM \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_LR_TB(NAME, HEIGHT, LEFT, RIGHT) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_LR(LEFT, RIGHT, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_LB(NAME, HEIGHT, LEFT, RIGHT) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LB(LEFT, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_LRB(NAME, HEIGHT, LEFT, RIGHT, BOTTOM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LRB(LEFT, RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+         fixed: 0 1; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_SETTINGS_LRB(NAME, HEIGHT, LEFT, RIGHT, BOTTOM, PARAM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LRB(LEFT, RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         fixed: 1 1; /*FIXME: why text need this, but textblock doesn't */ \
+         GENLIST_PARAM_SUBITEM_SETTINGS\
+         PARAM; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_SETTINGS_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_LRB_TB(NAME, HEIGHT, LEFT, RIGHT, BOTTOM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_LRB(LEFT, RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+         fixed: 0 1; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_SETTINGS_LRB_TB(NAME, HEIGHT, LEFT, RIGHT, BOTTOM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_LRB(LEFT, RIGHT, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_SUBITEM_SETTINGS_TB \
+         fixed: 0 1; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_SETTINGS_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_LRT(NAME, HEIGHT, LEFT, RIGHT, TOP) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, TOP, \
+         min: 0 HEIGHT; \
+         fixed: 0 1; \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_SETTINGS_LRT(NAME, HEIGHT, LEFT, RIGHT, TOP) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LRT(LEFT, RIGHT, TOP, \
+         min: 0 HEIGHT; \
+         fixed: 0 1; \
+         GENLIST_PARAM_SUBITEM_SETTINGS \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_SETTINGS_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_LTB(NAME, HEIGHT, LEFT, TOP, BOTTOM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_LTB(LEFT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         fixed: 1 1; /*FIXME: why text need this, but textblock doesn't */ \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_RTB_LIMIT(NAME, HEIGHT, RIGHT, TOP, BOTTOM, LIMIT) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RT_(LIMIT) \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+         fixed: 1 0; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_RTB_LIMIT_TB(NAME, HEIGHT, RIGHT, TOP, BOTTOM, LIMIT) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RT_(LIMIT) \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+         fixed: 1 0; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_RTB(NAME, HEIGHT, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RT \
+         GENLIST_PARAM_SUBITEM_DEFAULT \
+         fixed: 1 0; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PART_SUBITEM_RTB_TB(NAME, HEIGHT, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_TEXTBLOCK(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RT \
+         GENLIST_PARAM_SUBITEM_DEFAULT_TB \
+         fixed: 1 0; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS_TB \
+   )
+
+#define GENLIST_PART_SUBITEM_02_RTB(NAME, HEIGHT, RIGHT, TOP, BOTTOM) \
+   GENLIST_PART_TEXT(NAME, \
+      GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+         min: 0 HEIGHT; \
+         GENLIST_PARAM_TEXT_LIMIT_RT \
+         GENLIST_PARAM_SUBITEM_02 \
+         fixed: 1 0; \
+      ) \
+      GENLIST_DESCRIPTION_SUBITEM_DEFAULT_OTHERS \
+   )
+
+#define GENLIST_PARAM_LIST_BUBBLE_TEXT \
+   color: GENLIST_LIST_BUBBLE_TEXT_COLOR; \
+   text { \
+      align: 1 0.5; \
+      min: 0 1; \
+      font: "Tizen:style=Bold"; \
+      size: GENLIST_LIST_BUBBLE_TEXT_SIZE; \
+      text_class: "tizen"; \
+   }
+
+// FIXME: Need to find why rel2.offset: 9 -1 will not fix the alignment of bubble text ?
+#define GENLIST_PART_LIST_BUBBLE_TEXT_RTB(NAME, HEIGHT, RIGHT, TOP, BOTTOM) \
+         GENLIST_PART_IMAGE("elm.bubble", \
+            mouse_events: 0; \
+            GENLIST_DESCRIPTION_ENVELOP(NAME, \
+               image { \
+                  normal: "00_list_bubble_bg.png"; \
+                  border: 8 8 0 0; \
+               } \
+               rel1.offset: -10 0; \
+               rel2.offset: 8 -1; \
+               min: 48 38; \
+               max: -1 38; \
+               fixed: 0 1; \
+               color: GENLIST_LIST_BUBBLE_COLOR; \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_LIST_BUBBLE_PRESS_COLOR; \
+            } \
+         ) \
+         GENLIST_PART_TEXT(NAME, \
+            GENLIST_DESCRIPTION_RTB(RIGHT, TOP, BOTTOM, \
+               min: 0 HEIGHT; \
+               GENLIST_PARAM_TEXT_LIMIT_RT \
+               rel2.offset: -10 -1; /* This maintain the text alignment with bubble text. */\
+               GENLIST_PARAM_LIST_BUBBLE_TEXT \
+            ) \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_LIST_BUBBLE_TEXT_FOCUS_COLOR; \
+            } \
+         )
+
+#define GENLIST_POPUP_STYLE(NAME) \
+   group { GENLIST_NAME(NAME"/popup/default") \
+      inherit: "elm/genlist/item/"NAME"/default"; \
+      images { \
+         image: "00_popup_list_press.png" COMP; \
+      } \
+      parts { \
+         GENLIST_PART_SPACER("bg_left_top_padding", \
+            description { state: "default" 0.0; \
+               min: 4 4; \
+               fixed: 1 1; \
+               align: 0 0; \
+               rel2.relative: 0 0; \
+            } \
+         ) \
+         GENLIST_PART_SPACER("bg_right_bottom_padding", \
+            description { state: "default" 0.0; \
+               min: 4 5; \
+               fixed: 1 1; \
+               align: 1 1; \
+               rel1.relative: 1 1; \
+            } \
+         ) \
+         GENLIST_PART_IMAGE("bg", \
+            description { state: "default" 0.0; \
+               image { \
+                  normal: "00_popup_list_press.png"; \
+                  border: 8 8 8 8; \
+                  border_scale: 1; \
+               } \
+               rel1 { \
+                  relative: 1 1; \
+                  to_x: "bg_left_top_padding"; \
+                  to_y: "bg_left_top_padding"; \
+               } \
+               rel2 { \
+                  relative: 0 0; \
+                  to_x: "bg_right_bottom_padding"; \
+                  to_y: "bg_right_bottom_padding"; \
+               } \
+               color: GENLIST_LIST_BG_POPUP_COLOR; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_LIST_BG_POPUP_COLOR; \
+            } \
+            description { state: "selected" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_LIST_BG_POPUP_PRESS_COLOR; \
+            } \
+         ) \
+         GENLIST_PART_RECT("bottom_line", \
+            description { state: "default" 0.0; \
+               color: GENLIST_LIST_LINE1_POPUP_COLOR; \
+               rel1.to: "bottom_line2"; \
+               rel2.to: "bottom_line2"; \
+               rel2.relative: 1 0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         ) \
+         GENLIST_PART_RECT("bottom_line2", \
+            description { state: "default" 0.0; \
+               color: GENLIST_LIST_LINE2_POPUP_COLOR; \
+               rel1.to_x: "bg"; \
+               rel2.to_x: "bg"; \
+               rel1.offset: 1 0; \
+               rel2.offset: -2 -1; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 0; \
+            } \
+         ) \
+         GENLIST_PART_RECT("sound",  \
+            repeat_events: 1;  /*for play_sound to check selected state*/ \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         ) \
+      } \
+      programs { \
+         program { name : "hide_bottomline"; \
+            signal: "elm,state,bottomline,hide"; \
+            source: ""; \
+            action: STATE_SET "disabled" 0.0; \
+            target: "bottom_line"; \
+            target: "bottom_line2"; \
+         } \
+         program { name : "show_bottomline"; \
+            signal: "elm,state,bottomline,show"; \
+            source: ""; \
+            action: STATE_SET "default" 0.0; \
+            target: "bottom_line"; \
+            target: "bottom_line2"; \
+         } \
+      } \
+   }
diff --git a/live.viewer/dbox.app/data/groups/genlist_progress_style.edc b/live.viewer/dbox.app/data/groups/genlist_progress_style.edc
new file mode 100644 (file)
index 0000000..7f53e87
--- /dev/null
@@ -0,0 +1,418 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group { name: "elm/progressbar/horizontal/music_player/list_progressive";
+      images {
+         image: "genlist/01_processing_list_bg.png" COMP;
+         image: "genlist/01_processing_list_processing_bg_left.png" COMP;
+         image: "genlist/01_processing_list_processing_light.png" COMP;
+      }
+      parts {
+         part { name: "elm.background.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            type: RECT;
+            description {
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.swallow.bar";
+            mouse_events: 0;
+            scale: 1;
+            type: SWALLOW;
+            description {
+               min: 0 92;
+               max: 99999 92;
+               state: "default" 0.0;
+               rel1 {
+                  to_y: "elm.background.progressbar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.background.progressbar";
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  offset: 0 0;
+                  to_y: "elm.background.progressbar";
+               }
+               rel2 {
+                  offset: 0 -1;
+                  relative: 0.0 1.0;
+                  to_y: "elm.background.progressbar";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               rel2.offset: 0 -1;//4 -1;
+            }
+         }
+         part { name: "background";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+                  offset: -1 -1;
+               }
+               image {
+                  normal: "genlist/01_processing_list_bg.png";
+                  border: 0 0 0 0;
+               }
+            }
+         }
+         part { name: "elm.text.status";
+            type: TEXT;
+            scale: 1;
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               visible: 0;
+               rel1 {
+                  to: "background";
+                  relative: 0.5 0.5;
+               }
+               rel2 {
+                  to: "background";
+                  relative: 0.5 0.5;
+               }
+               text {
+                  font: "GP45_ArabCJK_TouchWiz";
+                  size: 25;
+                  min: 0 0;
+                  align: 0.5 0.0;
+               }
+               color: 255 255 255 255;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+               text.min: 1 1;
+            }
+         }
+
+         part { name: "elm.progress.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to_y: "elm.swallow.bar";
+                  to_x: "elm.cur.progressbar";
+                  offset: -1 -1;
+               }
+               image {
+                  normal: "genlist/01_processing_list_processing_bg_left.png";
+                  border: 0 0 2 2;
+               }
+            }
+            description {
+               state: "invert" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to_y: "elm.swallow.bar";
+                  to_x: "elm.cur.progressbar";
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+               }
+            }
+            description {
+               state: "state_begin" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 0.1 1.0;
+               }
+            }
+            description {
+               state: "state_end" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.9 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.progress.tail";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+            rel1 {
+               to: "elm.progress.progressbar";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "elm.progress.progressbar";
+               offset: 64 -1;
+            }
+            image.normal: "genlist/01_processing_list_processing_light.png";
+         }
+      }
+         part { name: "text-bar";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "progress-rect";
+            effect: SOFT_SHADOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               visible: 0;
+               rel1.to: "elm.text.status";
+               rel1.offset: -1 -1;
+               rel2.to: "elm.text.status";
+               text {
+                  text_source: "elm.text.status";
+                  font: "GP45_ArabCJK_TouchWiz";
+                  size: 10;
+                  min: 0 0;
+                  align: 0.0 0.0;
+               }
+               color: 224 224 224 255;
+               color3: 0 0 0 64;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               text.min: 1 1;
+            }
+         }
+         part { name: "elm.cur.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            dragable {
+               confine: "background";
+               x: 1 1 1;
+               y: 0 0 0;
+            }
+            description { state: "default" 0.0;
+               min: 0 28;
+               fixed: 1 1;
+               visible: 0;
+               rel1 {
+                  to: "background";
+                  relative: 0 0;
+               }
+               rel2.to: "background";
+           }
+         }
+         part { name: "progress-rect";
+            mouse_events: 0;
+            scale: 1;
+            type: RECT;
+            description {
+               state: "default" 0.0;
+               rel1.to: "elm.progress.progressbar";
+               rel2.to: "elm.progress.progressbar";
+            }
+         }
+
+        part { name: "elm.padding.left";
+            type: RECT;
+         scale: 1;
+            description {
+            state: "default" 0.0;
+            min: 20 0;
+            fixed: 1 0;
+            rel1 {
+                  relative: 0.0  0.0;
+                   offset:   0    0;
+                  }
+                  rel2 {
+                     relative: 0.0  1.0;
+                     offset:   0   0;
+                  }
+                  color: 0 0 0 0;
+            align: 0.0 0.0;
+            }
+         }
+
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               fixed: 1 1;
+               align: 0.0 0.5;
+               rel1 {
+              to_x: "elm.padding.left";
+                  relative: 1.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  offset: 0 0;
+               }
+               color: 255 255 255 255;
+               text {
+                  font: "GP45_ArabCJK_TouchWiz";
+                  size: 34;
+                  min: 0 0;
+                  align: 0.0 0.5;
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               text.min: 1 1;
+            }
+         }
+      }
+      programs {
+         program { name: "label_show";
+            signal: "elm,state,text,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+         program { name: "label_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.text";
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.swallow.content";
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+         }
+         program { name: "units_show";
+            signal: "elm,state,units,visible";
+            source: "elm";
+            action:  STATE_SET "show" 0.0;
+            target: "text-bar";
+            target: "elm.text.status";
+         }
+         program { name: "units_hide";
+            signal: "elm,state,units,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "text-bar";
+            target: "elm.text.status";
+         }
+         program { name: "slide_to_end";
+            action:  STATE_SET "state_end" 0.0;
+            transition: LINEAR 0.5;
+            target: "elm.progress.progressbar";
+            after: "slide_to_begin";
+         }
+         program { name: "slide_to_begin";
+            signal: "elm,state,slide,begin";
+            action: STATE_SET "state_begin" 0.0;
+            target: "elm.progress.progressbar";
+            transition: LINEAR 0.5;
+            after: "slide_to_end";
+         }
+         program { name: "start_pulse";
+            signal: "elm,state,pulse,start";
+            source: "elm";
+            after: "slide_to_end";
+         }
+         program { name: "stop_pulse";
+            signal: "elm,state,pulse,stop";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "slide_to_begin";
+            target: "slide_to_end";
+            target: "start_pulse";
+            after: "state_pulse";
+         }
+         program { name: "state_pulse";
+            signal: "elm,state,pulse";
+            source: "elm";
+            action: STATE_SET "state_begin" 0.0;
+            target: "elm.progress.progressbar";
+            after: "units_hide";
+         }
+         program { name: "state_fraction";
+            signal: "elm,state,fraction";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "slide_to_begin";
+            target: "slide_to_end";
+            target: "start_pulse";
+            action: STATE_SET "default" 0.0;
+            target: "elm.progress.progressbar";
+         }
+         program { name: "set_invert_on";
+            signal: "elm,state,inverted,on";
+            source: "elm";
+            action:  STATE_SET "invert" 0.0;
+            target: "elm.progress.progressbar";
+         }
+         program { name: "set_invert_off";
+            signal: "elm,state,inverted,off";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.progress.progressbar";
+         }
+      }
+   }
+
diff --git a/live.viewer/dbox.app/data/groups/genlist_swipe.edc b/live.viewer/dbox.app/data/groups/genlist_swipe.edc
new file mode 100644 (file)
index 0000000..6bcc501
--- /dev/null
@@ -0,0 +1,539 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 SWIPE_TRANSIT       SIN_FAC 0.667 0.8
+
+#define SWIPE_THRESH_X      120
+#define SWIPE_THRESH_Y      30
+
+#define SWIPE_OVERLAP_SIZE  216
+#define SWIPE_BORDER_SIZE   215
+
+#define SWIPE_COLOR_OTHER   "B041P"
+#define SWIPE_COLOR_CALL    "B0232"
+#define SWIPE_COLOR_MESSAGE "B0233"
+
+// state: normal(0)->start,right( 1)->rollback,right ( 3), swipe,right ( 2)-> normal(0)
+//                 ->start,left (-1)->rollback,right (-3), swipe,right (-2)->
+#define GENLIST_SWIPE_SCRIPTS \
+   script { \
+      public _state; \
+      public x1, y1; \
+      public cleanup() { \
+         set_int(_state, 0); \
+         set_int(x1, 0); \
+         set_int(y1, 0); \
+         set_drag(PART:"drag_part", 0, 0); \
+         set_state(PART:"drag_part", "default", 0.0); \
+         set_state(PART:"drag_part_left", "default", 0.0); \
+         set_state(PART:"drag_part_right", "default", 0.0); \
+         set_state(PART:"elm.text.swipe.left", "default", 0.0); \
+         set_state(PART:"elm.text.swipe.right", "default", 0.0); \
+         set_state(PART:"elm.image.swipe.left", "default", 0.0); \
+         set_state(PART:"elm.image.swipe.right", "default", 0.0); \
+         set_state(PART:"swipe_temp_disabler", "default", 0.0); \
+      } \
+   }
+
+#define GENLIST_SWIPE_IMAGES \
+      image : "00_icon_call.png" COMP; \
+      image : "00_icon_message.png" COMP; \
+      image : "00_list_swipe_right.#.png" COMP; \
+      image : "00_list_swipe_left.#.png" COMP;
+
+#define GENLIST_SWIPE_PARTS \
+      part { name: "drag_part"; \
+         type: RECT; \
+         scale: 1; \
+         repeat_events: 1; \
+         dragable { \
+            x: 1 1 0; \
+            y: 0 0 0; \
+         } \
+         description { state: "default" 0.0; \
+            color: 0 0 0 0; \
+            rel1.offset: -SWIPE_OVERLAP_SIZE 0; \
+            rel2.offset: SWIPE_OVERLAP_SIZE 0; \
+         } \
+         description { state: "disable" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 0; \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default" 0.0; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_OTHER; \
+         } \
+         description { state: "right_end" 0.0; \
+            inherit: "start_right"; \
+            rel1.relative: 1 0; \
+         } \
+         description { state: "right_rollback" 0.0; \
+            inherit: "start_right" 0.0; \
+            rel1.relative: -1 0; \
+            color: 0 0 0 0; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default" 0.0; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_OTHER; \
+         } \
+         description { state: "left_end" 0.0; \
+            inherit: "start_left" 0.0; \
+            rel2.relative: 0 1; \
+         } \
+         description { state: "left_rollback" 0.0; \
+            inherit: "start_left" 0.0; \
+            rel2.relative: 2 1; \
+            color: 0 0 0 0; \
+         } \
+      } \
+      part { name: "drag_part_left"; \
+         type: IMAGE; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            color: 0 0 0 0; \
+            rel1 { \
+               relative: -999 0; \
+            } \
+            rel2 { \
+               to_x: "drag_part"; \
+               relative: 0 1; \
+               offset: SWIPE_OVERLAP_SIZE 0; \
+            } \
+            image { \
+               normal: "00_list_swipe_left.#.png"; \
+               border: 0 SWIPE_BORDER_SIZE 53 53; \
+               border_scale: 1; \
+            } \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default"; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_CALL; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default"; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_CALL; \
+         } \
+      } \
+      part { name: "drag_part_right"; \
+         type: IMAGE; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            color: 0 0 0 0; \
+            rel1 { \
+               to_x: "drag_part"; \
+               relative: 1 0; \
+               offset: -SWIPE_OVERLAP_SIZE 0; \
+            } \
+            rel2 { \
+               relative: 999 1; \
+            } \
+            image { \
+               normal: "00_list_swipe_right.#.png"; \
+               border: SWIPE_BORDER_SIZE 0 53 53; \
+               border_scale: 1; \
+            } \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default"; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_MESSAGE; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default"; \
+            color: 255 255 255 255; \
+            color_class: SWIPE_COLOR_MESSAGE; \
+         } \
+      } \
+      part { name: "swipe_temp_disabler"; \
+         type: RECT; \
+         scale:1; \
+         repeat_events: 0; \
+         description { state: "default" 0.0; \
+            visible: 0; \
+            color: 0 0 0 0; \
+         } \
+         description { state: "enable" 0.0; \
+            inherit: "default"; \
+            visible: 1; \
+         } \
+      } \
+      part { name: "elm.image.swipe.left"; \
+         type: IMAGE; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            visible: 0; \
+            color_class: "F011L1P"; \
+            image.normal: "00_icon_message.png"; \
+            rel1 { \
+               to_x: "elm.padding.left"; \
+               relative: 1 0; \
+            } \
+            rel2 { \
+               to_x: "elm.padding.right"; \
+               relative: 1 1; \
+            } \
+            align: 0 0.5; \
+            fixed: 1 1; \
+            min: 81 81; \
+            max: 81 81; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 1; \
+            color: 255 255 255 255; \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default" 0.0; \
+         } \
+         description { state: "right_rollback" 0.0; \
+            inherit: "default" 0.0; \
+            color: 0 0 0 0; \
+         } \
+         description { state: "left_rollback" 0.0; \
+            inherit: "default" 0.0; \
+            color: 0 0 0 0; \
+         } \
+      } \
+      part { name: "elm.image.swipe.right"; \
+         type: IMAGE; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            image.normal: "00_icon_call.png"; \
+            color_class: "F011L1P"; \
+            visible: 0; \
+            rel1 { \
+               to_x: "elm.padding.right"; \
+               relative: 0 0; \
+            } \
+            rel2 { \
+               to_x: "elm.padding.right"; \
+               relative: 0 1; \
+            } \
+            align: 1 0.5; \
+            fixed: 1 1; \
+            min: 81 81; \
+            max: 81 81; \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 1; \
+            color: 255 255 255 255; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default" 0.0; \
+         } \
+         description { state: "right_rollback" 0.0; \
+            inherit: "default" 0.0; \
+            color: 0 0 0 0; \
+         } \
+         description { state: "left_rollback" 0.0; \
+            inherit: "default" 0.0; \
+            color: 0 0 0 0; \
+         } \
+      } \
+      part { name: "elm.text.swipe.left"; \
+         type: TEXT; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            rel1 { \
+               relative: 1 0; \
+               to_x: "elm.image.swipe.left"; \
+            } \
+            visible: 0; \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default"; \
+            visible: 1; \
+            align: 0.5 0.5; \
+            color_class: "T023"; \
+            text { \
+               align: 0.5 0.5; \
+               min: 0 1; \
+               font: "Tizen:style=Regular"; \
+               size: 44; \
+               text_class: "T023"; \
+            } \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default" 0.0; \
+         } \
+      } \
+      part { name: "elm.text.swipe.right"; \
+         type: TEXT; \
+         scale: 1; \
+         mouse_events: 0; \
+         description { state: "default" 0.0; \
+            rel2 { \
+               relative: 0 1; \
+               to_x: "elm.image.swipe.right"; \
+            } \
+            visible: 0; \
+         } \
+         description { state: "start_right" 0.0; \
+            inherit: "default" 0.0; \
+            visible: 1; \
+            align: 0.5 0.5; \
+            color_class: "T023"; \
+            text { \
+               align: 0.5 0.5; \
+               min: 0 1; \
+               font: "Tizen:style=Regular"; \
+               size: 44; \
+               text_class: "T023"; \
+               text: "Call"; \
+            } \
+         } \
+         description { state: "start_left" 0.0; \
+            inherit: "default" 0.0; \
+         } \
+      }
+
+#define GENLIST_SWIPE_PROGRAMS \
+   program { name: "drag_up"; \
+      signal: "mouse,up,1"; \
+      source: "drag_part"; \
+      script { \
+         new x, y, w, h, ww, hh; \
+         get_geometry(PART:"base", x, y, ww, hh); \
+         get_geometry(PART:"drag_part", x, y, w, h); \
+         x = x + SWIPE_OVERLAP_SIZE; \
+         if (get_int(_state) == 1) { \
+            if (x >= (ww/2)) { \
+               set_int(_state, 3); \
+               set_state(PART:"swipe_temp_disabler", "enable", 0.0); \
+               run_program(PROGRAM:"end_move_right"); \
+            } else { \
+               set_int(_state, 2); \
+               set_state(PART:"swipe_temp_disabler", "enable", 0.0); \
+               set_state(PART:"elm.text.swipe.right", "default", 0.0); \
+               set_state(PART:"elm.text.swipe.left", "default", 0.0); \
+               run_program(PROGRAM:"end_rollback_right"); \
+            } \
+         } else if (get_int(_state) == -1) { \
+            if (-x >= (ww/2)) { \
+               set_int(_state, -3); \
+               set_state(PART:"swipe_temp_disabler", "enable", 0.0); \
+               run_program(PROGRAM:"end_move_left"); \
+            } else { \
+               set_int(_state, -2); \
+               set_state(PART:"swipe_temp_disabler", "enable", 0.0); \
+               set_state(PART:"elm.text.swipe.right", "default", 0.0); \
+               set_state(PART:"elm.text.swipe.left", "default", 0.0); \
+               run_program(PROGRAM:"end_rollback_left"); \
+            } \
+         } else cleanup(); \
+      } \
+   } \
+   program { name: "drag_down"; \
+      signal: "mouse,down,1"; \
+      source: "drag_part"; \
+      script { \
+         new x, y; \
+         get_mouse(x, y); \
+         set_int(_state, 0); \
+         set_int(x1, x); \
+         set_int(y1, y); \
+      } \
+   } \
+   program { name: "drag"; \
+      signal: "drag"; \
+      source: "drag_part"; \
+      script { \
+         new x2, y2; \
+         get_mouse(x2, y2); \
+         if (((y2 - get_int(y1)) >= SWIPE_THRESH_Y) || \
+             ((y2 - get_int(y1)) <= -SWIPE_THRESH_Y)) \
+               return; \
+         if (get_int(_state) == 0) { \
+            if ((x2 - get_int(x1)) >= SWIPE_THRESH_X) { \
+               emit("elm,swipe,start", ""); \
+               set_int(_state, 1); \
+               run_program(PROGRAM:"start_right");  \
+            } else if ((x2 - get_int(x1)) <= -SWIPE_THRESH_X) { \
+               emit("elm,swipe,start", ""); \
+               set_int(_state, -1); \
+               run_program(PROGRAM:"start_left");  \
+            } \
+         } else if (get_int(_state) == -1) { \
+            if (x2 > get_int(x1)) { \
+               set_int(_state, 1); \
+               run_program(PROGRAM:"start_right");  \
+            }\
+         } else if (get_int(_state) == 1) { \
+            if (x2 < get_int(x1)) { \
+               set_int(_state, -1); \
+               run_program(PROGRAM:"start_left");  \
+            } \
+         } \
+      } \
+   } \
+   program { name: "start_right"; \
+      action:  STATE_SET "start_right" 0.0; \
+      target: "elm.image.swipe.right"; \
+      target: "elm.image.swipe.left"; \
+      target: "elm.text.swipe.right"; \
+      target: "elm.text.swipe.left"; \
+      target: "drag_part"; \
+      target: "drag_part_left"; \
+      target: "drag_part_right"; \
+   } \
+   program { name: "start_left"; \
+      action:  STATE_SET "start_left" 0.0; \
+      target: "elm.image.swipe.right"; \
+      target: "elm.image.swipe.left"; \
+      target: "elm.text.swipe.right"; \
+      target: "elm.text.swipe.left"; \
+      target: "drag_part"; \
+      target: "drag_part_left"; \
+      target: "drag_part_right"; \
+   } \
+   program { name: "end_move_right"; \
+      transition: SWIPE_TRANSIT; \
+      action:  STATE_SET "right_end" 0.0; \
+      target: "drag_part"; \
+      after: "right_ender"; \
+   } \
+   program { name: "end_move_left"; \
+      transition: SWIPE_TRANSIT; \
+      action:  STATE_SET "left_end" 0.0; \
+      target: "drag_part"; \
+      after: "left_ender"; \
+   } \
+   program { name: "end_rollback_right"; \
+      transition: SWIPE_TRANSIT; \
+      action:  STATE_SET "right_rollback" 0.0; \
+      target: "elm.image.swipe.right"; \
+      target: "elm.image.swipe.left"; \
+      target: "drag_part"; \
+      after: "rollback_ender"; \
+   } \
+   program { name: "end_rollback_left"; \
+      transition: SWIPE_TRANSIT; \
+      action:  STATE_SET "left_rollback" 0.0; \
+      target: "elm.image.swipe.right"; \
+      target: "elm.image.swipe.left"; \
+      target: "drag_part"; \
+      after: "rollback_ender"; \
+   } \
+   program { name: "right_ender"; \
+      script { \
+         emit("elm,swipe,stop,right", ""); \
+         cleanup(); \
+      } \
+   } \
+   program { name: "left_ender"; \
+      script { \
+         emit("elm,swipe,stop,left", ""); \
+         cleanup(); \
+      } \
+   } \
+   program { name: "rollback_ender"; \
+      source: ""; \
+      script { \
+         emit("elm,swipe,stop", ""); \
+         cleanup(); \
+      } \
+   } \
+   program { name: "swipe_revert"; \
+      signal: "elm,swipe,revert"; \
+      source: ""; \
+      script { \
+         if (get_int(_state) != 0) { \
+            emit("elm,swipe,stop", ""); \
+         }\
+         cleanup(); \
+      } \
+   } \
+   program { name: "swipe_disable"; \
+      signal: "elm,swipe,disabled"; \
+      source: ""; \
+      script { \
+         if (get_int(_state) != 0) { \
+            emit("elm,swipe,stop", ""); \
+            cleanup(); \
+         }\
+         set_state(PART:"drag_part", "disable", 0.0); \
+      } \
+   } \
+   program { name: "swipe_enable"; \
+      signal: "elm,swipe,enabled"; \
+      source: ""; \
+      script { \
+         if (get_int(_state) != 0) { \
+            emit("elm,swipe,stop", ""); \
+            cleanup(); \
+         }\
+         set_state(PART:"drag_part", "default", 0.0); \
+      } \
+   } \
+   program { name: "swipe_default"; \
+      signal: "elm,state,default"; \
+      source: "elm"; \
+      script { \
+         run_program(PROGRAM:"swipe_enable"); \
+      } \
+   } \
+   program { name: "swipe_disable_state"; \
+      signal: "elm,state,disabled"; \
+      source: "elm"; \
+      script { \
+         run_program(PROGRAM:"swipe_disable"); \
+      } \
+   } \
+
+group { GENLIST_NAME("1text/swipe/default")
+   GENLIST_PROLOG_NORMAL
+   images {
+      image : "00_focus.png" COMP;
+   }
+   GENLIST_SWIPE_SCRIPTS
+   GENLIST_SWIPE_IMAGES
+
+   data.item: "texts" "elm.text elm.text.swipe.left elm.text.swipe.right";
+   data.item: "contents" "elm.icon";
+   data.item: "bg" "bg";
+
+   parts {
+      GENLIST_PART_BASE
+      GENLIST_PART_BG_NORMAL
+      GENLIST_PART_BOTTOM_LINE
+      GENLIST_PART_PADDING_LEFT
+      GENLIST_PART_PADDING_RIGHT
+      GENLIST_PART_PADDING_TOP
+      GENLIST_PART_PADDING_BOTTOM
+
+      GENLIST_PART_LISTITEM_("elm.text", GENLIST_HEIGHT_1LINE,
+         "elm.icon", "elm.padding.right",
+         "elm.padding.top", "elm.padding.bottom",
+      )
+      GENLIST_PART_ICON_MEDIUM_L("elm.icon", "elm.padding.left")
+      GENLIST_PART_FLIP
+      GENLIST_PART_FOCUS_NORMAL
+      GENLIST_SWIPE_PARTS
+   }
+   GENLIST_PROGRAMS_NORMAL( target: "elm.text"; )
+   GENLIST_SWIPE_PROGRAMS
+}
diff --git a/live.viewer/dbox.app/data/groups/genlist_variable_size.edc b/live.viewer/dbox.app/data/groups/genlist_variable_size.edc
new file mode 100644 (file)
index 0000000..0cfd6c2
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "genlist_macro.edc"
+
+   styles {
+      style { name: "textblock_style_variable_height";
+         base: "font=Tizen:style=Bold font_size=35 align=left color=#00FF00FF ellipsis=1.0 text_class=tizen";
+         tag:  "br" "\n";
+         tag:  "hilight" "+ font=Tizen:style=Bold";
+         tag:  "b" "+ font=Tizen:style=Bold";
+         tag:  "tab" "\t";
+      }
+   }
+
+   group { name: "elm/genlist/item/variable_height/default/default";
+
+      data.item: "texts" "elm.text";
+      data.item: "contents" "elm.icon";
+      data.item: "treesize" 0;
+
+      parts {
+         GENLIST_PART_BASE
+         GENLIST_PART_BG_NORMAL
+         GENLIST_PART_BOTTOM_LINE
+         GENLIST_PART_PADDING_LEFT
+         GENLIST_PART_PADDING_RIGHT
+         GENLIST_PART_PADDING_TOP
+         GENLIST_PART_PADDING_BOTTOM
+
+         part { name: "elm.text";
+            type: TEXTBLOCK;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.5 0.5;
+               rel1 {
+                  relative: 1 1;
+                  to_x: "elm.padding.left";
+                  to_y: "elm.padding.top";
+               }
+               rel2 {
+                  relative: 0 0;
+                  to_x: "elm.padding.right";
+                  to_y: "elm.padding.bottom";
+               }
+               text {
+                  style: textblock_style_variable_height;
+                  min: 1 1;
+                  align: 0.5 0.5;
+               }
+            }
+         }
+         part { name: "elm.icon";
+            type: SWALLOW;
+            mouse_events: 1;
+            scale: 1;
+            description { state: "default" 0.0;
+               align: 0.5 0.5;
+               rel1 {
+                  relative: 1 1;
+                  to_x: "elm.padding.left";
+                  to_y: "elm.padding.top";
+               }
+               rel2 {
+                  relative: 0 0;
+                  to_x: "elm.padding.right";
+                  to_y: "elm.padding.bottom";
+               }
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/index.edc b/live.viewer/dbox.app/data/groups/index.edc
new file mode 100644 (file)
index 0000000..d421513
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+       name: "elmdemo-test/index";
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 255;
+                       }
+               }
+               part {
+                       name: "scroller";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {relative: 0.0 0.0; to: "bg";}
+                               rel2 {relative: 1.0 1.0; to: "bg";}
+                               align: 0.5 0.5;
+                       }
+               }
+               part {
+                       name: "controller";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 52;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1 {relative: 0.0 0.0; }
+                               rel2 {relative: 1.0 0.0; }
+                       }
+               }
+       }
+}
+
+group {
+       name: "elmdemo-test/pagecontrol/page";
+       parts {
+               part {
+                       name: "page";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "text";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 0.5;
+                               rel2.relative: 0.5 0.5;
+                               text {
+                                       min: 1 1;
+                                       size: 50;
+                               }
+                               color: 255 255 255 255;
+                       }
+               }
+       }
+}
+
+group {
+       name: "elmdemo-test/index_slider";
+       parts {
+               part {
+                       name: "bg";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                       }
+               }
+               part {
+                       name: "scroller";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {relative: 0.0 0.0; to: "bg";}
+                               rel2 {relative: 1.0 1.0; to: "bg";}
+                               align: 0.5 0.5;
+                       }
+               }
+               part {
+                       name: "controller";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 272 56;
+                               max: 272 56;
+                               fixed: 1 1;
+                               align: 0.5 1.0;
+                               rel1 {relative: 0.0 0.0; to: "padding_bottom";}
+                               rel2 {relative: 0.0 1.0; to: "padding_bottom";}
+                       }
+               }
+               part {
+                       name: "controller_rect";
+                       type: SWALLOW;
+                       scale: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1.to: "controller";
+                               rel2.to: "controller";
+                       }
+               }
+               part {
+                       name: "padding_bottom";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 13 13;
+                               max: 13 13;
+                               fixed: 1 1;
+                               align: 0.5 1.0;
+                               rel1 {relative: 0.0 1.0; to: "bg";}
+                               rel2 {relative: 1.0 1.0; to: "bg";}
+                       }
+               }
+       }
+}
+
+group {
+       name: "elmdemo-test/index_slider_popup";
+       images {
+               image : "B08_fast_scroll_number_bg.png" COMP;
+       }
+       parts {
+               part { name: "text_bg";
+                       type: IMAGE;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 133 133;
+                               max: 133 133;
+                               fixed: 1 1;
+                               image.normal: "B08_fast_scroll_number_bg.png";
+                       }
+               }
+               part { name: "page_no";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;;
+                               rel1.to: "text_bg";
+                               rel2.to: "text_bg";
+                               color: 250 250 250 255;
+                               text {
+                                       font: FONT_BLD;
+                                       size: 96;
+                                       min: 1 1;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file
diff --git a/live.viewer/dbox.app/data/groups/label.edc b/live.viewer/dbox.app/data/groups/label.edc
new file mode 100644 (file)
index 0000000..6c0f7c8
--- /dev/null
@@ -0,0 +1,684 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 LABEL_WIDTH 350.0
+#define LABEL_HEIGHT 40.0
+#define LABEL_GAP 100.0
+
+group {
+               name: "elmdemo-test/label";
+               parts{
+                       part {
+                               name: "top_padding";
+                               type: RECT;
+                               scale: 1; //allow scaling
+                               description {
+                                       state: "default" 0.0;
+                                       min : LABEL_WIDTH 50; //minimum size for gap filler
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 0; }
+                                       rel2 { relative: 1 0; }
+                                       align: 0 0;
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "label1_bg";
+                               type: RECT;
+                               description {
+                                       color: 200 200 200 127;
+                                       rel1.to:"label1";
+                                       rel2.to:"label1";
+                               }
+                       }
+                       part {
+                               name: "label1";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       fixed: 1 1;
+                                       min: LABEL_WIDTH LABEL_HEIGHT;
+                                       max: LABEL_WIDTH LABEL_HEIGHT;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0 1.0; to_y: "top_padding"; }
+                                       align: 0.5 0;
+                                       }
+                       }
+                       part {
+                               name: "label1_bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : LABEL_WIDTH LABEL_GAP;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 1.0; to_y: "label1"; }
+                                       rel2 { relative: 1 1.0; to_y: "label1"; }
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "label2_bg";
+                               type: RECT;
+                               description {
+                                       color: 200 200 200 127;
+                                       rel1.to:"label2";
+                                       rel2.to:"label2";
+                               }
+                       }
+                       part {
+                               name: "label2";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                                                       fixed: 1 0;
+                                       min: LABEL_WIDTH LABEL_HEIGHT;
+                                       max: LABEL_WIDTH LABEL_HEIGHT;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0 1.0; to_y: "label1_bottom_padding"; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "label2_bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 LABEL_GAP;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 1.0; to_y: "label2"; }
+                                       rel2 { relative: 1 1.0; to_y: "label2"; }
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "label3_bg";
+                               type: RECT;
+                               description {
+                                       color: 200 200 200 127;
+                                       rel1.to:"label3";
+                                       rel2.to:"label3";
+                               }
+                       }
+                       part {
+                               name: "label3";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       fixed: 1 1;
+                                       min: LABEL_WIDTH LABEL_HEIGHT;
+                                       max: LABEL_WIDTH LABEL_HEIGHT;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0 1.0; to_y: "label2_bottom_padding"; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "label3_bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 LABEL_GAP;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 1.0; to_y: "label3"; }
+                                       rel2 { relative: 1 1.0; to_y: "label3"; }
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "label4_bg";
+                               type: RECT;
+                               description {
+                                       color: 200 200 200 127;
+                                       rel1.to:"label4";
+                                       rel2.to:"label4";
+                               }
+                       }
+                       part {
+                               name: "label4";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       fixed: 1 1;
+                                       min: LABEL_WIDTH LABEL_HEIGHT;
+                                       max: LABEL_WIDTH LABEL_HEIGHT;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0 1.0; to_y: "label3_bottom_padding"; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "label4_bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 LABEL_GAP;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 1.0; to_y: "label4"; }
+                                       rel2 { relative: 1 1.0; to_y: "label4"; }
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "label5_bg";
+                               type: RECT;
+                               description {
+                                       color: 200 200 200 127;
+                                       rel1.to:"label5";
+                                       rel2.to:"label5";
+                               }
+                       }
+                       part {
+                               name: "label5";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       fixed: 1 1;
+                                       min: LABEL_WIDTH LABEL_HEIGHT;
+                                       max: LABEL_WIDTH LABEL_HEIGHT;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0 1.0; to_y: "label4_bottom_padding"; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "label5_bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 30;
+                                       rel1 { relative: 0 1.0; to_y: "label5"; }
+                                       rel2 { relative: 1 1.0; }
+                                       visible: 0;
+                                       align: 0.5 1.0;
+                               }
+                       }
+               }//end parts
+#undef LABEL_WIDTH
+#undef LABEL_HEIGHT
+#undef LABEL_GAP
+} //end group
+
+      styles
+       {
+          style { name: "textblock_style";
+             base: "font=Tizen:style=Medium font_size=30 color=#FF0000 wrap=word text_class=tizen";
+             tag:  "br" "\n";
+             tag:  "ps" "ps";
+             tag:  "hilight" "+ font=Tizen:style=Bold";
+             tag:  "b" "+ font=Tizen:style=Bold";
+             tag:  "tab" "\t";
+          }
+       }
+
+      styles
+       {
+          style { name: "textblock_charwrap_style";
+             base: "font=Tizen:style=Medium font_size=30 color=#FF0000 wrap=char text_class=tizen";
+             tag:  "br" "\n";
+             tag:  "ps" "ps";
+             tag:  "hilight" "+ font=Tizen:style=Bold";
+             tag:  "b" "+ font=Tizen:style=Bold";
+             tag:  "tab" "\t";
+          }
+       }
+
+   group { name: "elm/label/base/extended/label_ellipsis";
+      data.item: "default_font_size" "30";
+      data.item: "min_font_size" "30";
+      data.item: "max_font_size" "30";
+      parts {
+        part { name: "label.swallow.background";
+           type: SWALLOW;
+           description { state: "default" 0.0;
+                  visible: 1;
+                  rel1 { relative: 0 0; to: "elm.text"; }
+                  rel2 { relative: 1 1; to: "elm.text"; }
+           }
+     }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 0;
+           scale: 1;
+           description { state: "default" 0.0;
+              text {
+                 style: "textblock_style";
+                 min: 1 1;
+              }
+           }
+        }
+      }
+   }
+
+   group { name: "elm/label/base_wrap_ellipsis/extended/wrap_ellipsis";
+      data.item: "default_font_size" "30";
+      data.item: "min_font_size" "30";
+      data.item: "max_font_size" "30";
+      parts {
+        part { name: "label.swallow.background";
+           type: SWALLOW;
+           description { state: "default" 0.0;
+                  visible: 1;
+                  rel1 { relative: 0 0; to: "elm.text"; }
+                  rel2 { relative: 1 1; to: "elm.text"; }
+           }
+     }
+        part { name: "elm.text";
+           type: TEXTBLOCK;
+           mouse_events: 0;
+           scale: 1;
+           multiline: 1;
+           description { state: "default" 0.0;
+               // FIXME : fixed for multiline ellipsis.
+               //         does it need to make another ellipsis style?
+              fixed: 0 1;
+              text {
+                 style: "textblock_style";
+                 min: 0 1;
+              }
+           }
+           description { state: "charwrap_mode" 0.0;
+               // FIXME : fixed for multiline ellipsis.
+               //         does it need to make another ellipsis style?
+              fixed: 0 1;
+              text {
+                 style: "textblock_charwrap_style";
+                 min: 0 1;
+              }
+           }
+        }
+      }
+       programs {
+               program { name: "default_on";
+                       signal: "elm,state,default";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "elm.text";
+               }
+               program { name: "charwrap_on";
+                       signal: "elm,state,charwrap";
+                       source: "elm";
+                       action: STATE_SET "charwrap_mode" 0.0;
+                       target: "elm.text";
+               }
+       } // end programs
+   } // end group
+
+       group {
+               name, "elmdemo-test/label_slide";
+               parts {
+                       part { name, "background";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 100;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 0; }
+                                       rel2 { relative: 1 0; }
+                                       visible: 0;
+                               }
+                       }
+                       part {
+                               name: "top_padding";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0.15 0.0; to_y: "background"; }
+                                       rel2 { relative: 0.85 0.0; to_y: "background"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_long_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "top_padding";}
+                                       rel2 { relative: 1.0 1.0; to: "top_padding";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text:"slide_long";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       align: 0.5 0;
+                                       color: 173 170 165 255;
+                               }
+                       }
+                       part { name: "swallow_label_1_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_1";
+                                       rel2.to: "swallow_label_1";
+                               }
+                       }
+                       part { name: "swallow_label_1";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "top_padding"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "top_padding"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding1";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_1"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_1"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_long1_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "padding1";}
+                                       rel2 { relative: 1.0 1.0; to: "padding1";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text: "slide_long";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       color: 173 170 165 255;
+                                       align: 0.5 0;
+                               }
+                       }
+                       part { name: "swallow_label_2_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_2";
+                                       rel2.to: "swallow_label_2";
+                               }
+                       }
+                       part { name: "swallow_label_2";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "padding1"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "padding1"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding2";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_2"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_2"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_short_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "padding2";}
+                                       rel2 { relative: 1.0 1.0; to: "padding2";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text: "slide_short";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       color: 173 170 165 255;
+                                       align: 0.5 0;
+                               }
+                       }
+                       part { name: "swallow_label_3_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_3";
+                                       rel2.to: "swallow_label_3";
+                               }
+                       }
+                       part { name: "swallow_label_3";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "padding2"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "padding2"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding3";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_3"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_3"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_bounce_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "padding3";}
+                                       rel2 { relative: 1.0 1.0; to: "padding3";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text: "slide_bounce";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       color: 173 170 165 255;
+                                       align: 0.5 0;
+                               }
+                       }
+                       part { name: "swallow_label_4_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_4";
+                                       rel2.to: "swallow_label_4";
+                               }
+                       }
+                       part { name: "swallow_label_4";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "padding3"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "padding3"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding4";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_4"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_4"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_roll_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "padding4";}
+                                       rel2 { relative: 1.0 1.0; to: "padding4";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text: "slide_roll";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       color: 173 170 165 255;
+                                       align: 0.5 0;
+                               }
+                       }
+                       part { name: "swallow_label_5_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_5";
+                                       rel2.to: "swallow_label_5";
+                               }
+                       }
+                       part { name: "swallow_label_5";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "padding4"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "padding4"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding5";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_5"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_5"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "slide_roll1_text";
+                               type: TEXT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.0 0.35; to: "padding5";}
+                                       rel2 { relative: 1.0 1.0; to: "padding5";}
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 24;
+                                               text: "slide_roll";
+                                               min: 1 1 ;
+                                               align: 0.0 0.0;
+                                       }
+                                       color: 173 170 165 255;
+                                       align: 0.5 0;
+                               }
+                       }
+                       part { name: "swallow_label_6_bg";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       color: 200 200 200 127;
+                                       rel1.to: "swallow_label_6";
+                                       rel2.to: "swallow_label_6";
+                               }
+                       }
+                       part { name: "swallow_label_6";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.15 1.0; to_y: "padding5"; }
+                                       rel2 { relative: 0.85 1.0; to_y: "padding5"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding6";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 80;
+                                       fixed: 0 1;
+                                       align: 0 0;
+                                       rel1 { relative: 0 1.0; to: "swallow_label_6"; }
+                                       rel2 { relative: 1 1.0; to: "swallow_label_6"; }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "swallow_btn";
+                               type: SWALLOW;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 330 40;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0 1.0; to: "padding6"; }
+                                       rel2 { relative: 1 1.0; to: "padding6"; }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "padding7";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min : 0 30;
+                                       align: 0 1;
+                                       rel1 { relative: 0 1.0; to: "swallow_btn"; }
+                                       rel2 { relative: 1 1.0; }
+                                       visible: 0;
+                               }
+                       }
+               }
+       }
diff --git a/live.viewer/dbox.app/data/groups/multibuttonentry.edc b/live.viewer/dbox.app/data/groups/multibuttonentry.edc
new file mode 100644 (file)
index 0000000..3fbe2f2
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   name: "multibuttonentry_test";
+
+   parts{
+      part {
+         name: "check_box";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0.0;
+         }
+      }
+      part {
+         name: "button_box";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.0 1.0;
+            rel1.to_y: "check_box";
+            rel2.relative: 1.0 1.0;
+            rel2.to_y: "check_box";
+            align: 0.5 0.0;
+         }
+      }
+      part {
+         name: "btn1";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.0 1.0;
+            rel1.to_y: "button_box";
+            rel2.relative: 0.5 1.0;
+            rel2.to_y: "button_box";
+            align: 0.0 0.0;
+         }
+       }
+      part {
+         name: "btn2";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.5 1.0;
+            rel1.to_y: "button_box";
+            rel2.relative: 1.0 1.0;
+            rel2.to_y: "button_box";
+            align: 0.0 0.0;
+         }
+      }
+      part {
+         name: "multibuttonentry";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            rel1.relative: 0.0 1.0;
+            rel1.to_y: "btn1";
+         }
+      }
+   }
+}
+
diff --git a/live.viewer/dbox.app/data/groups/multitouch.edc b/live.viewer/dbox.app/data/groups/multitouch.edc
new file mode 100644 (file)
index 0000000..f3da1d5
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 MAIN_W 480
+#define MAIN_H 800
+
+#define BG_COLOR       255 255 255 255
+//#define BG_COLOR     38 60 79 255;
+
+#define DESC_HIDE( param_state_value, param_position_rel ) \
+description { state: "hide" param_state_value; \
+       inherit: "default" 0.0; \
+       rel1 { relative: 0.0-param_position_rel 1.0; to: test1; } \
+       rel2 { relative: 1.0-param_position_rel 1.0; to: test1; } \
+}
+
+#define PROG_HIDE( param_name_current, param_name_next, param_state ) \
+program { \
+       name: param_name_current; \
+       action:  STATE_SET "hide" param_state; \
+       target: "test2"; \
+       transition: LINEAR 0.25; \
+       after: param_name_next; \
+}
+
+
+#define PROG_ON( param_num ) \
+program{ name: #param_num"_on"; \
+       source: "elm"; \
+       signal: #param_num",on"; \
+       action:  STATE_SET "selected" 0.0; \
+       target: "touch"#param_num; \
+}
+
+#define PROG_ALL_OFF \
+program{ name: "all_off"; \
+       source: "elm"; \
+       signal: "all,off"; \
+       action:  STATE_SET "default" 0.0; \
+       target: "touch01"; \
+       target: "touch02"; \
+       target: "touch03"; \
+       target: "touch04"; \
+       target: "touch05"; \
+       target: "touch06"; \
+}
+
+
+#define PART_IMAGE( param_num, param_pos_x, param_pos_y, param_align_x, param_align_y ) \
+       part { name: "touch"#param_num; \
+               mouse_events: 1; \
+               description { state: "default" 0.0; \
+                       align: param_align_x param_align_y; \
+                       min: 120 90; \
+                       fixed: 1 1; \
+                       rel1 { relative: param_pos_x param_pos_y; offset: 0 0; } \
+                       rel2 { relative: param_pos_x param_pos_y; offset: -1 -1; } \
+                       image { normal: "touch_"#param_num"_normal.png"; } \
+                       image.middle: SOLID; \
+                       fill.smooth: 0; \
+               } \
+               description { state: "selected" 0.0; \
+                       inherit: "default" 0.0; \
+                       image { normal: "touch_"#param_num"_selected.png"; } \
+               } \
+       }
+
+       group {
+               images {
+                       image: "touch_bg.png" COMP;
+                       image: "touch_01_normal.png" COMP;
+                       image: "touch_01_selected.png" COMP;
+                       image: "touch_02_normal.png" COMP;
+                       image: "touch_02_selected.png" COMP;
+                       image: "touch_03_normal.png" COMP;
+                       image: "touch_03_selected.png" COMP;
+                       image: "touch_04_normal.png" COMP;
+                       image: "touch_04_selected.png" COMP;
+                       image: "touch_05_normal.png" COMP;
+                       image: "touch_05_selected.png" COMP;
+                       image: "touch_06_normal.png" COMP;
+                       image: "touch_06_selected.png" COMP;
+               }
+
+               name: "elmdemo-test/multi-touch";
+//             min: MAIN_W MAIN_H;
+
+               parts {
+                       part { name: "background";
+                               type: RECT;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; offset: 0 0; }
+                                       rel2 { relative: 1.0 1.0; offset: -1 -1; }
+                                       color: BG_COLOR;
+                               }
+                       }
+
+                       /* winset part */
+                       part { name: "paint_contents_top";
+                               type: RECT;
+                               mouse_events: 0;
+                               description {
+                                       visible: 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: contents_top; }
+                                       rel2 { relative: 1.0 1.0; to: contents_top; }
+                                       align: 0.0 0.0;
+                                       color: BG_COLOR;
+                               }
+                       }
+
+                       /* winset part */
+                       part { name: "paint_contents_bottom";
+                               type: RECT;
+                               mouse_events: 0;
+                               description {
+                                       visible: 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to: contents_bottom; }
+                                       rel2 { relative: 1.0 1.0; to: contents_bottom; }
+                                       align: 0.0 0.0;
+                                       color: BG_COLOR;
+                                       //color: 255 100 0 100;
+                               }
+                       }
+                       /* winset part */
+                       part { name: "contents_top";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.1; to: background; }
+                                       rel2 { relative: 1.0 0.9; to: background; }
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       /* winset part */
+                       part { name: "contents_bottom";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.4; to: background; }
+                                       rel2 { relative: 1.0 1.0; to: background; }
+                                       align: 0.0 1.0;
+                                       visible: 1;
+                               }
+                       }
+
+                       part { name: "touch_bg";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       rel1 { relative: 0.05 0.4; offset: 0 0; }
+                                       rel2 { relative: 0.95 0.95; offset: -1 -1; }
+                                       image {
+                                               normal: "touch_bg.png";
+                                               border: 15 15 15 15;
+                                       }
+                                       image.middle: SOLID;
+                                       fill.smooth: 0;
+                               }
+                       }
+                       part { name: "touch_text";
+                               type: TEXT;
+                               scale: 1;
+                               mouse_events: 0;
+                               description { state: "default" 0.0;
+                                       rel1 { to:"touch_bg"; }
+                                       rel2 { to:"touch_bg"; }
+                    text {
+                                                       font: FONT_CONTENT;
+                                                       size: 40;
+                                                       align: 0.5 0.5;
+                                                       text: "Touch Area";
+                                       }
+                                       align: 0.0 0.0;
+                                       color: 209 189 140 255;
+                                       visible: 1;
+                               }
+                       }
+
+                       PART_IMAGE( 01, 0.05, 0.05, 0.0, 0.0 )
+                       PART_IMAGE( 02, 0.5, 0.05, 0.5, 0.0 )
+                       PART_IMAGE( 03, 0.95, 0.05, 1.0, 0.0 )
+                       PART_IMAGE( 04, 0.05, 0.28, 0.0, 0.5 )
+                       PART_IMAGE( 05, 0.5, 0.28, 0.5, 0.5 )
+                       PART_IMAGE( 06, 0.95, 0.28, 1.0, 0.5 )
+               }
+
+               programs {
+                       PROG_ON( 01 )
+                       PROG_ON( 02 )
+                       PROG_ON( 03 )
+                       PROG_ON( 04 )
+                       PROG_ON( 05 )
+                       PROG_ON( 06 )
+                       PROG_ALL_OFF
+               }
+       }
diff --git a/live.viewer/dbox.app/data/groups/naviframe.edc b/live.viewer/dbox.app/data/groups/naviframe.edc
new file mode 100644 (file)
index 0000000..5674ab4
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   name: "custom_naviframe_title";
+   parts {
+      part { name: "title_bg";
+         type: RECT;
+         mouse_events: 0;
+         scale: 0;
+         description {
+            state: "default" 0.0;
+            min: 0 160;
+            align: 0.0 0.0;
+            visible: 0;
+         }
+      }
+      part { name: "top_left_padding";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 10 10;
+            fixed: 1 1;
+            align: 0.0 0.0;
+            rel1 { relative: 0.0 0.0; to: "title_bg"; }
+            rel2 { relative: 0.0 0.0; to: "title_bg"; }
+            visible: 0;
+         }
+      }
+      part { name: "title1";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 50;
+            max: 9999 50;
+            fixed: 0 1;
+            align: 0.0 0.0;
+            rel1 { relative: 1.0 1.0; to: "top_left_padding"; }
+            rel2 { relative: 0.0 1.0; to_x: "bottom_right_padding"; to_y: "top_left_padding"; }
+         }
+      }
+      part { name: "bottom_right_padding";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 10 10;
+            fixed: 1 1;
+            align: 1.0 1.0;
+            rel1 { relative: 1.0 1.0; to: "title_bg"; }
+            rel2 { relative: 1.0 1.0; to: "title_bg"; }
+            visible: 0;
+         }
+      }
+      part { name: "title2";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 50;
+            max: 9999 50;
+            fixed: 0 1;
+            align: 0.0 1.0;
+            rel1 { relative: 1.0 1.0; to_x: "top_left_padding"; to_y: "title1"; }
+            rel2 { relative: 0.0 0.0; to: "bottom_right_padding"; }
+         }
+      }
+   }
+}
+
diff --git a/live.viewer/dbox.app/data/groups/nocontents.edc b/live.viewer/dbox.app/data/groups/nocontents.edc
new file mode 100644 (file)
index 0000000..3f42ba7
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group {
+      name: "elmdemo-test/nocontents/search_google";
+      parts {
+         part {
+            name: "buttons";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0.5 0.0;
+               rel1.relative: 0.3 0.0;
+               rel2.relative: 0.7 0.16;
+            }
+         }
+      }
+   }
+   group {
+      name: "elmdemo-test/nocontents/search";
+      parts {
+         part { name: "bg";
+            mouse_events: 0;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part {
+            name: "searchbar";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0.5 0.0;
+               fixed: 0 1;
+               rel2.relative: 1.0 0.0;
+            }
+         }
+         part {
+            name: "list";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0.5 1.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to: "searchbar";
+               }
+            }
+         }
+      }
+   }
+   group {
+      name: "elmdemo-test/nocontents/full";
+      parts {
+         part {
+            name: "contents";
+            type: SWALLOW;
+            description {
+               state: "default" 0.0;
+            }
+         }
+         part {
+            name: "access";
+            type: RECT;
+            repeat_events: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "contents";
+               rel2.to: "contents";
+               color: 0 0 0 0;
+            }
+         }
+      }
+   }
+   group {
+      name: "elmdemo-test/nocontents_helptext/full";
+      parts {
+         part {
+            name: "contents";
+            type: SWALLOW;
+            description {
+               state: "default" 0.0;
+            }
+         }
+         part {
+            name: "access";
+            type: RECT;
+            repeat_events: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "contents";
+               rel2.to: "contents";
+               color: 0 0 0 0;
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/popup_custom.edc b/live.viewer/dbox.app/data/groups/popup_custom.edc
new file mode 100644 (file)
index 0000000..ee0b64c
--- /dev/null
@@ -0,0 +1,1937 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group { name: "elm/popup/content/btnstyle";
+   alias: "elm/popup/content/btnstyle_transparent";
+   parts {
+      part{ name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group {
+   name: "nbpopup_3button_view";
+#define BUTTON_WIDTH 394
+#define BUTTON_HEIGHT 74
+#define BUTTON_GAP 24
+   parts{
+      part { name: "top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description { state: "default" 0.0;
+            min: 0 32; //minimum size for gap filler
+            fixed: 0 1;
+            rel1 { relative: 0.0 0.0; }
+            rel2 { relative: 1.0 0.0; }
+            align: 0 0;
+         }
+      }
+      part {
+         name: "left_padding";
+         type: SPACER;
+         scale:1;
+         description {
+            state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            rel1 { relative: 0.0 0.0; }
+            rel2 { relative: 0.0 1.0; }
+            align: 0 0;
+         }
+      }
+      part {
+         name: "right_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            rel1 { relative: 1.0 0.0; }
+            rel2 { relative: 1.0 1.0; }
+            align: 1.0 0;
+         }
+      }
+      part {
+         name: "text_rect";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            min: 0 38;
+            rel1 { relative: 1.0 1.0; to_x: "left_padding";   to_y: "top_padding"; }
+            rel2 { relative: 0.0 1.0; to_x: "right_padding"; to_y: "top_padding"; }
+            align: 0.0 0.0;
+         }
+      }
+      part {
+         name: "contact_label";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            text {
+               min: 0 0;
+               align: 0.5 0.5;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            rel1 { relative: 0.0 0.0; to: "text_rect"; }
+            rel2 { relative: 1.0 1.0; to: "text_rect"; }
+            align: 0.5 0.5;
+         }
+      }
+      part { name: "btn_top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description { state: "default" 0.0;
+            min: 0 24; //minimum size for gap filler
+            fixed: 0 1;
+            rel1 { relative: 0.0 1.0;  to: "text_rect";}
+            rel2 { relative: 1.0 1.0;  to: "text_rect";}
+            align: 0 0;
+         }
+      }
+      part { name: "btn_default";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0;
+            min: BUTTON_WIDTH BUTTON_HEIGHT;
+            max: BUTTON_WIDTH BUTTON_HEIGHT;
+            rel1 { relative: 0 1.0; to_y: "btn_top_padding"; }
+         }
+      }
+      part { name: "btn_default_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: BUTTON_WIDTH BUTTON_GAP;
+            max: BUTTON_WIDTH BUTTON_GAP;
+            fixed: 1 1;
+            align: 0.5 0;
+            rel1 { relative: 0 1.0; to_y: "btn_default"; }
+            rel2 { relative: 1 1.0; to_y: "btn_default"; }
+         }
+      }
+      part { name: "btn_center";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0;
+            min: BUTTON_WIDTH BUTTON_HEIGHT;
+            max: BUTTON_WIDTH BUTTON_HEIGHT;
+            rel1 { relative: 0 1.0; to_y: "btn_default_bottom_padding"; }
+         }
+      }
+      part { name: "btn_center_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: BUTTON_WIDTH BUTTON_GAP;
+            max: BUTTON_WIDTH BUTTON_GAP;
+            fixed: 1 1;
+            align: 0.5 0;
+            rel1 { relative: 0 1.0; to_y: "btn_center"; }
+            rel2 { relative: 1 1.0; to_y: "btn_center"; }
+         }
+      }
+      part { name: "btn_text_only_style1";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: BUTTON_WIDTH BUTTON_HEIGHT;
+            max: BUTTON_WIDTH BUTTON_HEIGHT;
+            align: 0.5 0;
+            rel1 { relative: 0 1.0; to_y: "btn_center_bottom_padding"; }
+         }
+      }
+      part { name: "bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 32;
+            max: 0 32;
+            rel1 { relative: 0 1.0; to_y: "btn_text_only_style1"; }
+            rel2 { relative: 1 1.0;}
+            align: 0.5 1.0;
+         }
+      }
+   }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+#undef BUTTON_GAP
+} //end group
+
+group {
+   name: "nbpopup_2button_view";
+#define BUTTON_WIDTH 304
+#define BUTTON_HEIGHT 76
+#define BUTTON_GAP 24
+   parts{
+      part { name: "top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description { state: "default" 0.0;
+            min: 0 32; //minimum size for gap filler
+            fixed: 0 1;
+            rel2 { relative: 1.0 0.0; }
+            align: 0 0;
+         }
+      }
+      part {
+         name: "left_padding";
+         type: SPACER;
+         scale:1;
+         description {
+            state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            rel2 { relative: 0.0 1.0; }
+            align: 0 0;
+         }
+      }
+      part {
+         name: "right_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            rel1 { relative: 1.0 0.0; }
+            align: 1.0 0;
+         }
+      }
+      part {
+         name: "text_rect";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            min: 0 40;
+            rel1 { relative: 1.0 1.0; to_x: "left_padding";   to_y: "top_padding"; }
+            rel2 { relative: 0.0 1.0; to_x: "right_padding"; to_y: "top_padding"; }
+            align: 0.0 0.0;
+         }
+      }
+      part {
+         name: "contact_label";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            text {
+               min: 0 0;
+               align: 0.5 0.5;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            rel1 { relative: 0.0 0.0; to: "text_rect"; }
+            rel2 { relative: 1.0 1.0; to: "text_rect"; }
+            align: 0.5 0.5;
+         }
+      }
+      part { name: "btn_top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description { state: "default" 0.0;
+            min: 0 24; //minimum size for gap filler
+            fixed: 0 1;
+            rel1 { relative: 0.0 1.0;  to: "text_rect";}
+            rel2 { relative: 1.0 1.0;  to: "text_rect";}
+            align: 0 0;
+         }
+      }
+      part { name: "btn_default";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0;
+            min: BUTTON_WIDTH BUTTON_HEIGHT;
+            max: BUTTON_WIDTH BUTTON_HEIGHT;
+            rel1 { relative: 0 1.0; to_y: "btn_top_padding"; }
+         }
+      }
+      part { name: "btn_default_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: BUTTON_WIDTH BUTTON_GAP;
+            max: BUTTON_WIDTH BUTTON_GAP;
+            fixed: 1 1;
+            align: 0.5 0;
+            rel1 { relative: 0 1.0; to_y: "btn_default"; }
+            rel2 { relative: 1 1.0; to_y: "btn_default"; }
+         }
+      }
+      part { name: "btn_center";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0;
+            min: BUTTON_WIDTH BUTTON_HEIGHT;
+            max: BUTTON_WIDTH BUTTON_HEIGHT;
+            rel1 { relative: 0 1.0; to_y: "btn_default_bottom_padding"; }
+         }
+      }
+      part { name: "bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 32;
+            max: 0 32;
+            rel1 { relative: 0 1.0; to_y: "btn_center"; }
+            rel2 { relative: 1 1.0;}
+            align: 0.5 1.0;
+         }
+      }
+   }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+#undef BUTTON_GAP
+} //end group
+
+group { name: "popup_entryview";
+   parts {
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 65 0;
+            max: 65 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 65 0;
+            max: 65 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 100;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+   }
+}
+
+group { name: "label_layout";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            min: 0 700;
+         }
+      }
+   }
+}
+
+group { name: "label_layout_landscape";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            min: 0 380;
+         }
+      }
+   }
+}
+
+group { name: "popup_checkview";
+   parts {
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 20;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name: "bottom_pad";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 121;
+            fixed: 0 1;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "bottom_pad";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to: "bottom_pad";
+            }
+         }
+      }
+      part { name: "end_field";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 100;
+            fixed: 0 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "pad_b";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "pad_b";
+            }
+         }
+      }
+      part { name: "elm.swallow.end";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.0 0.5;
+            rel1.to: "end_field";
+            rel2.to: "end_field";
+         }
+      }
+   }
+}
+
+group { name: "popup_checkview_image";
+   inherit: "popup_checkview";
+   parts {
+      part { name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "elm.swallow.icon.bg";
+            }
+         }
+      }
+      part { name: "elm.swallow.icon.bg";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 1.0;
+            fixed: 1 1;
+            min: 360 164;
+            rel1 {
+               relative: 0.5 0.0;
+               to: "pad_b";
+            }
+            rel2 {
+               relative: 0.5 0.0;
+               to: "pad_b";
+            }
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.5;
+            fixed: 0 1;
+            min: 360 120;
+            rel1 {
+               relative: 0.0 0.5;
+               to: "elm.swallow.icon.bg";
+            }
+            rel2 {
+               relative: 1.0 0.5;
+               to: "elm.swallow.icon.bg";
+            }
+         }
+      }
+   }
+}
+
+group { name: "popup_smartstay1_internal";
+   parts {
+      part { name: "elm.swallow.content1";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 0.0;
+            rel2.relative: 1.0 0.0;
+            fixed: 0 1;
+         }
+      }
+      part { name: "elm.content.bg";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 443;
+            fixed: 0 1;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "elm.swallow.content1";
+            }
+            rel2.to: "elm.swallow.content1";
+         }
+      }
+      part { name: "elm.swallow.content2";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 390 390;
+            max: 390 390;
+            fixed: 1 1;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+            rel1.to: "elm.content.bg";
+            rel2.to: "elm.content.bg";
+         }
+      }
+      part { name: "elm.swallow.content3";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "elm.content.bg";
+            }
+         }
+      }
+   }
+}
+
+group { name: "popup_smartstay1";
+   parts {
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 20;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name:"elm.swallow.layout";
+         type: SWALLOW;
+         scale: 1;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            min: 0 700;
+            align: 0.5 1.0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name: "bottom_pad";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 1.0;
+            min: 0 66;
+            fixed: 0 1;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "bottom_pad";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to: "bottom_pad";
+            }
+         }
+      }
+      part { name: "end_field";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 63;
+            fixed: 0 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "pad_b";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "pad_b";
+            }
+         }
+      }
+      part { name: "elm.swallow.end";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.0 0.5;
+            rel1.to: "end_field";
+            rel2.to: "end_field";
+         }
+      }
+   }
+}
+
+group { name: "popup_smartstay1_landscape";
+   inherit: "popup_smartstay1";
+   parts {
+      part { name:"elm.swallow.layout";
+         type: SWALLOW;
+         scale: 1;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            min: 0 332;
+            align: 0.5 1.0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "pad_t";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to: "pad_b";
+            }
+         }
+      }
+   }
+}
+
+group { name: "popup_center_image";
+   parts {
+      part {
+         name: "base";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 310 310;
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.5;
+            fixed: 1 1;
+            min: 176 176;
+            rel1.relative: 0.5 0.5;
+            rel2.relative: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_volumebar";
+#define DEMO_POPUP_VOLUMEBAR_WIDTH_HEIGHT_MIN 568 134
+#define DEMO_POPUP_VOLUMEBAR_CONTENT_MIN 476 134
+   images {
+      image: "00_divider_line.png" COMP;
+   }
+   parts {
+      part { name:"bg";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_WIDTH_HEIGHT_MIN;
+            fixed: 1 0;
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 65 0;
+            max: 65 0;
+            fixed: 1 1;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 65 0;
+            max: 65 0;
+            fixed: 1 1;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            align: 1.0 1.0;
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_CONTENT_MIN;
+             fixed: 1 1;
+            rel1 {
+               relative: 1.0 0.5;
+               to_x: "pad_l";
+               to_y: "bg";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x: "pad_after_content";
+               to_y: "bg";
+            }
+            align: 0.5 0.5;
+         }
+      }
+      part { name: "pad_after_content";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 12 0;
+            max: 12 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.5;
+               to_x: "divider";
+               to_y: "bg";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x: "divider";
+               to_y: "bg";
+            }
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "divider";
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 2 52;
+            max: 2 52;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "pad_after_divider";
+               to_y: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_after_divider";
+               to_y: "pad_r";
+            }
+            image.normal: "00_divider_line.png";
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "pad_after_divider";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 12 0;
+            max: 12 0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 0.5;
+               to_x: "elm.swallow.icon";
+               to_y: "bg";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x: "elm.swallow.icon";
+               to_y: "bg";
+            }
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         clip_to: "icon_clip";
+         description { state: "default" 0.0;
+            min: 63 63;
+            max: 63 63;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 0.5;
+               to_x: "pad_r";
+               to_y: "bg";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x: "pad_r";
+               to_y: "bg";
+            }
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "icon_clip";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "elm.swallow.icon";
+            rel2.to: "elm.swallow.icon";
+            color_class: "B063L7";
+         }
+      }
+   }
+#undef DEMO_POPUP_VOLUMEBAR_WIDTH_HEIGHT_MIN
+#undef DEMO_POPUP_VOLUMEBAR_CONTENT_MIN
+}
+
+group { name: "popup_volumestyle";
+#define DEMO_POPUP_VOLUMEBAR_BG_MIN 590 134
+   parts {
+      part { name: "base";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_BG_MIN;
+            max: 776 134;
+            fixed: 1 0;
+         }
+      }
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            align: 0.0 0.0;
+            rel1 {
+               to: "base";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to: "base";
+               relative: 0.0 1.0;
+            }
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            align: 1.0 0.0;
+            rel1 {
+               to: "base";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "base";
+               relative: 1.0 1.0;
+            }
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            align: 0.0 1.0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 590 70;
+            max: 776 70;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "pad_t";
+            }
+            rel2.to: "pad_t";
+         }
+      }
+   }
+#undef DEMO_POPUP_VOLUMEBAR_BG_MIN
+}
+
+group { name: "popup_volumebar_text";
+#define DEMO_POPUP_VOLUMEBAR_TEXT_BG_MIN 568 300
+#define DEMO_POPUP_VOLUMEBAR_TEXT_MIN 568 100
+#define DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_WEIGHT_MIN 568
+#define DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_HEIGHT_MIN_MAX 134
+   styles {
+      style { name: "popup_volume_text_style";
+         base: "font=Tizen:style=Bold font_size=36 align=left color=#FFFFFF color_class=T123 wrap=mixed text_class=T123";
+         tag:  "br" "\n";
+         tag:  "tab" "\t";
+      }
+   }
+   parts {
+      part { name:"bg";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_TEXT_BG_MIN;
+            fixed: 1 0;
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            align: 0.0 0.0;
+            rel1 {
+               to: "bg";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to: "bg";
+               relative: 0.0 1.0;
+            }
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            fixed: 1 0;
+            align: 1.0 0.0;
+            rel1 {
+               to: "bg";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to: "bg";
+               relative: 1.0 1.0;
+            }
+         }
+      }
+      part { name: "elm.swallow.content1";
+         scale: 1;
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_WEIGHT_MIN DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_HEIGHT_MIN_MAX;
+            max: -1 DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_HEIGHT_MIN_MAX;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+         }
+      }
+      part { name: "elm.swallow.text";
+         scale: 1;
+         type: TEXTBLOCK;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_VOLUMEBAR_TEXT_MIN;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_y: "elm.swallow.content1";
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+               to_y: "bg";
+            }
+            align: 0.5 0.0;
+            text {
+             style: "popup_volume_text_style";
+             min: 0 1;
+             max: 0 1;
+            }
+         }
+      }
+   }
+#undef DEMO_POPUP_VOLUMEBAR_TEXT_BG_MIN
+#undef DEMO_POPUP_VOLUMEBAR_TEXT_MIN
+#undef DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_WEIGHT_MIN
+#undef DEMO_POPUP_VOLUMEBAR_TEXT_CONTENT_HEIGHT_MIN_MAX
+}
+
+group { name: "popup_processingview";
+#define DEMO_POPUP_PROCESSINGVIEW_CONTENT_MIN 568 288
+   parts {
+      part { name: "base";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_PROCESSINGVIEW_CONTENT_MIN;
+            fixed: 1 0;
+         }
+      }
+      part { name:"pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 34;
+            fixed: 0 1;
+            align: 0 0;
+            rel1.to: "base";
+            rel2 {
+               relative: 1.0 0.0;
+               to: "base";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 63 0;
+            max: 63 0;
+            fixed: 1 1;
+            rel1.to: "base";
+            rel2.to: "base";
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 63 0;
+            max: 63 0;
+            fixed: 1 1;
+            rel1.to: "base";
+            rel2.to: "base";
+            align: 1.0 1.0;
+         }
+      }
+      part { name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 63;
+            align: 0.0 0.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+               to_y: "pad_t";
+            }
+         }
+      }
+      part { name:"pad_after_content";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 10;
+            fixed: 0 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "elm.swallow.content";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "elm.swallow.content";
+            }
+         }
+      }
+      part { name:"elm.swallow.text";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 150;
+            align: 0.0 0.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_after_content";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name:"pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 0 20;
+            fixed: 0 1;
+            align: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "base";
+            }
+            rel2.to: "base";
+         }
+      }
+   }
+#undef DEMO_POPUP_PROCESSINGVIEW_CONTENT_MIN
+}
+
+group { name: "popup_processingview_1button";
+#define DEMO_POPUP_PROCESSINGVIEW1BUTTON_CONTENT_MIN 568 132
+   styles {
+      style { name: "popup_processing_text_style";
+         base: "font=Tizen:style=Bold font_size=36 align=left color=#FFFFFF color_class=T123 wrap=none ellipsis=1.0 text_class=T123";
+         tag:  "br" "\n";
+         tag:  "tab" "\t";
+      }
+   }
+   parts {
+      part { name: "base";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_PROCESSINGVIEW1BUTTON_CONTENT_MIN;
+            fixed: 1 0;
+         }
+      }
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "base";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to: "base";
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+               to: "base";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "base";
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part {
+         name: "spacing";
+         scale: 1;
+         type: SPACER;
+         description { state: "default" 0.0;
+            align: 0.0 0.5;
+            min: 79 79;
+            max: 79 79;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 1.0;
+               to: "pad_t";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to: "pad_b";
+            }
+         }
+      }
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         scale : 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.5;
+            fixed: 1 1;
+            text {
+             style: "popup_processing_text_style";
+             min: 0 1;
+             max: 1 1;
+            }
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "spacing";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name:"pad_before_text";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 16 132;
+            max: 16 132;
+            fixed: 1 1;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "elm.text";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "elm.text";
+            }
+         }
+      }
+      part { name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 63 63;
+            max: 63 63;
+            fixed: 1 1;
+            align: 1.0 0.0;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "pad_before_text";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to: "pad_before_text";
+            }
+         }
+      }
+   }
+#undef DEMO_POPUP_PROCESSINGVIEW1BUTTON_CONTENT_MIN
+}
+
+group { name: "popup_center_progressview";
+#define DEMO_POPUP_PROGRESSVIEW_CONTENT_MIN 568 191
+#define DEMO_POPUP_PROGRESSVIEW_TITLE_MIN 568 50
+#define DEMO_POPUP_PROGRESSVIEW_TEXT_LEFT_RIGHT_MAX 324 50
+   parts {
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.0 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "elm.title";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_PROGRESSVIEW_TITLE_MIN;
+            fixed: 1 1;
+            text {
+               min: 0 0;
+               align: 0.0 0.0;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "elm.swallow.content";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to: "elm.swallow.content";
+            }
+         }
+      }
+      part{ name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_PROGRESSVIEW_CONTENT_MIN;
+            align: 0.5 0.5;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name: "elm.text.left";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            max: DEMO_POPUP_PROGRESSVIEW_TEXT_LEFT_RIGHT_MAX;
+            text {
+               min: 0 0;
+               align: 0.0 1.0;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            align: 0.0 1.0;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "elm.swallow.content";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to: "elm.swallow.content";
+            }
+         }
+      }
+      part { name: "elm.text.right";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            max: DEMO_POPUP_PROGRESSVIEW_TEXT_LEFT_RIGHT_MAX;
+            text {
+               min: 0 0;
+               align: 1.0 1.0;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            align: 1.0 1.0;
+            rel1 {
+               relative: 0.5 0.0;
+               to: "elm.swallow.content";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "elm.swallow.content";
+            }
+         }
+      }
+   }
+#undef DEMO_POPUP_PROGRESSVIEW_CONTENT_MIN
+#undef DEMO_POPUP_PROGRESSVIEW_TITLE_MIN
+#undef DEMO_POPUP_PROGRESSVIEW_TEXT_LEFT_RIGHT_MAX
+}
+
+group { name: "elm/label/base/popup/progressview";
+   alias: "elm/label/base/popup/progressview_transparent";
+   styles {
+      style { name: "popup_desc_progressview_style";
+         base: "font=Tizen:style=Bold font_size=38 align=left color=#FFFFFF color_class=T123 linesize=50 text_class=T123";
+         tag:  "br" "\n";
+         tag:  "ps" "ps";
+         tag:  "whitecolor" "+ color=#ffffff";
+         tag:  "tab" "\t";
+      }
+   }
+   parts {
+      part { name: "elm.text";
+         type: TEXTBLOCK;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            text {
+               style: "popup_desc_progressview_style";
+               min: 0 1;
+               max: 0 1;
+            }
+         }
+      }
+   }
+}
+
+group { name: "popup_center_text_progressview";
+#define DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_MIN 590 0
+#define DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_END_MIN 568 45
+#define DEMO_POPUP_CENTER_PROGRESSVIEW_PAD_BOTTOM 0 86
+   parts {
+      part { name: "pad_t";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "pad_l";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               relative: 0.0 1.0;
+            }
+            align: 0.0 0.0;
+         }
+      }
+      part { name: "pad_r";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 47 0;
+            max: 47 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               relative: 1.0 1.0;
+            }
+            align: 1.0 0.0;
+         }
+      }
+      part { name:"elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_MIN;
+            align: 0.5 0.5;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+               to_y: "pad_t";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_b";
+            }
+         }
+      }
+      part { name: "pad_b";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 1.0;
+            min: 0 32;
+            fixed: 0 1;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "pad_l";
+               to_y: "pad_bm";
+            }
+            rel2 {
+               relative: 0.0 0.0;
+               to_x: "pad_r";
+               to_y: "pad_bm";
+            }
+         }
+      }
+      part { name: "elm.swallow.end";
+         type: SWALLOW;
+         scale: 1;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            align: 0.5 0.5;
+            min: DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_END_MIN;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "pad_b";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "pad_b";
+            }
+         }
+      }
+      part { name: "pad_bm";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            align: 0.5 1.0;
+            min: DEMO_POPUP_CENTER_PROGRESSVIEW_PAD_BOTTOM;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 1.0;
+               to_x: "pad_l";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "pad_r";
+            }
+         }
+      }
+      part { name: "elm.text.subtext1";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            text {
+               min: 0 0;
+               align: 0.0 0.5;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            align: 0.0 0.5;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "pad_bm";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "pad_bm";
+            }
+         }
+      }
+      part { name: "elm.text.subtext2";
+         type: TEXT;
+         scale: 1;
+         description { state: "default" 0.0;
+            text {
+               min: 0 0;
+               align: 1.0 0.5;
+               text_class: "T123";
+            }
+            color_class: "T123";
+            align: 1.0 0.5;
+            rel1 {
+               relative: 0.0 0.0;
+               to: "pad_bm";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to: "pad_bm";
+            }
+         }
+      }
+   }
+#undef DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_MIN
+#undef DEMO_POPUP_CENTER_PROGRESSVIEW_CONTENT_END_MIN
+#undef DEMO_POPUP_CENTER_PROGRESSVIEW_PAD_BOTTOM
+}
+
+group { name: "popup_gengrid_custom_1line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 594 276; // (190 + (4*2))*3  (150+37+37) + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_gengrid_custom_rotate_1line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 792 276;  // (190 + (4*2))*4 (150+37+37) + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_gengrid_custom_2line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 594 500; // (190 + (4*2))*3  (150+37+37)*2 + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_gengrid_custom_rotate_2line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 792 500;  // (190 + (4*2))*4 (150+37+37)*2 + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_gengrid_custom_3line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 594 724; // (190 + (4*2))*3  (150+37+37)*3 + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
+
+group { name: "popup_gengrid_custom_rotate_3line";
+   parts {
+      part { name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 792 500;  // (190 + (4*2))*4 (150+37+37)*2 + 26 + 26
+            align: 0.5 0.5;
+         }
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/progressbar_custom.edc b/live.viewer/dbox.app/data/groups/progressbar_custom.edc
new file mode 100644 (file)
index 0000000..3f89df1
--- /dev/null
@@ -0,0 +1,299 @@
+#include "progressbar_macro.edc"
+
+group {
+   name: "pingpongs";
+   parts {
+      BACKGROUND_PART("bg")
+      TOP_PADDING_PART("top_padding")
+      LEFT_PADDING_PART("left_padding")
+      RIGHT_PADDING_PART("right_padding")
+      PART_LABEL("pingpong_bounces_text", "top_padding", "Pingpong_bounces progress mode")
+      PART_ELEMENT_CONTAINER("pingpong_bounces_progress", "pingpong_bounces_text")
+      PART_PADDING("top_padding1", "pingpong_bounces_progress")
+      PART_LABEL("pingpong_bounces_pulse_text", "top_padding1", "Pingpong_bounces pulse mode")
+      PART_ELEMENT_CONTAINER("pingpong_bounces_pulse", "pingpong_bounces_pulse_text")
+      PART_PADDING("top_padding2", "pingpong_bounces_pulse")
+      PART_LABEL("pingpong_text", "top_padding2", "Pingpong progress mode")
+      PART_ELEMENT_CONTAINER("pingpong_progress", "pingpong_text")
+      BOTTOM_PADDING_PART("bottom_padding", "pingpong_progress")
+   }
+}
+
+#define PROGRESSBAR_SIZE                     300 300
+#define BALL_SIZE                            50 50
+#define TEXT_MARK_SIZE                       30
+
+#define LEFT_POSITION_1                      0.0 0.4
+#define TOP_POSITION_1                       0.4 0.0
+#define RIGHT_POSITION_2                     1.0 0.6
+#define RIGHT_HORIZONTAL_POSITION_2          1.0 0.6
+#define BOTTOM_POSITION_2                    0.6 1.0
+
+#define LEFT_MARK_POSITION_1                 0.0 0.3
+#define TOP_MARK_POSITION_1                  0.55 0.0
+#define RIGHT_MARK_POSITION_2                1.0 0.7
+#define RIGHT_HORIZONTAL_MARK_POSITION_2     1.0 0.45
+#define BOTTOM_MARK_POSITION_2               0.45 1.0
+
+#define INVISIBLE_COLOR                      255 255 255 0
+#define VISIBLE_COLOR                        255 255 255 255
+#define STATE_INVISIBLE                      "default"
+#define STATE_VISIBLE                        "visible"
+
+#define BOUNCE_BALL_MOTION                   BOUNCE 2 2 4
+#define LINEAR_BALL_MOTION                   LIN 0.6
+
+#define ALIGN_LEFT_TOP                       0.0 0.0
+#define ALIGN_RIGHT_BOTTOM                   1.0 1.0
+
+#define TEXT_MARK_PART_PINGPONG(part_name, align_type, relative_params) \
+      part { \
+         name: part_name; \
+         type: TEXT; \
+         scale: 1; \
+         description { \
+            state: "default" 0.0; \
+            align: align_type; \
+            color: INVISIBLE_COLOR; \
+            text { \
+               font: "Sans:bold"; \
+               align: align_type; \
+               size: TEXT_MARK_SIZE; \
+               text_source: "elm.text.status"; \
+            } \
+            relative_params \
+         } \
+         description { \
+            state: "visible" 0.0; \
+            inherit: "default" 0.0; \
+            color: VISIBLE_COLOR; \
+         } \
+      }
+
+#define MOTION_PROGRAM(prog_name, prog_after, to_mark, next_part, transit) \
+      program { \
+         name: prog_name; \
+         action: STATE_SET to_mark 0.0; \
+         transition: transit; \
+         target: "ball"; \
+         after: prog_after; \
+         after: "shine."next_part; \
+         after: "dim."to_mark; \
+      }
+
+#define MOTION_PROGRAM_PULSE(prog_name, prog_after, to_mark) \
+      program { \
+         name: prog_name; \
+         action: STATE_SET to_mark 0.0; \
+         transition: LINEAR_BALL_MOTION; \
+         target: "ball"; \
+         after: prog_after; \
+      }
+#define VISIBILITY_PROGRAM(prog_name, part_name, state) \
+      program { \
+         name: prog_name; \
+         action: STATE_SET state 0.0; \
+         transition: ACCEL 0.5; \
+         target: part_name; \
+      }
+
+#define NEW_PINGPONG_PROGRESSBAR_GROUP(group_name, ball_transition_style) \
+group { \
+   name: group_name; \
+   images { \
+      image: "background.png" COMP; \
+      image: "ball.png" COMP; \
+   } \
+   parts { \
+      part { \
+         name: "background"; \
+         type: IMAGE; \
+         scale: 1; \
+         description { \
+            state: "default"; \
+            min: PROGRESSBAR_SIZE; \
+            max: PROGRESSBAR_SIZE; \
+            image { \
+               normal: "background.png"; \
+               border: 10 10 10 10; \
+            } \
+         } \
+      } \
+      part { \
+         name: "elm.text.status"; \
+         type: TEXT; \
+         description { \
+            state: "default" 0.0; \
+            visible: 0; \
+         } \
+      } \
+      TEXT_MARK_PART_PINGPONG("text.mark.1", ALIGN_LEFT_TOP, \
+                              rel1 { \
+                                 relative: LEFT_MARK_POSITION_1; \
+                                 to: "background"; \
+                              } \
+                              rel2.to: "background";) \
+      TEXT_MARK_PART_PINGPONG("text.mark.2", ALIGN_LEFT_TOP, \
+                              rel1 { \
+                                 relative: TOP_MARK_POSITION_1; \
+                                 to: "background"; \
+                              } \
+                              rel2.to: "background";) \
+      TEXT_MARK_PART_PINGPONG("text.mark.3", ALIGN_RIGHT_BOTTOM, \
+                              rel1.to: "background"; \
+                              rel2 { \
+                                 relative: RIGHT_MARK_POSITION_2; \
+                                 to: "background"; \
+                              }) \
+      TEXT_MARK_PART_PINGPONG("text.mark.3.horizontal", ALIGN_RIGHT_BOTTOM, \
+                              rel1.to: "background"; \
+                              rel2 { \
+                                 to: "background"; \
+                                 relative: RIGHT_HORIZONTAL_MARK_POSITION_2; \
+                              }) \
+      TEXT_MARK_PART_PINGPONG("text.mark.4", ALIGN_RIGHT_BOTTOM, \
+                              rel1.to: "background"; \
+                              rel2 { \
+                                 relative: BOTTOM_MARK_POSITION_2; \
+                                 to: "background"; \
+                              }) \
+      part { \
+         name: "ball"; \
+         type: IMAGE; \
+         scale: 1; \
+         description { \
+            state: "default" 0.0; \
+            min: BALL_SIZE; \
+            max: BALL_SIZE; \
+            align: ALIGN_LEFT_TOP; \
+            image.normal: "ball.png"; \
+            rel1 { \
+               relative: LEFT_POSITION_1; \
+               to: "background"; \
+            } \
+            rel2.to: "background"; \
+         } \
+         description { \
+            state: "top" 0.0; \
+            inherit: "default" 0.0; \
+            rel1.relative: TOP_POSITION_1; \
+         } \
+         description { \
+            state: "right" 0.0; \
+            inherit: "default" 0.0; \
+            align: ALIGN_RIGHT_BOTTOM; \
+            rel2.relative: RIGHT_POSITION_2; \
+         } \
+         description { \
+            state: "right.horizontal" 0.0; \
+            inherit: "default" 0.0; \
+            align: ALIGN_RIGHT_BOTTOM; \
+            rel2.relative: RIGHT_HORIZONTAL_POSITION_2; \
+         } \
+         description { \
+            state: "bottom" 0.0; \
+            inherit: "default" 0.0; \
+            align: ALIGN_RIGHT_BOTTOM; \
+            rel2.relative: BOTTOM_POSITION_2; \
+         } \
+         description { \
+            state: "left" 0.0; \
+            inherit: "default" 0.0; \
+         } \
+      } \
+   } \
+   programs { \
+      program { \
+         name: "on_start"; \
+         signal: "load"; \
+         source: ""; \
+         after: "progress.1"; \
+         after: "shine.right.horizontal"; \
+         after: "dim.left"; \
+      } \
+      program { \
+         name: "on_pulse"; \
+         signal: "elm,state,pulse,start"; \
+         source: "elm"; \
+         action: STATE_SET STATE_INVISIBLE 0.0; \
+         target: "text.mark.1"; \
+         target: "text.mark.2"; \
+         target: "text.mark.3"; \
+         target: "text.mark.3.horizontal"; \
+         target: "text.mark.4"; \
+         after: "pulse"; \
+      } \
+      program { \
+         name: "pulse"; \
+         action: STATE_SET "default" 0.0; \
+         target: "ball"; \
+         after: "pulse.1"; \
+      } \
+      MOTION_PROGRAM("progress.1", "progress.2", "right.horizontal", "bottom", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.2", "progress.3", "bottom", "left", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.3", "progress.4", "left", "top", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.4", "progress.5", "top", "right", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.5", "progress.6", "right", "bottom", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.6", "progress.7", "bottom", "left", \
+                     ball_transition_style) \
+      MOTION_PROGRAM("progress.7", "progress.1", "left", "right.horizontal", \
+                     ball_transition_style) \
+      MOTION_PROGRAM_PULSE("pulse.1", "pulse.2", "right") \
+      MOTION_PROGRAM_PULSE("pulse.2", "pulse.3", "bottom") \
+      MOTION_PROGRAM_PULSE("pulse.3", "pulse.4", "left") \
+      MOTION_PROGRAM_PULSE("pulse.4", "pulse.5", "top") \
+      MOTION_PROGRAM_PULSE("pulse.5", "pulse.6", "right") \
+      MOTION_PROGRAM_PULSE("pulse.6", "pulse.7", "bottom") \
+      MOTION_PROGRAM_PULSE("pulse.7", "pulse.1", "left") \
+      VISIBILITY_PROGRAM("shine.left", "text.mark.1", STATE_VISIBLE) \
+      VISIBILITY_PROGRAM("shine.top", "text.mark.2", STATE_VISIBLE) \
+      VISIBILITY_PROGRAM("shine.right", "text.mark.3", STATE_VISIBLE) \
+      VISIBILITY_PROGRAM("shine.right.horizontal", "text.mark.3.horizontal", \
+                         STATE_VISIBLE) \
+      VISIBILITY_PROGRAM("shine.bottom", "text.mark.4", STATE_VISIBLE) \
+      VISIBILITY_PROGRAM("dim.left", "text.mark.1", STATE_INVISIBLE) \
+      VISIBILITY_PROGRAM("dim.top", "text.mark.2", STATE_INVISIBLE) \
+      VISIBILITY_PROGRAM("dim.right", "text.mark.3", STATE_INVISIBLE) \
+      VISIBILITY_PROGRAM("dim.right.horizontal", "text.mark.3.horizontal", \
+                         STATE_INVISIBLE) \
+      VISIBILITY_PROGRAM("dim.bottom", "text.mark.4", STATE_INVISIBLE) \
+   } \
+}
+
+NEW_PINGPONG_PROGRESSBAR_GROUP("elm/progressbar/horizontal/pingpong_bounces",
+                               BOUNCE_BALL_MOTION)
+
+NEW_PINGPONG_PROGRESSBAR_GROUP("elm/progressbar/horizontal/pingpong",
+                               LINEAR_BALL_MOTION)
+
+#undef PROGRESSBAR_SIZE
+#undef BALL_SIZE
+#undef TEXT_MARK_SIZE
+#undef LEFT_POSITION_1
+#undef TOP_POSITION_1
+#undef RIGHT_POSITION_2
+#undef RIGHT_HORIZONTAL_POSITION_2
+#undef BOTTOM_POSITION_2
+#undef LEFT_MARK_POSITION_1
+#undef TOP_MARK_POSITION_1
+#undef RIGHT_MARK_POSITION_2
+#undef RIGHT_HORIZONTAL_MARK_POSITION_2
+#undef BOTTOM_MARK_POSITION_2
+#undef INVISIBLE_COLOR
+#undef VISIBLE_COLOR
+#undef STATE_INVISIBLE
+#undef STATE_VISIBLE
+#undef BOUNCE_BALL_MOTION
+#undef LINEAR_BALL_MOTION
+#undef ALIGN_LEFT_TOP
+#undef ALIGN_RIGHT_BOTTOM
+#undef TEXT_MARK_PART_PINGPONG
+#undef MOTION_PROGRAM
+#undef MOTION_PROGRAM_PULSE
+#undef VISIBILITY_PROGRAM
+#undef NEW_PINGPONG_PROGRESSBAR_GROUP
\ No newline at end of file
diff --git a/live.viewer/dbox.app/data/groups/progressbar_default.edc b/live.viewer/dbox.app/data/groups/progressbar_default.edc
new file mode 100644 (file)
index 0000000..93c49d1
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "progressbar_macro.edc"
+
+group {
+   name: "progessbar";
+   parts {
+      BACKGROUND_PART("bg")
+      TOP_PADDING_PART("top_padding")
+      LEFT_PADDING_PART("left_padding")
+      RIGHT_PADDING_PART("right_padding")
+      PART_LABEL("list_progress_text", "top_padding", "Progress List")
+      PART_ELEMENT_CONTAINER("list_progress", "list_progress_text")
+      PART_PADDING("top_padding1", "list_progress")
+      PART_LABEL("progress_list_text_text", "top_padding1", "Progress List Text")
+      PART_ELEMENT_CONTAINER("progress_list_text", "progress_list_text_text")
+      PART_PADDING("top_padding2", "progress_list_text")
+      PART_LABEL("pending_list_text", "top_padding2", "Pending List")
+      PART_ELEMENT_CONTAINER("pending_list", "pending_list_text")
+      PART_PADDING("top_padding3", "pending_list")
+      PART_LABEL("progress_circle_text", "top_padding3", "Progress circle")
+      PART_ELEMENT_CONTAINER("progress_circle", "progress_circle_text")
+      PART_PADDING("top_padding4", "progress_circle")
+      PART_LABEL("process_Xlarge_text", "top_padding4", "Process Xlarge")
+      PART_ELEMENT_CONTAINER("process_Xlarge", "process_Xlarge_text")
+      PART_PADDING("top_padding5", "process_Xlarge")
+      PART_LABEL("process_large_text", "top_padding5", "process large")
+      PART_ELEMENT_CONTAINER("process_large", "process_large_text")
+      PART_PADDING("top_padding6", "process_large")
+      PART_LABEL("process_medium_text", "top_padding6", "process medium")
+      PART_ELEMENT_CONTAINER("process_medium", "process_medium_text")
+      PART_PADDING("top_padding7", "process_medium")
+      PART_LABEL("process_small_text", "top_padding7", "Process small")
+      PART_ELEMENT_CONTAINER("process_small", "process_small_text")
+      BOTTOM_PADDING_PART("bottom_padding", "process_small")
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/progressbar_macro.edc b/live.viewer/dbox.app/data/groups/progressbar_macro.edc
new file mode 100644 (file)
index 0000000..35e608b
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+#define TEXT_COLOR 173 170 165 255
+#define BLACK_COLOR 0 0 0 255
+#define SIDE_PAD_SIZE 10 0
+#define PAD_SIZE 10 30
+
+#define BACKGROUND_PART(part_name)\
+part {\
+   name: part_name;\
+   type: RECT;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      visible: 0;\
+      min: 1 1;\
+   }\
+}
+
+#define TOP_PADDING_PART(part_name)\
+part {\
+   name: part_name;\
+   type: SPACER;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      min: PAD_SIZE;\
+      max: PAD_SIZE;\
+      fixed: 1 1;\
+      align: 0.5 0.0;\
+      rel1 {\
+         relative: 0.5 0.0;\
+         to_y:"bg";\
+      }\
+      rel2 {\
+         relative: 0.5 0.0;\
+         to_y:"bg";\
+      }\
+   }\
+}
+
+#define LEFT_PADDING_PART(part_name)\
+part {\
+   name: part_name;\
+   type: SPACER;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      min: SIDE_PAD_SIZE;\
+      fixed: 1 0;\
+      align: 0.0 0.5;\
+      rel1.to_x: "bg";\
+      rel2.relative: 0.0 1.0;\
+   }\
+}
+
+#define RIGHT_PADDING_PART(part_name)\
+part {\
+   name: part_name;\
+   type: SPACER;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      min: SIDE_PAD_SIZE;\
+      fixed: 1 0;\
+      align : 1.0 0.5;\
+      rel1.relative: 1.0 0.0;\
+      rel2.to_x: "bg";\
+   }\
+}
+
+#define BOTTOM_PADDING_PART(part_name,rel_to_y_name)\
+part {\
+   name: part_name;\
+   type: SPACER;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      min: PAD_SIZE;\
+      align: 0.5 1.0;\
+      rel1 {\
+         relative: 0.0 1.0;\
+         to_y: rel_to_y_name;\
+      }\
+   }\
+}
+
+#define PART_LABEL(part_name, to_y_name, part_text)\
+part {\
+   name: part_name;\
+   type: TEXT;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      fixed: 0 1;\
+      align: 0.5 0.0;\
+      color: TEXT_COLOR;\
+      text {\
+         font: "Tizen:style=Roman";\
+         size: 24;\
+         text: part_text;\
+         min: 1 1;\
+         align: 0.0 0.0;\
+      }\
+      rel1 {\
+         relative: 1.0 1.0;\
+         to_y: to_y_name;\
+         to_x: "left_padding";\
+      }\
+      rel2 {\
+         relative: 0.0 1.0;\
+         to_y: to_y_name;\
+         to_x: "right_padding";\
+      }\
+   }\
+}
+
+#define PART_ELEMENT_CONTAINER(part_name, to_y_name)\
+part {\
+   name: part_name;\
+   type: SWALLOW;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      fixed: 0 1;\
+      align: 0.5 0.0;\
+      rel1 {\
+         relative: 1.0 1.0;\
+         to_y: to_y_name;\
+         to_x: "left_padding";\
+      }\
+      rel2 {\
+         relative: 0.0 1.0;\
+         to_y: to_y_name;\
+         to_x: "right_padding";\
+      }\
+   }\
+}
+
+#define PART_PADDING(part_name, to_y_name)\
+part {\
+   name: part_name;\
+   type: SPACER;\
+   scale: 1;\
+   description {\
+      state: "default" 0.0;\
+      min: PAD_SIZE;\
+      max: PAD_SIZE;\
+      fixed: 1 1;\
+      align: 0.5 0.0;\
+      rel1 {\
+         relative: 0.5 1.0;\
+         to_y: to_y_name;\
+      }\
+      rel2 {\
+         relative: 0.5 1.0;\
+         to_y: to_y_name;\
+      }\
+   }\
+}
diff --git a/live.viewer/dbox.app/data/groups/radio.edc b/live.viewer/dbox.app/data/groups/radio.edc
new file mode 100644 (file)
index 0000000..3ce5b96
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 RADIO_WIDTH 170.0
+#define RADIO_HEIGHT 44.0
+#define RADIO_GAP 30.0
+
+group {
+   name: "elmdemo-test/radio";
+   parts {
+      part {
+         name: "top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP; //minimum size for gap filler
+            fixed: 0 1;
+            align: 0 0;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 1.0 0.0;
+         }
+      }
+      part {
+         name: "radio1";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+         }
+      }
+      part {
+         name: "radio1_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            max : RADIO_WIDTH RADIO_GAP;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio1";
+            }
+            rel2.to_y: "radio1";
+         }
+      }
+      part {
+         name: "radio2";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "radio1_bottom_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "radio1_bottom_padding";
+            }
+         }
+      }
+      part {
+         name: "radio2_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            max : RADIO_WIDTH RADIO_GAP;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio2";
+            }
+            rel2.to_y: "radio2";
+         }
+      }
+      part {
+         name: "radio3";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "radio2_bottom_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "radio2_bottom_padding";
+            }
+         }
+      }
+      part {
+         name: "radio3_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            max : RADIO_WIDTH RADIO_GAP;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio3";
+            }
+            rel2.to_y: "radio3";
+         }
+      }
+      part {
+         name: "radio4";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "radio3_bottom_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "radio3_bottom_padding";
+            }
+         }
+      }
+      part {
+         name: "bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            align: 0.5 1.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio4";
+            }
+         }
+      }
+   } //end parts
+} //end group
+
+group {
+   name: "elmdemo-test/radio-custom";
+   parts {
+      part {
+         name: "top_padding";
+         type: SPACER;
+         scale: 1; //allow scaling
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP; //minimum size for gap filler
+            fixed: 0 1;
+            align: 0.0 0.0;
+            rel2.relative: 1.0 0.0;
+         }
+      }
+      part {
+         name: "radio1";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+         }
+      }
+      part {
+         name: "radio1_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            max : RADIO_WIDTH RADIO_GAP;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio1";
+            }
+            rel2.to_y: "radio1";
+         }
+      }
+      part {
+         name: "radio2";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "radio1_bottom_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "radio1_bottom_padding";
+            }
+         }
+      }
+      part {
+         name: "radio2_bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            max : RADIO_WIDTH RADIO_GAP;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio2";
+            }
+            rel2.to_y: "radio2";
+         }
+      }
+      part {
+         name: "radio3";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "radio2_bottom_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "radio2_bottom_padding";
+            }
+         }
+      }
+      part {
+         name: "bottom_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min : RADIO_WIDTH RADIO_GAP;
+            align: 0.5 1.0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_y: "radio3";
+            }
+         }
+      }
+   } //end parts
+} //end group
+
+#undef RADIO_WIDTH
+#undef RADIO_HEIGHT
+#undef RADIO_GAP
+
diff --git a/live.viewer/dbox.app/data/groups/radio_custom.edc b/live.viewer/dbox.app/data/groups/radio_custom.edc
new file mode 100644 (file)
index 0000000..d564bdb
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+ * Copyright (c) 2010 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * PROPRIETARY/CONFIDENTIAL
+ *
+ * This software is the confidential and proprietary information of SAMSUNG
+ * ELECTRONICS ("Confidential Information"). You agree and acknowledge that this
+ * software is owned by Samsung and you shall not disclose such Confidential
+ * Information and shall use it only in accordance with the terms of the license
+ * agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG make no
+ * representations or warranties about the suitability of the software, either
+ * express or implied, including but not limited to the implied warranties of
+ * merchantability, fitness for a particular purpose, or non-infringement.
+ * SAMSUNG shall not be liable for any damages suffered by licensee arising out
+ * of or releated to this software.
+ *
+ */
+
+#define RADIO_STATE_DEFAULT 0
+#define RADIO_STATE_VISIBLE 1
+#define RADIO_STATE_DISABLED_VISIBLE 2
+#define RADIO_STATE_DISABLED 3
+
+group {
+   name: "elm/radio/base/water";
+   images {
+      image: "radio_bg.png" COMP;
+      image: "change_bg.png" COMP;
+      image: "radio_bg_in.png" COMP;
+   }
+   parts {
+      part {
+         name: "radio_bg";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "water_effect";
+         type: IMAGE;
+         scale: 1;
+         clip_to: "clipper";
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.75;
+            max: 36 4;
+            rel1.to: "bg_image";
+            rel2.to: "bg_image";
+            image.normal: "change_bg.png";
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            align: 1.0 0.25;
+         }
+      }
+      part {
+         name: "radio";
+         clip_to: "sequence_clip";
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg_image";
+            rel2.to: "bg_image";
+            image.normal: "radio_bg_in.png";
+         }
+      }
+      part {
+         name: "radio_choose";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.5 0.5;
+            visible: 0;
+            rel1.to: "bg_image";
+            rel2.to: "bg_image";
+            image.normal: "radio_bg_in.png";
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part {
+         name: "bg_image";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.0 0.5;
+            min: 64 64;
+            max: 64 64;
+            rel1.to: "radio_bg";
+            rel2.to: "radio_bg";
+            image.normal: "radio_bg.png";
+         }
+      }
+      part {
+         name: "sequence_clip";
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            rel1 {
+               to_y: "water_effect";
+               relative: 0.0 1.0;
+            }
+            rel2.to: "bg_image";
+         }
+      }
+      part {
+         name: "clipper";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description {
+            state: "default" 0.0;
+            min: 24 24;
+            max: 24 24;
+            rel1.to: "radio";
+            rel2.to: "radio";
+         }
+      }
+      part {
+         name: "elm.swallow.content";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 0;
+            visible: 0;
+            align: 1.0 0.5;
+            rel1 {
+               to_x: "bg_image";
+               relative: 1.0 0.0;
+            }
+            rel2.to_x: "bg_image";
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            aspect: 1.0 1.0;
+            min: 64 64;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+         }
+         description {
+            state: "disabled_visible" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 128;
+            visible: 1;
+            aspect: 1.0 1.0;
+         }
+      }
+      part {
+         name: "elm.text";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            rel1 {
+               to_x: "elm.swallow.content";
+               relative: 1.0 0.0;
+            }
+            color: 0 0 0 255;
+            text {
+               text: "Radio";
+               font: "Tizen:style=Regular";
+               size: 24;
+               min: 1 1;
+               align: 1.0 0.5;
+               text_class: "tizen";
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            text.min: 1 1;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            color: 0 0 0 128;
+            color3: 0 0 0 0;
+         }
+         description {
+            state: "disabled_visible" 0.0;
+            inherit: "default" 0.0;
+            color: 0 0 0 128;
+            color3: 0 0 0 0;
+            visible: 1;
+            text.min: 1 1;
+         }
+      }
+      part {
+         name: "disabler";
+         type: RECT;
+         ignore_flags: ON_HOLD;
+         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: "*";
+         action: SIGNAL_EMIT "elm,action,radio,toggle" "";
+      }
+      program {
+         name: "begin";
+         signal: "elm,state,radio,begin";
+         source: "";
+         action: ACTION_STOP;
+         target: "radio_on";
+         after: "full_without_action";
+      }
+      program {
+         name: "full_without_action";
+         action: STATE_SET "visible" 0.0;
+         target: "radio_choose";
+      }
+      program {
+         name: "end";
+         signal: "elm,state,radio,off";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "radio_choose";
+         after: "radio_off";
+      }
+      program {
+         name: "radio_on";
+         signal: "elm,state,radio,on";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "water_effect";
+         transition: LINEAR 0.9;
+      }
+      program {
+         name: "radio_off";
+         action: STATE_SET "default" 0.0;
+         target: "water_effect";
+         transition: LINEAR 0.9;
+      }
+      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";
+         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);
+         }
+      }
+      program {
+         name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         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);
+
+            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);
+         }
+      }
+   }
+}
+
+#undef RADIO_STATE_DEFAULT
+#undef RADIO_STATE_VISIBLE
+#undef RADIO_STATE_DISABLED_VISIBLE
+#undef RADIO_STATE_DISABLED
diff --git a/live.viewer/dbox.app/data/groups/segmentcontrol.edc b/live.viewer/dbox.app/data/groups/segmentcontrol.edc
new file mode 100644 (file)
index 0000000..86913b2
--- /dev/null
@@ -0,0 +1,413 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group {
+      name: "elmdemo-test/segment";
+#define BUTTON_WIDTH 250.0
+#define BUTTON_HEIGHT 44.0
+#define BUTTON_GAP 20.0
+      parts {
+         part {
+            name: "bg";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               color: 128 128 128 50;
+            }
+         }
+         part {
+            name: "top_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH 30; //minimum size for gap filler
+               fixed: 0 1;
+               rel1 {
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  relative: 1.0 0.0;
+               }
+               align: 0.0 0.0;
+            }
+         }
+         part {
+            name: "left_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min: 10 0; //minimum size for gap filler
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+               }
+               align: 0.0 0.5;
+            }
+         }
+         part {
+            name: "right_padding";
+            type: RECT;
+            scale: 1; //allow scaling
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 10 0; //minimum size for gap filler
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 0.0;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+               }
+               align: 1.0 0.5;
+            }
+         }
+         part {
+            name: "segment1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 1;
+               min: 460 70;
+               max: 780 70;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_y: "top_padding";
+                  to_x: "left_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "middle_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "segment1";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "segment1";
+               }
+            }
+         }
+         part {
+            name: "segment2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 1;
+               min: 460 90;
+               max: 780 90;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_y: "middle_padding";
+                  to_x: "left_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               }
+         }
+         part {
+            name: "pad_after_segment2";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "segment2";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "segment2";
+               }
+            }
+         }
+         part {
+            name: "disabled_seg1";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 1;
+               min: 460 90;
+               max: 780 90;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_y: "pad_after_segment2";
+                  to_x: "left_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               }
+         }
+         part {
+            name: "pad_after_segment3";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "disabled_seg1";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "disabled_seg1";
+               }
+            }
+         }
+         part {
+            name: "segment4";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 1;
+               min: 460 90;
+               max: 780 90;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_y: "pad_after_segment3";
+                  to_x: "left_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               }
+         }
+         part {
+            name: "pad_after_segment4";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "segment4";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "segment4";
+               }
+            }
+         }
+         part {
+            name: "disabled_seg2";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 0 1;
+               min: 460 50;
+               max: 780 50;
+               rel1 {
+                  relative: 1.0 1.0;
+                  to_y: "pad_after_segment4";
+                  to_x: "left_padding";
+               }
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_x: "right_padding";
+               }
+               align: 0.5 0.0;
+               }
+         }
+         part {
+            name: "btn_insert_bottom_padding";
+            type: RECT;
+            scale: 1;
+
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH 15;
+               max : BUTTON_WIDTH 15;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "disabled_seg2";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "disabled_seg2";
+               }
+            }
+         }
+         part {
+            name: "add";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               min: BUTTON_WIDTH BUTTON_HEIGHT;
+               max: BUTTON_WIDTH BUTTON_HEIGHT;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_insert_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "btn_add_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "add";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "add";
+               }
+            }
+         }
+         part {
+            name: "del";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               min: BUTTON_WIDTH BUTTON_HEIGHT;
+               max: BUTTON_WIDTH BUTTON_HEIGHT;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_add_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "btn_del_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : BUTTON_WIDTH BUTTON_GAP;
+               max : BUTTON_WIDTH BUTTON_GAP;
+               fixed: 1 1;
+               align: 0.5 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "del";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "del";
+               }
+            }
+         }
+         part {
+            name: "insert";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               fixed: 1 1;
+               min: BUTTON_WIDTH BUTTON_HEIGHT;
+               max: BUTTON_WIDTH BUTTON_HEIGHT;
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.0 1.0;
+                  to_y: "btn_del_bottom_padding";
+               }
+               align: 0.5 0.0;
+            }
+         }
+         part {
+            name: "btn_yellow_bottom_padding";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min : 0 BUTTON_GAP;
+               rel1 {
+                  relative: 0 1.0;
+                  to_y: "insert";
+               }
+               rel2 {
+                  relative: 1 1.0;
+               }
+               align: 0.5 1.0;
+            }
+         }
+      }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+#undef BUTTON_GAP
+} //end group
+
diff --git a/live.viewer/dbox.app/data/groups/slider.edc b/live.viewer/dbox.app/data/groups/slider.edc
new file mode 100644 (file)
index 0000000..6540e90
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+       name: "slider_popup";
+       images {
+               image : "00_ebook_popup_bg.png" COMP;
+               image : "00_ebook_popup_title_bg.png" COMP;
+       }
+       parts {
+               part { name: "bg";
+                       type: IMAGE;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 438 96;
+                               fixed: 1 1;
+                               image.normal: "00_ebook_popup_bg.png";
+                               image.border: 16 16 26 28;
+                       }
+               }
+               part { name: "top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 2;
+                               fixed: 0 1;
+                               align: 0 0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+               part { name: "title_top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 10;
+                               fixed: 0 1;
+                               align: 0 0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+               part { name: "page_top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 45;
+                               fixed: 0 1;
+                               align: 0 0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+
+               part { name: "left_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 2 0;
+                               fixed: 1 0;
+                               align: 0 0;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 0.0 1.0;
+                       }
+               }
+               part { name: "right_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 9 0;
+                               fixed: 1 0;
+                               align: 1 0;
+                               rel1.relative: 1.0 0.0;
+                               rel2.relative: 1.0 1.0;
+                       }
+               }
+               part { name: "bg_title_image";
+                       type: IMAGE;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 36;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1.relative: 1.0 1.0;
+                               rel1.to_x: "left_padding";
+                               rel1.to_y: "top_padding";
+                               rel2.relative: 0.0 1.0;
+                               rel2.to_x: "right_padding";
+                               rel2.to_y: "top_padding";
+                               image.normal: "00_ebook_popup_title_bg.png";
+                               image.border: 10 11 10 10;
+                       }
+               }
+               part { name: "title";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 1.0;
+                               rel1.to_y: "title_top_padding";
+                               rel2.relative: 0.5 1.0;
+                               rel2.to_y: "title_top_padding";
+                               color: 255 255 255 255;
+                               text {
+                                       font: FONT_ROM;
+                                       size: 18;
+                                       min: 1 1;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+               part { name: "page";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 1.0;
+                               rel1.to_y: "page_top_padding";
+                               rel2.relative: 0.5 1.0;
+                               rel2.to_y: "page_top_padding";
+                               color: 0 0 0 255;
+                               text {
+                                       font: FONT_ROM;
+                                       size: 30;
+                                       min: 1 1;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+
+       } //end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/slider_custom.edc b/live.viewer/dbox.app/data/groups/slider_custom.edc
new file mode 100644 (file)
index 0000000..a5e6ee0
--- /dev/null
@@ -0,0 +1,1305 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 BASE_DESCRIPTION(image_name) \
+   description { state: "default" 0.0; \
+      min: 375 34; \
+      max: 99999 34; \
+      rel1 { \
+         to: "bg"; \
+         offset: 1 0; \
+      } \
+      rel2 { \
+         to: "bg"; \
+         offset: -5 -1; \
+      } \
+      image.normal: image_name; \
+      image.border: 17 17 17 17; \
+      image.border_scale: 1; \
+   }
+
+group { name: "elm/slider/horizontal/bubble";
+   images {
+      image: "slider_grey_dots.png" COMP;
+      image: "slider_blue_dots.png" COMP;
+   }
+   parts {
+      part { name: "base";
+          mouse_events: 0;
+          clip_to: "level";
+          scale: 1;
+          BASE_DESCRIPTION("slider_grey_dots.png");
+      }
+      part { name: "base_bg";
+          mouse_events: 0;
+          scale: 1;
+          BASE_DESCRIPTION("slider_grey_dots.png");
+      }
+      part { name: "level.image";
+          clip_to: "clipper.image";
+          mouse_events: 0;
+          scale: 1;
+          BASE_DESCRIPTION("slider_blue_dots.png");
+      }
+      part { name: "clipper.image";
+          type: RECT;
+          mouse_events: 0;
+          scale: 1;
+          description { state: "default" 0.0;
+             fixed: 1 1;
+             rel1 {
+                to_x: "bar_image_left_padding";
+                to_y: "base";
+                relative: 1.0 0.0;
+             }
+             rel2 {
+                to_y: "base";
+                to_x: "elm.dragable.slider";
+                offset: -5 -1;
+                relative: 0.5 1.0;
+             }
+           }
+         }
+         part {
+            name: "bar_image_left_padding";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 0;
+               rel1.to: "base";
+               rel2 {
+                  relative: 0.0 1.0;
+                  to: "base";
+               }
+               align: 0.0 0.5;
+            }
+         }
+         part {
+            name: "bar_image_right_padding";
+            type: SPACER;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to: "base";
+               }
+               rel2.to: "base";
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "level";
+            clip_to: "clipper";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               rel1 {
+                  to_x: "bar_image_left_padding";
+                  to_y: "base";
+                  relative: 1.0 0.0;
+               }
+               rel2 {
+                  to_y: "base";
+                  to_x: "elm.dragable.slider";
+                  offset: -5 -1;
+                  relative: 0.5 1.0;
+               }
+            }
+            description { state: "inverted" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "level2";
+            mouse_events: 0;
+            scale: 1;
+            type: RECT;
+            clip_to: "clipper";
+            description { state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+            description { state: "inverted" 0.0;
+               inherit: "default" 0.0;
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+            }
+         }
+         part { name: "bg";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1.to: "elm.swallow.bar";
+               rel2{
+                  to: "elm.swallow.bar";
+                  offset: 0 0;
+               }
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "elm.swallow.bar";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 72 74;
+               max: 99999 74;
+               align: 1.0 0.5;
+               rel1 {
+                  to_x: "bar_left_padding";
+                  relative: 1.0 0.0;
+               }
+               rel2 {
+                  to_x: "bar_right_padding";
+                  relative: 0.0 1.0;
+               }
+            }
+         }
+         part {
+            name: "bar_left_padding";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min: 10 0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 1.0 0.5;
+                  to_x: "elm.text";
+               }
+               rel2 {
+                  relative: 1.0 0.5;
+                  to_x: "elm.text";
+               }
+               align: 0.0 0.5;
+            }
+         }
+         part {
+            name: "bar_right_padding";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               visible: 0;
+               min: 10 0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.0 0.5;
+                  to_x: "elm.units";
+               }
+               rel2 {
+                  relative: 0.0 0.5;
+                  to_x: "elm.units";
+               }
+               align: 1.0 0.5;
+            }
+         }
+         part { name: "elm.swallow.icon";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1.to_y: "elm.swallow.bar";
+               rel2 {
+                  relative: 0.0 1.0;
+                  to_y: "elm.swallow.bar";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               fixed: 1 1;
+               align: 0.0 0.5;
+               rel1{
+                  to_x: "elm.swallow.icon";
+                  relative: 1.0 0.0;
+                  offset: -1 4;
+               }
+               rel2{
+                  to_x: "elm.swallow.icon";
+                  relative: 1.0 1.0;
+                  offset: -1 -5;
+               }
+               color: 0 0 0 255;
+               text {
+                  font: "Tizen:style=Medium";
+                  size: 30;
+                  min: 0 0;
+                  align: 0.0 0.5;
+                  text_class: "tizen";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               text.min: 1 1;
+               rel1.offset: 0 4;
+               rel2.offset: 0 -5;
+            }
+         }
+         part { name: "elm.swallow.end";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 1.0 0.5;
+               rel1 {
+                  relative: 1.0 0.0;
+                  to_y: "elm.swallow.bar";
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  to_y: "elm.swallow.bar";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+            }
+         }
+         part { name: "units";
+            mouse_events: 0;
+            scale: 1;
+            type: RECT;
+            description { state: "default" 0.0;
+               visible: 0;
+               rel1 {
+                  to_x: "elm.units";
+                  offset: 0 5;
+               }
+               color: 0 0 0 0;
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "elm.units";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               fixed: 1 1;
+               align: 1.0 0.5;
+               rel1{
+                  relative: 0.0 0.0;
+                  offset: 0 8;
+                  to_x: "elm.swallow.end";
+               }
+               rel2{
+                  relative: 0.0 1.0;
+                  offset: 0 -9;
+                  to_x: "elm.swallow.end";
+               }
+               color: 0 0 0 25;
+               text {
+                  font: "Tizen:style=Bold";
+                  size: 30;
+                  min: 0 0;
+                  align: 0.0 0.5;
+                  text_class: "tizen";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               fixed: 1 1;
+               visible: 1;
+               text.min: 1 1;
+               rel1.offset: -5 0;
+               rel2.offset: -5 -1;
+            }
+         }
+         part { name: "elm.dragable.slider";
+            type: RECT;
+            mouse_events: 1;
+            scale: 1;
+            dragable {
+               x: 1 1 0;
+               y: 0 0 0;
+               confine: "bg";
+            }
+            description { state: "default" 0.0;
+               min: 0 0;
+               max: 0 0;
+               fixed: 1 1;
+               rel1 {
+                  relative: 0.5 0.0;
+                  to_x: "bg";
+               }
+               rel2 {
+                  relative: 0.5 1.0;
+                  to_x: "bg";
+               }
+               color: 0 0 0 0;
+            }
+         }
+         part { name: "disabler";
+            type: RECT;
+            mouse_events: 1;
+            repeat_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               min: 1 1;
+               color: 0 0 0 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+            }
+         }
+         part { name: "clipper";
+            type: RECT;
+            description { state: "default" 0.0;
+               color: 255 255 255 255;
+            }
+            description { state: "disabled" 0.0;
+               color: 255 255 255 102;
+            }
+         }
+      }
+      programs {
+         program { name: "text_show";
+         signal: "elm,state,text,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.text";
+      }
+      program { name: "text_hide";
+         signal: "elm,state,text,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+      program { name: "icon_show";
+         signal: "elm,state,icon,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.icon";
+      }
+      program { name: "icon_hide";
+         signal: "elm,state,icon,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.icon";
+      }
+      program { name: "end_show";
+         signal: "elm,state,end,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.end";
+      }
+      program { name: "end_hide";
+         signal: "elm,state,end,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.end";
+      }
+      program { name: "units_show";
+         signal: "elm,state,units,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.units";
+         target: "units";
+      }
+      program { name: "units_hide";
+         signal: "elm,state,units,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.units";
+         target: "units";
+      }
+      program { name: "slider_disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "disabler";
+         target: "clipper";
+      }
+      program { name: "slider_enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "disabler";
+         target: "clipper";
+      }
+   }
+}
+
+group { name: "elm/slider/horizontal/bubble_sent";
+   inherit: "elm/slider/horizontal/bubble";
+   parts {
+      part { name: "elm.dragable.slider";
+         type: GROUP;
+         source: "elm/slider/horizontal/indicator/bubble_sent";
+         mouse_events: 1;
+         scale: 1;
+         dragable {
+            x: 1 1 0;
+            y: 0 0 0;
+            confine: "bg";
+         }
+         description { state: "default" 0.0;
+            min: 0 120;
+            max: 0 120;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.5 0.0;
+               to_x: "bg";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_x: "bg";
+            }
+            color: 0 0 0 0;
+         }
+      }
+   }
+}
+
+group { name: "elm/slider/horizontal/indicator/bubble_sent";
+   images {
+      image: "indicator_bubble.png" COMP;
+   }
+   parts {
+      part { name: "button_events";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: 0 120;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+            color: 0 0 0 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part { name: "button0";
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: 20 20;
+            max: 20 20;
+            rel1 {
+               to: "elm.indicator";
+               offset: -10 0;
+            }
+            rel2.to: "elm.indicator";
+            image {
+               normal: "indicator_bubble.png";
+               border: 3 3 3 3;
+               border_scale: 1;
+            }
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "indicator_bubble.png";
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "indicator_bubble.png";
+         }
+      }
+      part { name: "elm.indicator";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 1;
+            color: 59 115 182 255;
+            text {
+               font: "Tizen:style=Medium";
+               size: 40;
+               min: 1 1;
+               align: 0.5 0.5;
+               text_class: "tizen";
+            }
+         }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+          }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 255 255 255 255;
+         }
+      }
+   }
+   programs {
+      program { name: "set_val_show";
+         signal: "elm,state,val,show";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.indicator";
+      }
+      program { name: "set_val_hide";
+         signal: "elm,state,val,hide";
+         source: "elm";
+         action: STATE_SET "hide" 0.0;
+         target: "elm.indicator";
+      }
+      program { name: "slider_disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "button0";
+         target: "button_events";
+      }
+      program { name: "slider_enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "button0";
+         target: "button_events";
+      }
+      program { name: "mouse_down";
+         signal: "mouse,down,*";
+         source: "button_events";
+         action: STATE_SET "pressed" 0.0;
+         target: "button0";
+         after: "text_pressed";
+      }
+      program { name: "mouse_up";
+         signal: "mouse,up,*";
+         source: "button_events";
+         action: STATE_SET "default" 0.0;
+         target: "button0";
+         after: "text_unpressed";
+      }
+      program { name: "text_pressed";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.indicator", st, 30, vl);
+            if (!strcmp(st, "default"))
+              set_state(PART:"elm.indicator", "pressed", 0.0);
+         }
+      }
+      program { name: "text_unpressed";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.indicator", st, 30, vl);
+            if (!strcmp(st, "pressed"))
+              set_state(PART:"elm.indicator", "default", 0.0);
+         }
+      }
+   }
+}
+
+group { name: "elm/slider/horizontal/indicator/wave";
+   images {
+      image: "slider_blue_arc_72x72.png" COMP;
+      image: "slider_green_arc_72x72.png" COMP;
+   }
+   parts {
+      part { name: "button_events";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: 2*72 1.5*72;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+            color: 0 0 0 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part { name: "button0";
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            min: 72 72;
+            max: 72 36;
+            rel1.to: "elm.indicator";
+            rel2.to: "elm.indicator";
+            image {
+               normal: "slider_blue_arc_72x72.png";
+               border: 22 22 10 43;
+               border_scale: 1;
+            }
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_green_arc_72x72.png";
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_green_arc_72x72.png";
+         }
+      }
+      part { name: "elm.indicator";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 1;
+            color: 0 0 0 0;
+            text {
+               font: "Tizen:style=Medium";
+               size: 40;
+               min: 1 1;
+               align: 0.5 0.5;
+               text_class: "tizen";
+            }
+         }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+          }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            color: 0 0 0 0;
+         }
+      }
+   }
+   programs {
+      program { name: "set_val_show";
+         signal: "elm,state,val,show";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.indicator";
+      }
+      program { name: "set_val_hide";
+         signal: "elm,state,val,hide";
+         source: "elm";
+         action: STATE_SET "hide" 0.0;
+         target: "elm.indicator";
+      }
+      program { name: "slider_disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "button0";
+         target: "button_events";
+      }
+      program { name: "slider_enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "button0";
+         target: "button_events";
+      }
+      program { name: "mouse_down";
+         signal: "mouse,down,*";
+         source: "button_events";
+         action: STATE_SET "pressed" 0.0;
+         target: "button0";
+         after: "text_pressed";
+      }
+      program { name: "mouse_up";
+         signal: "mouse,up,*";
+         source: "button_events";
+         action: STATE_SET "default" 0.0;
+         target: "button0";
+         after: "text_unpressed";
+      }
+      program { name: "text_pressed";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.indicator", st, 30, vl);
+            if (!strcmp(st, "default"))
+              set_state(PART:"elm.indicator", "pressed", 0.0);
+         }
+      }
+      program { name: "text_unpressed";
+         script {
+            new st[31];
+            new Float:vl;
+            get_state(PART:"elm.indicator", st, 30, vl);
+            if (!strcmp(st, "pressed"))
+              set_state(PART:"elm.indicator", "default", 0.0);
+         }
+      }
+   }
+}
+
+group { name: "elm/slider/horizontal/wave";
+   images {
+      image: "slider_arc__line_blue.png" COMP;
+      image: "slider_arc__line_green.png" COMP;
+   }
+   script {
+      public invert_on = 0;
+      public set_invert_on() {
+         set_state(PART:"level", "inverted", 0.0);
+         set_state(PART:"level2", "inverted", 0.0);
+         set_state(PART:"level_right", "inverted", 0.0);
+         set_state(PART:"level2_right", "inverted", 0.0);
+         set_int(invert_on, 1);
+      }
+      public set_invert_off() {
+         set_state(PART:"level", "default", 0.0);
+         set_state(PART:"level2", "default", 0.0);
+         set_state(PART:"level_right", "default", 0.0);
+         set_state(PART:"level2_right", "default", 0.0);
+         set_int(invert_on, 0);
+      }
+      public thumb_down() {
+         if(get_int(invert_on) == 0) {
+            set_state(PART:"level", "pressed", 0.0);
+            set_state(PART:"level_right", "pressed", 0.0);
+         }
+         else if(get_int(invert_on) == 1) {
+            set_state(PART:"level2", "pressed", 0.0);
+            set_state(PART:"level2_right", "pressed", 0.0);
+         }
+      }
+      public thumb_up() {
+         if(get_int(invert_on) == 0) {
+            set_state(PART:"level", "default", 0.0);
+            set_state(PART:"level_right", "default", 0.0);
+         }
+         else if(get_int(invert_on) == 1) {
+            set_state(PART:"level2", "inverted", 0.0);
+            set_state(PART:"level2_right", "inverted", 0.0);
+         }
+      }
+   }
+   parts {
+      part { name: "base";
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 438 6;
+            max: 99999 6;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            image{
+               normal: "slider_arc__line_blue.png";
+               border: 1 1 2 2;
+               border_scale: 1;
+            }
+         }
+      }
+      part {
+         name: "bar_image_left_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 0;
+            max: 0 0;
+            fixed: 1 0;
+            rel1.to: "base";
+            rel2 {
+               relative: 0.0 1.0;
+               to: "base";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part {
+         name: "bar_image_right_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 0 0;
+            max: 0 0;
+            fixed: 1 0;
+            rel1 {
+               relative: 1.0 0.0;
+               to: "base";
+            }
+            rel2.to: "base";
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "level";
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper";
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            rel1 {
+               to_x: "bar_image_left_padding";
+               to_y: "base";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to_y: "base";
+               to_x: "elm.dragable.slider";
+               relative: 0.0 1.0;
+            }
+            image{
+               normal: "slider_arc__line_blue.png";
+               border: 1 1 2 2;
+               border_scale: 1;
+            }
+         }
+         description { state: "inverted" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_arc__line_green.png";
+         }
+      }
+      part { name: "level2";
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper";
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            rel1 {
+               to_y: "base";
+               to_x: "elm.dragable.slider";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to_y: "base";
+               to_x: "bar_image_left_padding";
+               relative: 1.0 1.0;
+            }
+            image{
+               normal: "slider_arc__line_green.png";
+               border: 1 1 2 2;
+               border_scale: 1;
+            }
+         }
+         description { state: "inverted" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_arc__line_green.png";
+            visible: 1;
+         }
+      }
+      part { name: "level_right";
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper";
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            rel1 {
+               to_y: "base";
+               to_x: "elm.dragable.slider";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to_x: "bar_image_right_padding";
+               to_y: "base";
+               relative: 0.0 1.0;
+            }
+            image {
+               normal: "slider_arc__line_blue.png";
+               border: 1 1 2 2;
+               border_scale: 1;
+            }
+         }
+         description { state: "inverted" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_arc__line_green.png";
+         }
+      }
+      part { name: "level2_right";
+         mouse_events: 0;
+         scale: 1;
+         clip_to: "clipper";
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            visible: 0;
+            rel1 {
+               to_y: "base";
+               to_x: "bar_image_right_padding";
+               relative: 0.0 0.0;
+            }
+            rel2 {
+               to_y: "base";
+               to_x: "elm.dragable.slider";
+               relative: 1.0 1.0;
+            }
+            image{
+               normal: "slider_arc__line_blue.png";
+               border: 1 1 2 2;
+               border_scale: 1;
+            }
+         }
+         description { state: "inverted" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description { state: "pressed" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "slider_arc__line_green.png";
+            visible: 1;
+         }
+      }
+      part { name: "bg";
+         type: RECT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            rel1.to: "elm.swallow.bar";
+            rel2.to: "elm.swallow.bar";
+         }
+      }
+      part { name: "elm.swallow.bar";
+         type: SWALLOW;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 72 74;
+            max: 99999 74;
+            align: 1.0 0.5;
+            rel1 {
+               to_x: "bar_left_padding";
+               relative: 1.0 0.0;
+            }
+            rel2 {
+               to_x: "bar_right_padding";
+               relative: 0.0 1.0;
+            }
+         }
+      }
+      part {
+         name: "bar_left_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 16 0;
+            fixed: 1 1;
+            rel1 {
+               relative: 1.0 0.5;
+               to_x: "elm.text";
+            }
+            rel2 {
+               relative: 1.0 0.5;
+               to_x: "elm.text";
+            }
+            align: 0.0 0.5;
+         }
+      }
+      part {
+         name: "bar_right_padding";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 16 0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.0 0.5;
+               to_x: "elm.units";
+            }
+            rel2 {
+               relative: 0.0 0.5;
+               to_x: "elm.units";
+            }
+            align: 1.0 0.5;
+         }
+      }
+      part { name: "elm.swallow.icon";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 0.0 0.5;
+            rel1 {
+               to_y: "elm.swallow.bar";
+            }
+            rel2 {
+               relative: 0.0 1.0;
+               to_y: "elm.swallow.bar";
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "elm.text";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            align: 0.0 0.5;
+            rel1{
+               to_x: "elm.swallow.icon";
+               relative: 1.0 0.0;
+            }
+            rel2.to_x: "elm.swallow.icon";
+            color: 0 0 0 0;
+            text {
+               font: "Tizen:style=Medium";
+               size: 10;
+               min: 0 0;
+               align: 0.0 0.5;
+               text_class: "tizen";
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            text.min: 1 1;
+         }
+      }
+      part { name: "elm.swallow.end";
+         type: SWALLOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            align: 1.0 0.5;
+            rel1 {
+               relative: 1.0 0.0;
+               to_y: "elm.swallow.bar";
+            }
+            rel2 {
+               relative: 1.0 1.0;
+               to_y: "elm.swallow.bar";
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            aspect: 1.0 1.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part { name: "units";
+         mouse_events: 0;
+         scale: 1;
+         type: RECT;
+         description { state: "default" 0.0;
+            visible: 0;
+            rel1.to_x: "elm.units";
+            color: 0 0 0 0;
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part { name: "elm.units";
+         type: TEXT;
+         mouse_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            align: 1.0 0.5;
+            rel1.to_x: "elm.swallow.end";
+            rel2{
+               relative: 0.0 1.0;
+               to_x: "elm.swallow.end";
+            }
+            color: 0 0 0 0;
+            text {
+               font: "Tizen:style=Bold";
+               size: 10;
+               min: 0 0;
+               align: 0.0 0.5;
+               text_class: "tizen";
+            }
+         }
+         description { state: "visible" 0.0;
+            inherit: "default" 0.0;
+            fixed: 1 1;
+            visible: 1;
+            text.min: 1 1;
+         }
+      }
+      part { name: "elm.dragable.slider";
+         type: GROUP;
+         source: "elm/slider/horizontal/indicator/wave";
+         mouse_events: 1;
+         scale: 1;
+         dragable {
+            x: 1 1 0;
+            y: 0 0 0;
+            confine: "bg";
+         }
+         description { state: "default" 0.0;
+            min: 72 72;
+            fixed: 1 1;
+            align: 0.5 0.5;
+            color: 0 0 0 0;
+         }
+      }
+      part { name: "disabler";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 0;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            color: 0 0 0 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+      part { name: "clipper";
+         type: RECT;
+         description { state: "default" 0.0;
+            color: 255 255 255 255;
+         }
+         description { state: "disabled" 0.0;
+            color: 255 255 255 102;
+         }
+      }
+   }
+   programs {
+      program { name: "text_show";
+         signal: "elm,state,text,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.text";
+      }
+      program { name: "text_hide";
+         signal: "elm,state,text,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.text";
+      }
+      program { name: "icon_show";
+         signal: "elm,state,icon,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.icon";
+      }
+      program { name: "icon_hide";
+         signal: "elm,state,icon,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.icon";
+      }
+      program { name: "end_show";
+         signal: "elm,state,end,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.swallow.end";
+      }
+      program { name: "end_hide";
+         signal: "elm,state,end,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.swallow.end";
+      }
+      program { name: "units_show";
+         signal: "elm,state,units,visible";
+         source: "elm";
+         action: STATE_SET "visible" 0.0;
+         target: "elm.units";
+         target: "units";
+      }
+      program { name: "units_hide";
+         signal: "elm,state,units,hidden";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "elm.units";
+         target: "units";
+      }
+      program { name: "invert_on";
+         signal: "elm,state,inverted,on";
+         source: "elm";
+         script {
+            set_invert_on();
+         }
+      }
+      program { name: "invert_off";
+         signal: "elm,state,inverted,off";
+         source: "elm";
+         script {
+            set_invert_off();
+         }
+      }
+      program { name: "val_show";
+         signal: "mouse,down,*";
+         source: "elm.dragable.slider";
+         script {
+            thumb_down();
+         }
+      }
+      program { name: "val_hide";
+         signal: "mouse,up,*";
+         source: "elm.dragable.slider";
+         script {
+            thumb_up();
+         }
+      }
+      program { name: "slider_disable";
+         signal: "elm,state,disabled";
+         source: "elm";
+         action: STATE_SET "disabled" 0.0;
+         target: "disabler";
+         target: "clipper";
+      }
+      program { name: "slider_enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "disabler";
+         target: "clipper";
+      }
+   }
+}
diff --git a/live.viewer/dbox.app/data/groups/slider_default.edc b/live.viewer/dbox.app/data/groups/slider_default.edc
new file mode 100644 (file)
index 0000000..b3017b8
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   name: "slider_popup";
+   images {
+      image : "00_ebook_popup_bg.png" COMP;
+      image : "00_ebook_popup_title_bg.png" COMP;
+   }
+   parts {
+      part { name: "bg";
+         type: IMAGE;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: 438 96;
+            fixed: 1 1;
+            image.normal: "00_ebook_popup_bg.png";
+            image.border: 16 16 26 28;
+         }
+      }
+      part { name: "top_padding";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 2;
+            fixed: 0 1;
+            align: 0 0;
+            rel1.relative: 0.5 0.0;
+            rel2.relative: 0.5 0.0;
+         }
+      }
+      part { name: "title_top_padding";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 10;
+            fixed: 0 1;
+            align: 0 0;
+            rel1.relative: 0.5 0.0;
+            rel2.relative: 0.5 0.0;
+         }
+      }
+      part { name: "page_top_padding";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 45;
+            fixed: 0 1;
+            align: 0 0;
+            rel1.relative: 0.5 0.0;
+            rel2.relative: 0.5 0.0;
+         }
+      }
+
+      part { name: "left_padding";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 2 0;
+            fixed: 1 0;
+            align: 0 0;
+            rel1.relative: 0.0 0.0;
+            rel2.relative: 0.0 1.0;
+         }
+      }
+      part { name: "right_padding";
+         type: RECT;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 9 0;
+            fixed: 1 0;
+            align: 1 0;
+            rel1.relative: 1.0 0.0;
+            rel2.relative: 1.0 1.0;
+         }
+      }
+      part { name: "bg_title_image";
+         type: IMAGE;
+         scale: 1;
+         mouse_events: 0;
+         description {
+            state: "default" 0.0;
+            min: 0 36;
+            fixed: 0 1;
+            align: 0.5 0.0;
+            rel1.relative: 1.0 1.0;
+            rel1.to_x: "left_padding";
+            rel1.to_y: "top_padding";
+            rel2.relative: 0.0 1.0;
+            rel2.to_x: "right_padding";
+            rel2.to_y: "top_padding";
+            image.normal: "00_ebook_popup_title_bg.png";
+            image.border: 10 11 10 10;
+         }
+      }
+      part { name: "title";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.5 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.5 1.0;
+            rel1.to_y: "title_top_padding";
+            rel2.relative: 0.5 1.0;
+            rel2.to_y: "title_top_padding";
+            color: 255 255 255 255;
+            text {
+               font: FONT_MED;
+               size: 18;
+               min: 1 1;
+               align: 0.5 0.5;
+            }
+         }
+      }
+      part { name: "page";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            align: 0.5 0.0;
+            fixed: 1 1;
+            rel1.relative: 0.5 1.0;
+            rel1.to_y: "page_top_padding";
+            rel2.relative: 0.5 1.0;
+            rel2.to_y: "page_top_padding";
+            color: 0 0 0 255;
+            text {
+               font: FONT_MED;
+               size: 30;
+               min: 1 1;
+               align: 0.5 0.5;
+            }
+         }
+      }
+
+   } //end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/slider_volume.edc b/live.viewer/dbox.app/data/groups/slider_volume.edc
new file mode 100644 (file)
index 0000000..c0f415a
--- /dev/null
@@ -0,0 +1,261 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+
+       group {
+               name: "slider_volume_layout";
+               parts{
+                       part {
+                               name: "top_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state : "default" 0.0;
+                                       visible : 0;
+                                       min : 0 5;
+                                       fixed : 0 1;
+                                       rel1.relative : 0.5 0;
+                                       rel2.relative : 0.5 0;
+                                       align : 0.5 0.0;
+                               }
+                       }
+                       part {
+                               name: "bottom_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state : "default" 0.0;
+                                       visible : 0;
+                                       align : 0.5 0.0;
+                                       min : 0 5;
+                                       fixed : 0 1;
+                                       rel1.relative : 0.5 1.0;
+                                       rel1.to_y : "volume_button";
+                                       rel2.relative : 0.5 1.0;
+                                       align : 0.5 0;
+                                       rel2.to_y : "volume_button";
+                               }
+                       }
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state : "default" 0.0;
+                                       rel2.to_y : "bottom_padding";
+                                       color : 100 100 100 255;
+                               }
+                       }
+
+                       part{
+                               name: "left_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state : "default" 0.0;
+                                       visible : 0;
+                                       min : 10 0;
+                                       fixed : 1 0;
+                                       rel1.relative : 0.0 0.5;
+                                       rel2.relative : 0.0 0.5;
+                                       align : 0.0 0.5;
+                               }
+                       }
+                       part{
+                               name: "right_padding";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state : "default" 0.0;
+                                       visible : 0;
+                                       min : 30 0;
+                                       fixed : 1 0;
+                                       rel1.relative : 1.0 0.5;
+                                       rel2.relative : 1.0 0.5;
+                                       align : 1.0 0.5;
+                               }
+                       }
+                       part {
+                               name: "text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.5;
+                                       fixed: 1 1;
+                                       rel1.relative: 1.0 0.0;
+                                       rel1.to_x: "left_padding";
+                                       rel1.to_y: "volume_button";
+                                       rel2.relative: 1.0 1.0;
+                                       rel2.to_x: "left_padding";
+                                       rel2.to_y: "volume_button";
+                                       color: 240 240 240 255;
+                                       text {
+                                               font: FONT_MED;
+                                               size: 30;
+                                               min: 1 1;
+                                               align: 0.5 0.5;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "volume_button";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 1.0 0.0;
+                                       min: 60 60;
+                                       fixed: 1 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel1.to_x: "right_padding";
+                                       rel1.to_y: "top_padding";
+                                       rel2.relative: 0.0 1.0;
+                                       rel2.to_x: "right_padding";
+                                       rel2.to_y: "top_padding";
+                               }
+                       }
+               }//end parts
+} //end group
+
+group {
+       name: "slider_volume_popup";
+       images {
+               image : "00_volume_popup_bg.png" COMP;
+               image : "00_volume_icon.png" COMP;
+       }
+       parts {
+               part { name: "bg";
+                       type: IMAGE;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 330 424;
+                               fixed: 1 1;
+                               image.normal: "00_volume_popup_bg.png";
+                               image.border: 11 11 15 19;
+                       }
+               }
+               part { name: "top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 50;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+               part { name: "text_top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 20;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+               part { name: "slider_top_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 140;
+                               fixed: 0 1;
+                               align: 0.5 0.0;
+                               rel1.relative: 0.5 0.0;
+                               rel2.relative: 0.5 0.0;
+                       }
+               }
+               part { name: "slider_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                               min: 0 14;
+                               fixed: 0 1;
+                               align: 0.5 1.0;
+                               rel1.relative: 0.5 1.0;
+                               rel2.relative: 0.5 1.0;
+                       }
+               }
+               part { name: "title_text";
+                       type: TEXT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 1.0;
+                               rel1.to_y: "text_top_padding";
+                               rel2.relative: 0.5 1.0;
+                               rel2.to_y: "text_top_padding";
+                               color: 255 255 255 255;
+                               text {
+                                       font: FONT_MED;
+                                       size: 15;
+                                       min: 1 1;
+                                       align: 0.5 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "volume_hor";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               min: 320 100;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 1.0;
+                               rel1.to_y: "top_padding";
+                               rel2.relative: 0.5 1.0;
+                               rel2.to_y: "top_padding";
+                       }
+               }
+               part {
+                       name: "volume_ver";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0.5 0.0;
+                               min: 320 100;
+                               fixed: 1 1;
+                               rel1.relative: 0.5 1.0;
+                               rel1.to_y: "slider_top_padding";
+                               rel2.relative: 0.5 0.0;
+                               rel2.to_y: "slider_bottom_padding";
+                       }
+               }
+       } //end parts
+} //end group
diff --git a/live.viewer/dbox.app/data/groups/style.edc b/live.viewer/dbox.app/data/groups/style.edc
new file mode 100644 (file)
index 0000000..5f7b1f8
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+       group {
+               name: "elmdemo-test/style";
+#define BUTTON1_WIDTH 170.0
+#define BUTTON1_HEIGHT 44.0
+#define BUTTON2_WIDTH 170.0
+#define BUTTON2_HEIGHT 80.0
+               parts{
+                       part {
+                               name: "top_padding";
+                               type: RECT;
+                               scale: 1; //allow scaling
+
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                                       min : 0 30;
+                                       fixed: 0 1;
+                                       rel1 { relative: 0.5 0; }
+                                       rel2 { relative: 0.5 0; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "button1";
+                               type: SWALLOW;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: BUTTON1_WIDTH BUTTON1_HEIGHT;
+                                       rel1 { relative: 0.5 1.0; to_y: "top_padding"; }
+                                       rel2 { relative: 0.5 1.0; to_y: "top_padding"; }
+                                       align: 0.5 0;
+                               }
+                       }
+                       part {
+                               name: "button2_top_padding";
+                               type: RECT;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                                       min : 0 30;
+                                       fixed: 0 1;
+                                       align: 0.5 0;
+                                       rel1 { relative: 0.5 1.0; to_y: "button1"; }
+                                       rel2 { relative: 0.5 1.0; to_y: "button1"; }
+                               }
+                       }
+                       part {
+                               name: "button2";
+                               type: SWALLOW;
+                               scale: 1;
+
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: BUTTON2_WIDTH BUTTON2_HEIGHT;
+                                       rel1 { relative: 0.5 1.0; to_y: "button2_top_padding"; }
+                                       rel2 { relative: 0.5 1.0; to_y: "button2_top_padding"; }
+                                       align: 0.5 0;
+                                       }
+                       }
+               }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+} //end group
+
+
+       group { name: "elm/button/base/elm_demo_tizen/text_with_icon";
+               images {
+                       image: "00_button_03_normal.png" COMP;
+                       image: "00_button_03_press.png" COMP;
+                       image: "00_button_03_focus.png" COMP;
+               }
+               parts {
+                       part { name: "button_image";
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 1 1;
+                                       image {
+                                               normal: "00_button_03_normal.png";
+                                               border: 8 8 8 8;
+                                       }
+                                       image.middle: SOLID;
+                               }
+                               description { state: "clicked" 0.0;
+                                       inherit: "default" 0.0;
+                                       image.normal: "00_button_03_press.png";
+                                       image.middle: SOLID;
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit:  "default" 0.0;
+                               }
+                               description { state: "focused" 0.0;
+                                       inherit: "default" 0.0;
+                                       image.normal: "00_button_03_focus.png";
+                               }
+                       }
+                       part { name: "elm.swallow.content";
+                               type: SWALLOW;
+                               description { state: "default" 0.0;
+                                       fixed: 0 0;
+                                       visible: 1;
+                                       align: 0.5 0.5;
+                                       aspect: 1.0 1.0;
+                                       rel2.relative: 1.0 0.5;
+                                       aspect_preference: VERTICAL;
+                               }
+                               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;
+                                       inherit: "default" 0.0;
+                                       fixed: 0 0;
+                                       visible: 1;
+                                       align: 0.5 0.5;
+                                       aspect: 1.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       aspect_preference: VERTICAL;
+                               }
+                       }
+                       part { name: "elm.text";
+                               type:          TEXT;
+                               effect:        SOFT_SHADOW;
+                               mouse_events:  0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                                       rel1.to_y: "elm.swallow.content";
+                                       rel1.relative: 0.5 1.0;
+                                       rel2.relative: 0.5 1.0;
+                                       color: 90 73 40 255;
+                                       color2: 255 255 255 255;
+                                       color3: 255 255 255 255;
+                                       text {
+                                               font: FONT_ROM;
+                                               size: 24;
+                                               min:  1 1;
+                                               align: 0.5 0.5;
+                                       }
+                               }
+                               description { state: "visible" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                               description { state: "clicked" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       min: 1 1;
+                                       color: 255 255 255 255;
+                                       color2: 0 0 0 102;
+                                       color3: 0 0 0 255;
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 128;
+                                       color3: 0 0 0 0;
+                               }
+                               description { state: "disabled_visible" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 128;
+                                       color3: 0 0 0 0;
+                                       visible: 1;
+                               }
+                               description { state: "focused" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                                       min: 1 1;
+                                       color: 255 255 255 255;
+                                       color2: 0 0 0 102;
+                                       color3: 0 0 0 255;
+                               }
+                       }
+                       part { name: "over2";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               ignore_flags: ON_HOLD;
+                               description { state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit:  "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "over3";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description { state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                               description { state: "clicked" 0.0;
+                                       inherit:  "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part { name: "disabler";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       visible: 0;
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "button_click";
+                               signal: "mouse,down,1";
+                               source: "over2";
+                               action: SIGNAL_EMIT "elm,action,press" "";
+                               after: "button_click_anim";
+                       }
+                       program { name: "button_click_anim";
+                               action: STATE_SET "clicked" 0.0;
+                               target: "button_image";
+                               target: "elm.text";
+                       }
+                       program { name: "button_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";
+                       action: STATE_SET "visible" 0.0;
+                       target: "elm.text";
+                       }
+                       program { name: "button_mouseout_clicked";
+                               signal: "mouse,out";
+                               source: "over2";
+                               script {
+                                       new st[31];
+                                       new Float:vl;
+                                       get_state(PART:"elm.text", st, 30, vl);
+                                       if (!strcmp(st, "clicked"))
+                                       {
+                                               set_state(PART:"elm.text", "visible", 0.0);
+                                               set_state(PART:"button_image", "visible", 0.0);
+                                       }
+                               }
+                       }
+                       program { name: "button_click2";
+                               signal: "mouse,down,1";
+                               source: "over3";
+                               action: STATE_SET "clicked" 0.0;
+                               target: "over3";
+                       }
+                       program { name: "button_unclick2";
+                               signal: "mouse,up,1";
+                               source: "over3";
+                               action: STATE_SET "default" 0.0;
+                               target: "over3";
+                       }
+                       program { name: "button_unclick3";
+                               signal: "mouse,up,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:"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:"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);
+                                       else
+                                               set_state(PART:"elm.swallow.content", "icononly", 0.0);
+                               }
+                       }
+                       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: "button_image";
+                               target: "over2";
+                               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);
+                               }
+                       }
+                       program { name: "enable";
+                               signal: "elm,state,enabled";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "button_image";
+                               target: "over2";
+                               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);
+                               }
+                       }
+                       program { name: "focused";
+                               signal: "elm,action,focus";
+                               source: "elm";
+                               action: STATE_SET "focused" 0.0;
+                               target: "button_image";
+                               target: "elm.text";
+                       }
+                       program { name: "unfocused";
+                               signal: "elm,action,unfocus";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "button_image";
+                               action: STATE_SET "visible" 0.0;
+                               target: "elm.text";
+                       }
+               }
+       }
+
+
diff --git a/live.viewer/dbox.app/data/groups/style_button.edc b/live.viewer/dbox.app/data/groups/style_button.edc
new file mode 100644 (file)
index 0000000..42aee26
--- /dev/null
@@ -0,0 +1,761 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+group {
+   name: "elmdemo-test/style";
+#define BUTTON1_WIDTH 170.0
+#define BUTTON1_HEIGHT 44.0
+#define BUTTON2_WIDTH 700.0
+#define BUTTON2_HEIGHT 80.0
+#define BUTTON2_TEXT_WIDTH 600.0
+#define BUTTON3_WIDTH 170.0
+#define BUTTON3_HEIGHT 80.0
+   parts {
+      part {
+         name: "top_padding";
+         type: RECT;
+         scale: 1; //allow scaling
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0.0;
+            rel1.relative: 0.5 0.0;
+            rel2.relative: 0.5 0.0;
+         }
+      }
+      part {
+         name: "button1";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            min: BUTTON1_WIDTH BUTTON1_HEIGHT;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "top_padding";
+            }
+         }
+      }
+      part {
+         name: "button2_top_padding";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "button1";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "button1";
+            }
+         }
+      }
+      part {
+         name: "button2";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            max: BUTTON2_WIDTH BUTTON2_HEIGHT;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "button2_top_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "button2_top_padding";
+            }
+         }
+      }
+      part {
+         name: "button3_top_padding";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 0 30;
+            fixed: 0 1;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "button2";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "button2";
+            }
+         }
+      }
+      part {
+         name: "button3";
+         type: SWALLOW;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            min: BUTTON3_WIDTH BUTTON3_HEIGHT;
+            align: 0.5 0.0;
+            rel1 {
+               relative: 0.5 1.0;
+               to_y: "button3_top_padding";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to_y: "button3_top_padding";
+            }
+         }
+      }
+   }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+} //end group
+
+
+group {
+   name: "elm/button/base/elm_demo_tizen/text_with_icon";
+   images {
+      image: "00_button_03_normal.png" COMP;
+      image: "00_button_03_press.png" COMP;
+      image: "00_button_03_focus.png" COMP;
+   }
+   parts {
+      part { name: "button_bg";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            max: BUTTON2_WIDTH -1;
+         }
+      }
+      part { name: "left_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 16 0;
+            max: 16 -1;
+            fixed: 1 0;
+            align: 0.0 0.5;
+            rel1 { relative: 0.0 0.0; to: "button_bg"; }
+            rel2 { relative: 0.0 1.0; to: "button_bg"; }
+         }
+      }
+      part { name: "right_padding";
+         type: SPACER;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 16 0;
+            max: 16 -1;
+            fixed: 1 0;
+            align: 1.0 0.5;
+            rel1 { relative: 1.0 0.0; to: "button_bg"; }
+            rel2 { relative: 1.0 1.0; to: "button_bg"; }
+         }
+      }
+      part {
+         name: "button_image";
+         mouse_events: 1;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.to: "button_bg";
+            rel2.to: "button_bg";
+            image {
+               normal: "00_button_03_normal.png";
+               border: 8 8 8 8;
+            }
+         }
+         description {
+            state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "00_button_03_press.png";
+            image.middle: SOLID;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit:  "default" 0.0;
+         }
+         description {
+            state: "focused" 0.0;
+            inherit: "default" 0.0;
+            image.normal: "00_button_03_focus.png";
+         }
+      }
+      part {
+         name: "elm.swallow.content";
+         type: SWALLOW;
+         description {
+            state: "default" 0.0;
+            visible: 1;    //// modified for icon alignment
+            align: 0.0 0.5;
+            aspect: 1.0 1.0;
+            rel1 { relative: 0.0 0.0; to: "left_padding"; }
+            rel2 { relative: 0.0 1.0; to: "left_padding"; }
+            aspect_preference: VERTICAL;
+         }
+         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;
+            inherit: "default" 0.0;
+            fixed: 0 0;
+            visible: 1;
+            align: 0.5 0.5;
+            aspect: 1.0 1.0;
+            rel2.relative: 1.0 1.0;
+            aspect_preference: VERTICAL;
+         }
+      }
+      part {
+         name: "elm.text";
+         type: TEXT;
+         effect: FAR_SHADOW BOTTOM;
+         mouse_events: 0;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            max: BUTTON2_TEXT_WIDTH -1;
+            visible: 0;   ///// modified for text alignment
+            rel1 { relative: 1.0 0.0; to: "elm.swallow.content"; }
+            rel2 { relative: 0.0 1.0; to: "right_padding"; }
+            color: 90 73 40 255;
+            color2: 255 255 255 255;
+            color3: 255 255 255 255;
+            text {
+               font: FONT_MED;
+               size: 24;
+               min:  1 1;
+               text_class: "tizen";
+            }
+         }
+         description {
+            state: "visible" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+         description {
+            state: "clicked" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            min: 1 1;
+            color: 255 255 255 255;
+            color2: 0 0 0 102;
+            color3: 0 0 0 255;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            color: 0 0 0 128;
+            color3: 0 0 0 0;
+         }
+         description {
+            state: "disabled_visible" 0.0;
+            inherit: "default" 0.0;
+            color: 0 0 0 128;
+            color3: 0 0 0 0;
+            visible: 1;
+         }
+         description {
+            state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+            min: 1 1;
+            color: 255 255 255 255;
+            color2: 0 0 0 102;
+            color3: 0 0 0 255;
+         }
+      }
+      part {
+         name: "over2";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         ignore_flags: ON_HOLD;
+         description {
+            state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+         description {
+            state: "disabled" 0.0;
+            inherit:  "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "over3";
+         type: RECT;
+         mouse_events: 1;
+         repeat_events: 1;
+         description { state: "default" 0.0;
+            color: 0 0 0 0;
+         }
+         description {
+            state: "clicked" 0.0;
+            inherit:  "default" 0.0;
+            visible: 1;
+         }
+      }
+      part {
+         name: "disabler";
+         type: RECT;
+         description {
+            state: "default" 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);
+            }
+               set_state(PART:"button_image", "default", 0.0);
+         }
+         after: button_unpress;
+      }
+      program {
+         name: "button_click2";
+         signal: "mouse,down,1";
+         source: "over3";
+         action: STATE_SET "clicked" 0.0;
+         target: "over3";
+      }
+      program {
+         name: "button_unclick2";
+         signal: "mouse,clicked,1";
+         source: "over3";
+         action: STATE_SET "default" 0.0;
+         target: "over3";
+      }
+      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:"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:"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);
+            }
+            else
+            {
+               set_state(PART:"elm.swallow.content", "icononly", 0.0);
+            }
+         }
+      }
+      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: "button_image";
+         target: "over2";
+         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);
+         }
+      }
+      program {
+         name: "enable";
+         signal: "elm,state,enabled";
+         source: "elm";
+         action: STATE_SET "default" 0.0;
+         target: "button_image";
+         target: "over2";
+         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);
+         }
+      }
+      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";
+      }
+      program {
+         name: "button_pressed";
+         signal: "elm,action,pressed";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            set_state(PART:"button_image", "clicked", 0.0);
+            get_state(PART:"elm.text", st, 30, vl);
+            if (!strcmp(st, "visible"))
+               set_state(PART:"elm.text", "clicked", 0.0);
+         }
+      }
+      program {
+         name: "button_unpressed";
+         signal: "elm,action,unpressed";
+         source: "elm";
+         script {
+            new st[31];
+            new Float:vl;
+            set_state(PART:"button_image", "default", 0.0);
+            get_state(PART:"elm.text", st, 30, vl);
+            if (!strcmp(st, "clicked"))
+               set_state(PART:"elm.text", "visible", 0.0);
+         }
+      }
+   }
+}
+
+/*new Button Custom Style*/
+group {
+   name: "elm/button/base/elm_demo_tizen/anim_up_down";
+   images {
+      image: "button_fill_2.png" COMP;
+      image: "button_fill_1.png" COMP;
+      image: "button_frame.png" COMP;
+   }
+   parts {
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            color: 255 255 255 255;
+            rel1 {
+               to_x: "padding.left";
+               to_y: "elm.text";
+            }
+            rel2 {
+               to_x: "padding.right";
+               to_y: "elm.text";
+            }
+         }
+      }
+      part {
+         name: "bg_image";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            image {
+               normal: "button_fill_2.png";
+               border: 12 12 12 12;
+            }
+         }
+      }
+      part {
+         name: "bg_image_HIDE";
+         scale: 1;
+         clip_to: "bg";
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            image {
+               normal: "button_fill_1.png";
+               border: 12 12 12 12;
+            }
+         }
+         description {
+            state: "up-state" 1.0;
+            inherit: "default" 0.0;
+            rel1.relative: 0.0 -1.0;
+            rel2.relative: 1.0 0.0;
+         }
+      }
+      part {
+         name: "elm.text";
+         type: TEXT;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            color: 241 239 241 255;
+            text {
+               text: "Tap";
+               font: "Tizen:style=Regular";
+               size: 32;
+               min: 1 1;
+               align: 0.5 0.5;
+               text_class: "tizen";
+            }
+         }
+      }
+      part {
+         name: "text_HIDE";
+         type: TEXT;
+         clip_to: "bg";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            fixed: 1 1;
+            color: 0 0 0 255;
+            rel1.to: "bg_image_HIDE";
+            rel2.to: "bg_image_HIDE";
+            text {
+               text_source: "elm.text";
+               font: "Tizen:style=Regular";
+               size: 32;
+               min: 1 1;
+               text_class: "tizen";
+            }
+         }
+      }
+      part {
+         name: "bg_frame";
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+            image {
+               normal: "button_frame.png";
+               border: 12 12 12 12;
+            }
+         }
+      }
+      part {
+         name: "padding.right";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 12 0;
+            fixed: 1 0;
+            align: 0.0 0.0;
+            rel1 {
+               relative: 1.0 0.0;
+               to_x: "elm.text";
+            }
+         }
+      }
+      part {
+         name: "padding.left";
+         type: SPACER;
+         scale: 1;
+         description {
+            state: "default" 0.0;
+            min: 12 0;
+            fixed: 1 0;
+            align: 1.0 0.0;
+            rel2 {
+               relative: 0.0 1.0;
+               to_x: "elm.text";
+            }
+         }
+      }
+   }
+   programs {
+      program {
+         name: "start_open";
+         signal: "mouse,down,1";
+         source: "*";
+         after: "stop_close";
+         after: "open";
+      }
+      program {
+         name: "open";
+         signal: "start,open";
+         source: "";
+         action: STATE_SET "up-state" 1.0;
+         target: "bg_image_HIDE";
+         transition: LINEAR 0.5;
+      }
+      program {
+         name: "start_close";
+         signal: "mouse,up,1";
+         source: "*";
+         after: "stop_open";
+         after: "close";
+      }
+      program {
+         name: "close";
+         signal: "start,close";
+         source: "";
+         action: STATE_SET "default" 0.0;
+         target: "bg_image_HIDE";
+         transition: BOUNCE 1.5 3.5 3.0;
+      }
+      program {
+         name: "stop_open";
+         signal: "stop,open";
+         source: "";
+         action: ACTION_STOP;
+         target: "open";
+      }
+      program {
+         name: "stop_close";
+         signal: "stop,close";
+         source: "";
+         action: ACTION_STOP;
+         target: "close";
+      }
+      program {
+         name: "button_pressed";
+         signal: "elm,action,pressed";
+         source: "elm";
+         after: "start_open";
+      }
+      program {
+         name: "button_unpressed";
+         signal: "elm,action,unpressed";
+         source: "elm";
+         after: "start_close";
+      }
+   }
+}
+
diff --git a/live.viewer/dbox.app/data/groups/style_ctxpopup_camera.edc b/live.viewer/dbox.app/data/groups/style_ctxpopup_camera.edc
new file mode 100644 (file)
index 0000000..a6ea4dc
--- /dev/null
@@ -0,0 +1,1051 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *
+ */
+
+//Ctxpopup Camera Shooting mode
+
+//Content Layout
+group {
+       name:"camera/layout";
+       parts {
+               part {
+                       name: "layout_bg";
+                       type: RECT;
+                       mouse_events: 0;
+                        description {
+                               color: 0 0 0 120;
+                               rel2 { to: "elm.text"; }
+                        }
+               }
+               part {
+                       name: "elm.text";
+                       type:  TEXT;
+                       mouse_events:  0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 54;
+                               max: 999999 54;
+                               fixed: 0 1;
+                               align: 0.5 0;
+                               text {
+                                       font:     FONT_ROM;
+                                       size:     28;
+                                       align:    0.5 0.5;
+                                       min: 1 1;
+                                       text: "Shooting mode";
+                               }
+                       }
+               }
+               part {
+                       name: "elm.swallow.box";
+                       type: SWALLOW;
+                       description {
+                               rel1 { to: "elm.text"; relative: 0 1; }
+                       }
+               }
+       }
+}
+
+//Item Layout
+group {
+       name: "camera/radio_icon_text_item";
+       script {
+               public disabled_v;
+       }
+       parts {
+               part {
+                       name: "seprator";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               min: 1 1;
+                               max: 999999 1;
+                               fixed: 0 1;
+                               color: 120 120 120 255;
+                               align: 0.5 0;
+                               rel1 { offset: 1 0; }
+                               rel2 { offset: -2 -1; }
+                       }
+               }
+               part {
+                       name: "item_bg";
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "clicked" 0.0;
+                               color: 0 0 0 120;
+                       }
+               }
+               part {
+                       name: "event_blocker";
+                       type: RECT;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name: "check_left_padding";
+                       type: SPACER;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 75;
+                               max: 15 75;
+                               align: 0 0;
+                               fixed: 1 1;
+                       }
+               }
+               part {
+                       name: "elm.swallow.radio";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 39 39;
+                               max: 39 39;
+                               fixed: 1 1;
+                               align: 0 0.5;
+                               rel1 { to:"check_left_padding"; relative: 1 0; }
+                       }
+               }
+               part {
+                       name: "icon_left_padding";
+                       type: SPACER;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 75;
+                               max: 1 75;
+                               align: 0 0;
+                               fixed: 1 1;
+                               rel1 { to_x: "elm.swallow.radio"; relative: 1 0; }
+                       }
+               }
+               part {
+                       name: "elm.swallow.icon";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 60 60;
+                               max: 60 60;
+                               align: 0 0.5;
+                               aspect: 1.0 1.0;
+                               rel1 { to:"icon_left_padding"; relative: 1 0; }
+                       }
+               }
+               part {
+                       name: "icon_right_padding";
+                       type: SPACER;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 20 75;
+                               max: 20 75;
+                               align: 0 0.5;
+                               fixed: 1 1;
+                               rel1 { to:"elm.swallow.icon"; relative: 1 0; }
+                       }
+               }
+               part {
+                       name: "elm.text";
+                       type:  TEXT;
+                       mouse_events:  0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 1 75;
+                               max: 999999 75;
+                               fixed: 0 1;
+                               align: 0.5 0.5;
+                               rel1 {relative: 1.0 0.0; to_x: "icon_right_padding";}
+                               rel2 {relative: 1.0 1.0; }
+                               color: 255 255 255 255;
+                               text {
+                                       font:     FONT_ROM;
+                                       size:     30;
+                                       align:    0.0 0.5;
+                                       min: 1 1;
+                               }
+                       }
+                       description {
+                               state: "clicked" 0.0;
+                               inherit: "default" 0.0;
+                               color: 255 255 255 255;
+                       }
+               }
+               part {
+                       name: "over1";
+                       type: RECT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       ignore_flags: ON_HOLD;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit:  "default" 0.0;
+                               visible: 0;
+                       }
+               }
+               part {
+                       name: "over2";
+                       type: RECT;
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 255 255 255 0;
+                       }
+                       description {
+                               state: "clicked" 0.0;
+                               color: 255 255 255 255;
+                       }
+               }
+       }
+       programs {
+               program {
+                       name:   "item_unclick3";
+                       signal: "mouse,up,1";
+                       source: "over1";
+                       action: SIGNAL_EMIT "elm,action,click" "";
+               }
+               program {
+                       name: "disable";
+                       signal: "elm,state,disabled";
+                       source: "elm";
+                       after: "disable_text";
+               }
+               program {
+                       name: "disable_text";
+                       script {
+                               set_state(PART:"elm.text", "disabled", 0.0);
+                               set_int( disabled_v, 1 );
+                       }
+               }
+               program {
+                       name: "enable";
+                       signal: "elm,state,enabled";
+                       source: "elm";
+                       after: "enable_text";
+               }
+               program {
+                       name: "enable_text";
+                       script {
+                               set_state(PART:"elm.text", "enabled", 0.0);
+                               set_int( disabled_v, 0 );
+                       }
+               }
+               program {
+                       name:   "button_click";
+                       signal: "mouse,down,1";
+                       source: "over2";
+                       script {
+                               if(!get_int( disabled_v)) {
+                                       set_state(PART:"elm.text", "clicked", 0.0);
+                                       set_state(PART:"item_bg", "clicked", 0.0);
+                               }
+                       }
+               }
+       }
+       program {
+               name:   "button_unclick";
+               signal: "mouse,up,1";
+               source: "over2";
+               script {
+                       if(!get_int(disabled_v)) {
+                               set_state(PART:"elm.text", "default", 0.0);
+                               set_state(PART:"item_bg", "default", 0.0);
+                       }
+               }
+       }
+}
+
+//Radio Button Style
+styles {
+       style {
+               name: "radio_label_textblock_style";
+               base: "font=Tizen:style=Medium font_size=21 align=left color=#ffffff wrap=char";
+               tag: "br" "\n";
+               tag: "hilight" "+ font=Tizen:style=Bold";
+               tag: "b" "+ font=Tizen:style=Bold";
+               tag: "whitecolor" "+ color=#ffffff";
+               tag: "tab" "\t";
+       }
+       style {
+               name: "radio_label_textblock_disabled_style";
+               base: "font=Tizen:style=Medium font_size=21 align=left color=#888888 color3=#000000 wrap=char";
+               tag: "br" "\n";
+               tag: "hilight" "+ font=Tizen:style=Bold";
+               tag: "b" "+ font=Tizen:style=Bold";
+               tag: "whitecolor" "+ color=#ffffff";
+               tag: "tab" "\t";
+       }
+}
+
+group {
+       name: "elm/radio/base/elm_demo_tizen/camera";
+       images {
+               image: "11_camera_menu_popup_radio_button_off.png" COMP;
+               image: "11_camera_menu_popup_radio_button_on.png" COMP;
+               image: "00_button_radio_focus.png" COMP;
+               image: "00_button_radio_dim.png" COMP;
+       }
+       parts {
+               part { name: "bg";
+                       mouse_events: 0;
+                       scale: 1;
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               rel1.offset: 0 0;
+                               rel2.relative: 0.0 1.0;
+                               rel2.offset: 0 0;
+                               fixed: 1 0;
+                               align: 0.0 0.5;
+                               min: 39 39;
+                               max: 39 39;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "radio";
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: "bg";
+                                       offset: 0 0;
+                               }
+                               rel2 {
+                                       to: "bg";
+                                       offset: 0 0;
+                               }
+                               visible: 1;
+                               color: 255 255 255 255;
+                               image.normal: "11_camera_menu_popup_radio_button_off.png";
+                       }
+                       description {
+                               state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               image.normal: "11_camera_menu_popup_radio_button_on.png";
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default" 0.0;
+                               image.normal: "11_camera_menu_popup_radio_button_on.png";
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               image.normal: "00_button_radio_dim.png";
+                       }
+                       description {
+                               state: "disabled_visible" 0.0;
+                               inherit: "default" 0.0;
+                               image.normal: "00_button_radio_dim.png";
+                       }
+               }
+               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";
+                               rel1.relative: 1.0 0.0;
+                               rel1.offset: 1 1;
+                               rel2.to_x: "bg";
+                               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: "radio_label_textblock_style";
+                                       min: 0 0;
+                               }
+                       }
+                       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 {
+                                       style: "radio_label_textblock_disabled_style";
+                                       min: 1 1;
+                               }
+                       }
+               }
+               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;
+                               color: 0 0 0 0;
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "click";
+                       signal: "mouse,up,1";
+                       source: "events";
+                       action: SIGNAL_EMIT "elm,action,radio,toggle" "";
+               }
+               program {
+                       name: "bg_normal";
+                       script {
+                               set_state(PART:"bg", "default", 0.0);
+                       }
+               }
+               program {
+                       name: "mouseout";
+                       signal: "mouse,out";
+                       source: "events";
+                       after: "bg_radio_normal";
+               }
+               program {
+                       name: "bg_radio_normal";
+                       script {
+                               new st[31];
+                               new Float:vl;
+                               get_state(PART:"radio", st, 30, vl);
+                               if (!strcmp(st, "pressed"))
+                                       set_state(PART:"radio", "default", 0.0);
+                               set_state(PART:"bg", "default", 0.0);
+                       }
+               }
+               program {
+                       name: "pressed";
+                       signal: "mouse,down,1";
+                       source: "events";
+                       script {
+                               new st[31];
+                               new Float:vl;
+                               get_state(PART:"radio", st, 30, vl);
+                               if (!strcmp(st, "default"))
+                                       set_state(PART:"radio", "pressed", 0.0);
+                       }
+               }
+               program {
+                       name: "radio_on";
+                       signal: "elm,state,radio,on";
+                       source: "elm";
+                       action:  STATE_SET "visible" 0.0;
+                       target: "radio";
+               }
+               program {
+                       name: "radio_off";
+                       signal: "elm,state,radio,off";
+                       source: "elm";
+                       action:  STATE_SET "default" 0.0;
+                       target: "radio";
+               }
+               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";
+                       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:"radio", st, 30, vl);
+                               if (!strcmp(st, "visible"))
+                                       set_state(PART:"radio", "disabled_visible", 0.0);
+                               else
+                                       set_state(PART:"radio", "disabled", 0.0);
+                       }
+               }
+               program {
+                       name: "enable";
+                       signal: "elm,state,enabled";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       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);
+
+                               get_state(PART:"elm.swallow.content", st, 30, vl);
+                               if (!strcmp(st, "disabled_visible"))
+                                       set_state(PART:"elm.swallow.content", "visible", 0.0);
+                               else
+                                       set_state(PART:"elm.swallow.content", "default", 0.0);
+
+                               get_state(PART:"radio", st, 30, vl);
+                               if (!strcmp(st, "disabled_visible"))
+                                       set_state(PART:"radio", "visible", 0.0);
+                               else
+                                       set_state(PART:"elm.swallow.content", "default", 0.0);
+                       }
+               }
+       }
+}
+
+//Ctxpopup Style
+#define CTXPOPUP_CAMERA_ARROW_SIZE 26 26
+///////////////////////////////////////////////////////////////////////////////
+group {
+       name: "elm/ctxpopup/base/elm_demo_tizen/camera";
+       images {
+               image: "imageeditor_border_left_top.png" COMP;
+               image: "imageeditor_border_right_top.png" COMP;
+               image: "imageeditor_border_left_bottom.png" COMP;
+               image: "imageeditor_border_right_bottom.png" COMP;
+       }
+       parts {
+               part {
+                       name: "ctxpopup_frame_left_top";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_right_top";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 1 0;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_left_bottom";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 0 1;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_right_bottom";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part { name: "arrow_area_left";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 1 0.5;
+                               rel1 {
+                                       relative: 0 1;
+                                       to_y: "ctxpopup_frame_left_top";
+                               }
+                               rel2 {
+                                       relative:0 0;
+                                       to:"ctxpopup_frame_left_bottom";
+                               }
+                       }
+               }
+               part { name: "arrow_area_right";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0 0.5;
+                               rel1 {
+                                       relative: 1 1;
+                                       to:"ctxpopup_frame_right_top";
+                               }
+                               rel2 {
+                                       relative: 1 0;
+                                       to_y: "ctxpopup_frame_right_bottom";
+                               }
+                       }
+               }
+               part { name: "arrow_area_up";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0.5 1;
+                               rel1 {
+                                       relative: 1 0;
+                                       to_x: "ctxpopup_frame_left_top";
+                               }
+                               rel2 {
+                                       relative: 0 0;
+                                       to:"ctxpopup_frame_right_top";
+                               }
+                       }
+               }
+               part { name: "arrow_area_down";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 {
+                                       relative: 1 1;
+                                       to:"ctxpopup_frame_left_bottom";
+                               }
+                               rel2 {
+                                       relative: 0 1;
+                                       to_x: "ctxpopup_frame_right_bottom";
+                               }
+                       }
+               }
+
+               part { name: "elm.swallow.arrow_up";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_up";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_down";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_down";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_left";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_left";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_right";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_right";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               color: 0 0 0 85;
+                               rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+                               rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+                       }
+               }
+
+               part {
+                       name: "elm.swallow.content";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+                               rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left_top";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_left_top.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right_top";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 1 0;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_right_top.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left_bottom";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 0 1;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_left_bottom.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right_bottom";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_right_bottom.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_top";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_top";  relative: 1 0;}
+                               rel2 {to:"ctxpopup_frame_right_top";  relative: 0 0.5;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_bottom";  relative: 1 0.5;}
+                               rel2 {to:"ctxpopup_frame_right_bottom";  relative: 0 1;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_top";  relative: 0 1;}
+                               rel2 {to:"ctxpopup_frame_left_bottom";  relative: 0.5 0;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_right_top";  relative: 0.5 1;}
+                               rel2 {to:"ctxpopup_frame_right_bottom";  relative: 1 0;}
+                       }
+               }
+               part { name: "access.outline";
+                       type: RECT;
+                       repeat_events: 1;
+                       description { state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1.to: "ctxpopup_frame_left_top";
+                               rel2.to: "ctxpopup_frame_right_bottom";
+                               color: 0 0 0 0;
+                       }
+               }
+       }
+}
+///////////////////////////////////////////////////////////////////////////////
+group { name: "elm/ctxpopup/arrow/elm_demo_tizen/camera";
+       images {
+               image: "imageeditor_left_arrow.png" COMP;
+               image: "imageeditor_right_arrow.png" COMP;
+               image: "imageeditor_top_arrow.png" COMP;
+               image: "imageeditor_bottom_arrow.png" COMP;
+       }
+       parts {
+               part {
+                       name: "ctxpopup_arrow";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               max: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               fixed: 1 1;
+                               visible: 0;
+                               align: 0.5 0.5;
+                       }
+                       description {
+                               state: "left" 0.0;
+                               min: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               max: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.0 0.5;
+                               image {
+                                       normal: "imageeditor_left_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "right" 0.0;
+                               min: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               max: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 1.0 0.5;
+                               image {
+                                       normal: "imageeditor_right_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "top" 0.0;
+                               min: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               max: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               image {
+                                       normal: "imageeditor_top_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "bottom" 0.0;
+                               min: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               max: CTXPOPUP_CAMERA_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.5 1.0;
+                               image {
+                                       normal: "imageeditor_bottom_arrow.png";
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "enable_left_arrow";
+                       signal: "elm,state,left";
+                       source: "elm";
+                       action: STATE_SET "left" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_right_arrow";
+                       signal: "elm,state,right";
+                       source: "elm";
+                       action: STATE_SET "right" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_top_arrow";
+                       signal: "elm,state,top";
+                       source: "elm";
+                       action: STATE_SET "top" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_bottom_arrow";
+                       signal: "elm,state,bottom";
+                       source: "elm";
+                       action: STATE_SET "bottom" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+       }
+}
diff --git a/live.viewer/dbox.app/data/groups/style_ctxpopup_imageeditor.edc b/live.viewer/dbox.app/data/groups/style_ctxpopup_imageeditor.edc
new file mode 100644 (file)
index 0000000..47da6e9
--- /dev/null
@@ -0,0 +1,664 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 CTXPOPUP_FRAME_CORNER_SIZE 6 6
+#define CTXPOPUP_BORDER_CORNER_SIZE 9 9
+#define CTXPOPUP_IE_CONTENT_WIDTH_MAX 720
+#define CTXPOPUP_IE_ARROW_SIZE 26 26
+#define CTXPOPUP_IE_ITEM_PADDING 22
+#define CTXPOPUP_IE_ITEM_HEIGHT 70
+#define CTXPOPUP_IE_FONT_COLOR 255 255 255 255
+#define CTXPOPUP_IE_CLICKED_FONT_COLOR 255 255 255 255
+#define CTXPOPUP_IE_SEPARATOR_COLOR 120 120 120 255
+#define CTXPOPUP_IE_ITEM_DISABLED_COLOR 0 0 0 120
+#define CTXPOPUP_IE_ITEM_DISABLED_COLOR_2 0 0 0 0
+///////////////////////////////////////////////////////////////////////////////
+group {
+       name: "elm/ctxpopup/base/elm_demo_tizen/imageeditor";
+       images {
+               image: "imageeditor_bg.png" COMP;
+               image: "imageeditor_border_left_top.png" COMP;
+               image: "imageeditor_border_right_top.png" COMP;
+               image: "imageeditor_border_left_bottom.png" COMP;
+               image: "imageeditor_border_right_bottom.png" COMP;
+       }
+       parts {
+               part {
+                       name: "ctxpopup_frame_left_top";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_right_top";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 1 0;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_left_bottom";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 0 1;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_frame_right_bottom";
+                       type: SPACER;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               min: CTXPOPUP_FRAME_CORNER_SIZE;
+                               max: CTXPOPUP_FRAME_CORNER_SIZE;
+                       }
+               }
+
+               part { name: "arrow_area_left";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 1 0.5;
+                               rel1 {
+                                       relative: 0 1;
+                                       to_y: "ctxpopup_frame_left_top";
+                               }
+                               rel2 {
+                                       relative:0 0;
+                                       to:"ctxpopup_frame_left_bottom";
+                               }
+                       }
+               }
+               part { name: "arrow_area_right";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0 0.5;
+                               rel1 {
+                                       relative: 1 1;
+                                       to:"ctxpopup_frame_right_top";
+                               }
+                               rel2 {
+                                       relative: 1 0;
+                                       to_y: "ctxpopup_frame_right_bottom";
+                               }
+                       }
+               }
+               part { name: "arrow_area_up";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0.5 1;
+                               rel1 {
+                                       relative: 1 0;
+                                       to_x: "ctxpopup_frame_left_top";
+                               }
+                               rel2 {
+                                       relative: 0 0;
+                                       to:"ctxpopup_frame_right_top";
+                               }
+                       }
+               }
+               part { name: "arrow_area_down";
+                       type: SPACER;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 {
+                                       relative: 1 1;
+                                       to:"ctxpopup_frame_left_bottom";
+                               }
+                               rel2 {
+                                       relative: 0 1;
+                                       to_x: "ctxpopup_frame_right_bottom";
+                               }
+                       }
+               }
+
+               part { name: "elm.swallow.arrow_up";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_up";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_down";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_down";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_left";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_left";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part { name: "elm.swallow.arrow_right";
+                       type: SWALLOW;
+                       mouse_events: 0;
+                       scale: 1;
+                       dragable {
+                               x: 1 1 0;
+                               y: 1 1 0;
+                               confine: "arrow_area_right";
+                       }
+                       description {
+                               state: "default" 0.0;
+                               min: 27 27;
+                               fixed: 1 1;
+                               visible: 1;
+                       }
+               }
+               part {
+                       name: "ctxpopup_frame";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               color: 0 0 0 85;
+                               rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+                               rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+                               }
+                       }
+
+               part {
+                       name: "elm.swallow.content";
+                       type: SWALLOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "ctxpopup_frame_left_top"; relative: 0.5 0.5;}
+                               rel2 {to: "ctxpopup_frame_right_bottom"; relative: 0.5 0.5;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left_top";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_left_top.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right_top";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 1 0;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_right_top.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left_bottom";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 0 1;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_left_bottom.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right_bottom";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               align: 1 1;
+                               min: CTXPOPUP_BORDER_CORNER_SIZE;
+                               max: CTXPOPUP_BORDER_CORNER_SIZE;
+                               image {
+                                       normal: "imageeditor_border_right_bottom.png";
+                               }
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_top";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_top";  relative: 1 0;}
+                               rel2 {to:"ctxpopup_frame_right_top";  relative: 0 0.5;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_bottom";  relative: 1 0.5;}
+                               rel2 {to:"ctxpopup_frame_right_bottom";  relative: 0 1;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_left_top";  relative: 0 1;}
+                               rel2 {to:"ctxpopup_frame_left_bottom";  relative: 0.5 0;}
+                       }
+               }
+
+               part {
+                       name: "ctxpopup_border_right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               align: 0 0;
+                               color: 222 222 222 255;
+                               rel1 {to:"ctxpopup_frame_right_top";  relative: 0.5 1;}
+                               rel2 {to:"ctxpopup_frame_right_bottom";  relative: 1 0;}
+                       }
+               }
+       }//parts
+}
+///////////////////////////////////////////////////////////////////////////////
+group { name: "elm/ctxpopup/arrow/elm_demo_tizen/imageeditor";
+       images {
+               image: "imageeditor_left_arrow.png" COMP;
+               image: "imageeditor_right_arrow.png" COMP;
+               image: "imageeditor_top_arrow.png" COMP;
+               image: "imageeditor_bottom_arrow.png" COMP;
+       }
+       parts {
+               part {
+                       name: "ctxpopup_arrow";
+                       type: IMAGE;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: CTXPOPUP_IE_ARROW_SIZE;
+                               max: CTXPOPUP_IE_ARROW_SIZE;
+                               fixed: 1 1;
+                               visible: 0;
+                               align: 0.5 0.5;
+                       }
+                       description {
+                               state: "left" 0.0;
+                               min: CTXPOPUP_IE_ARROW_SIZE;
+                               max: CTXPOPUP_IE_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.0 0.5;
+                               image {
+                                       normal: "imageeditor_left_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "right" 0.0;
+                               min: CTXPOPUP_IE_ARROW_SIZE;
+                               max: CTXPOPUP_IE_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 1.0 0.5;
+                               image {
+                                       normal: "imageeditor_right_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "top" 0.0;
+                               min: CTXPOPUP_IE_ARROW_SIZE;
+                               max: CTXPOPUP_IE_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.5 0.0;
+                               image {
+                                       normal: "imageeditor_top_arrow.png";
+                               }
+                       }
+                       description {
+                               state: "bottom" 0.0;
+                               min: CTXPOPUP_IE_ARROW_SIZE;
+                               max: CTXPOPUP_IE_ARROW_SIZE;
+                               fixed: 1 1;
+                               align: 0.5 1.0;
+                               image {
+                                       normal: "imageeditor_bottom_arrow.png";
+                               }
+                       }
+               }
+       }
+       programs {
+               program {
+                       name: "enable_left_arrow";
+                       signal: "elm,state,left";
+                       source: "elm";
+                       action: STATE_SET "left" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_right_arrow";
+                       signal: "elm,state,right";
+                       source: "elm";
+                       action: STATE_SET "right" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_top_arrow";
+                       signal: "elm,state,top";
+                       source: "elm";
+                       action: STATE_SET "top" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+               program {
+                       name: "enable_bottom_arrow";
+                       signal: "elm,state,bottom";
+                       source: "elm";
+                       action: STATE_SET "bottom" 0.0;
+                       target: "ctxpopup_arrow";
+               }
+       }
+}
+///////////////////////////////////////////////////////////////////////////////
+       group {
+               name: "elm/ctxpopup/text_style_item/elm_demo_tizen/imageeditor";
+               parts {
+                       part {
+                               name: "event_blocker";
+                               type: RECT;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "bg";
+                               mouse_events: 0;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "clicked" 0.0;
+                                       visible: 1;
+                                       color: 0 0 0 125;
+                               }
+                       }
+                       part {
+                               name: "separator";
+                               mouse_events: 0;
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: CTXPOPUP_IE_SEPARATOR_COLOR;
+                                       align: 0.5 0;
+                                       min: 1 0;
+                                       max: 1 999999;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "horizontal" 0.0;
+                                       color: CTXPOPUP_IE_SEPARATOR_COLOR;
+                                       align: 0 0.5;
+                                       min: 1 0;
+                                       max: 1 999999;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "vertical" 0.0;
+                                       color: CTXPOPUP_IE_SEPARATOR_COLOR;
+                                       align: 0.5 0;
+                                       min: 0 1;
+                                       max: 999999 1;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "left_padding";
+                type: SPACER;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 10 CTXPOPUP_IE_ITEM_HEIGHT;
+                                       max: 10 CTXPOPUP_IE_ITEM_HEIGHT;
+                                       align: 0 0.5;
+                                       fixed: 1 1;
+                               }
+                       }
+                       part {
+                               name: "disclip";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       visible: 1;
+                                       color: CTXPOPUP_IE_ITEM_DISABLED_COLOR;
+                               }
+                       }
+                       part {
+                               name: "elm.text";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 1 CTXPOPUP_IE_ITEM_HEIGHT;
+                                       max: (CTXPOPUP_IE_CONTENT_WIDTH_MAX-2*CTXPOPUP_IE_ITEM_PADDING) CTXPOPUP_IE_ITEM_HEIGHT;
+                                       fixed: 0 1;
+                                       align: 0.5 0.5;
+                                       rel1 {relative: 1.0 0.0; to: "left_padding";}
+                                       rel2 {relative: 0.0 1.0; to: "right_padding";}
+                                       color: CTXPOPUP_IE_FONT_COLOR;
+                                       text {
+                                               font: "Tizen:style=Roman";
+                                               size: 36;
+                                               align: 0.0 0.5;
+                                               min: 1 1;
+                                       }
+                               }
+                               description {
+                                       state: "clicked" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: CTXPOPUP_IE_CLICKED_FONT_COLOR;
+                               }
+                       }
+                       part {
+                               name: "right_padding";
+                type: SPACER;
+                               scale: 1;
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 10 CTXPOPUP_IE_ITEM_HEIGHT;
+                                       max: 10 CTXPOPUP_IE_ITEM_HEIGHT;
+                                       fixed: 1 0;
+                                       align: 1.0 0.5;
+                       }
+                       }
+                       part {
+                               name: "over1";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               ignore_flags: ON_HOLD;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "over2";
+                               type: RECT;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part {
+                               name: "disclip_2";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       visible: 1;
+                                       color: CTXPOPUP_IE_ITEM_DISABLED_COLOR_2;
+                               }
+                       }
+               }
+               programs {
+                       program {
+                               name: "item_unclick";
+                               signal: "mouse,up,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: "disclip";
+                               target: "disclip_2";
+                       }
+                       program {
+                               name: "enable";
+                               signal: "elm,state,enabled";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "disclip";
+                       }
+                       program {
+                               name: "default";
+                               signal: "elm,state,default";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"separator", "default", 0.0);
+                               }
+                       }
+                       program {
+                               name: "vertical";
+                               signal: "elm,state,vertical";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"separator", "vertical", 0.0);
+                               }
+                       }
+                       program {
+                               name: "horizontal";
+                               signal: "elm,state,horizontal";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"separator", "horizontal", 0.0);
+                               }
+                       }
+                       program {
+                               name: "item_click2";
+                               signal: "mouse,down,1";
+                               source: "over2";
+                               script {
+                                       set_state(PART:"elm.text", "clicked", 0.0);
+                                       set_state(PART:"bg", "clicked", 0.0);
+                               }
+                       }
+                       program {
+                               name: "item_unclick2";
+                               signal: "mouse,up,1";
+                               source: "over2";
+                               script {
+                                       set_state(PART:"elm.text", "default", 0.0);
+                                       set_state(PART:"bg", "default", 0.0);
+                               }
+                       }
+               }
+       }
diff --git a/live.viewer/dbox.app/data/groups/style_navibar.edc b/live.viewer/dbox.app/data/groups/style_navibar.edc
new file mode 100644 (file)
index 0000000..52d6463
--- /dev/null
@@ -0,0 +1,611 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 PADDING                5
+#define ITEM_HEIGHT    50
+#define ITEM_WIDTH     120
+#define MAX_ITEM_WIDTH 200
+#define NAVI_BAR_EXTENDED_HEIGHT 93
+#define NAVI_BAR_EXTENDED_FNBTN_TOP_HEIGHT 110
+#define NAVI_BAR_H 67
+
+#define BUTTON_WIDTH 170.0
+#define BUTTON_HEIGHT 44.0
+#define BUTTON_GAP 22.0
+
+group {
+       name: "elmdemo-test/btn-ext2";
+       parts{
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               color: 246 245 237 255;
+                       }
+               }
+               part {
+                       name: "top_padding";
+                       type: RECT;
+                       scale: 1; //allow scaling
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP; //minimum size for gap filler
+                               fixed: 0 1;
+                               rel1 { relative: 0 0; }
+                               rel2 { relative: 1 0; }
+                               color:  0 0 0 0;
+                               align: 0 0;
+                       }
+               }
+               part {
+                       name: "btn_reveal";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "top_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "top_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_reveal_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_reveal"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_reveal"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_add";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_reveal_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_reveal_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_add_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_add"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_add"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_remove";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_add_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_add_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_remove_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_remove"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_remove"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_warning";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_remove_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_remove_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_warning_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_warning"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_warning"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_info";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_warning_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_warning_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_info_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_info"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_info"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_icon_only";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_info_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_info_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_icon_only_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_icon_only"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_icon_only"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_dark";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_icon_only_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_icon_only_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_dark_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_dark"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_dark"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_default";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_dark_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_dark_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_default_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_default"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_default"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_center";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               max: 300 BUTTON_HEIGHT;
+                               rel1 { relative: 0.0 1.0; to_y: "btn_default_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_center_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_center"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_center"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style1";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_center_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_center_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style1_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_style1"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_style1"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style2";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_style1_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_style1_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style2_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_style2"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_style2"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style3";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_style2_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_style2_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_style3_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_style3"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_style3"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_sweep";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_style3_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_style3_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_sweep_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_sweep"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_sweep"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_title";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_sweep_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_sweep_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_title_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_title"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_title"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_contact";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_title_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_title_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_contact_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_contact"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_contact"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_more";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               state: "default" 0.0;
+                               rel1 { relative: 0.5 1.0; to_y: "btn_text_only_contact_bottom_padding"; }
+                               rel2 { relative: 0.5 1.0; to_y: "btn_text_only_contact_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_more_bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : BUTTON_WIDTH BUTTON_GAP;
+                               max : BUTTON_WIDTH BUTTON_GAP;
+                               fixed: 1 1;
+                               align: 0.5 0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_more"; }
+                               rel2 { relative: 1 1.0; to_y: "btn_text_only_more"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {
+                       name: "btn_text_only_multiline";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               min: BUTTON_WIDTH 60;
+                               max: BUTTON_WIDTH 60;
+                               state: "default" 0.0;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_more_bottom_padding"; }
+                               align: 0.5 0;
+                       }
+               }
+               part {
+                       name: "bottom_padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min : 0 BUTTON_GAP;
+                               rel1 { relative: 0 1.0; to_y: "btn_text_only_multiline"; }
+                               rel2 { relative: 1 1.0;}
+                               color: 0 0 0 0;
+                               align: 0.5 1.0;
+                       }
+               }
+       }//end parts
+#undef BUTTON_WIDTH
+#undef BUTTON_HEIGHT
+#undef BUTTON_GAP
+} //end group
+
+
+group { name: "navibar_effect_layout";
+       parts {
+               part {
+                       name: "bg";
+                       type: RECT;
+                       description {
+                               color: 246 245 237 255;
+                       }
+               }
+               part {
+                       name: "elm.swallow.content";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                       }
+               }
+       }
+}
+
+
+#define GENLIST_PART_BG_COLOR_INC 246 245 237 255
+#define GENLIST_PART_TEXT_COLOR_INC 0 0 0 255
+#define GENLIST_PART_TEXT_SELECTED_COLOR_INC 225 225 225 255
+#define GENLIST_PART_SUB_TEXT_COLOR_INC 0 0 0 255
+#define GENLIST_PART_BOTTOM_LINE_INC 212 212 212 255
+#define GENLIST_GROUP_PART_TEXT_COLOR_INC 50 50 50 255
+
+#define BEAT_GENLIST_PART_LIST_PICKER_BOTTOM_LINE \
+         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: 104 97 92 255; \
+               rel1 { \
+                  relative: 0.0 1.0; \
+                  offset: 0 -1; \
+               } \
+            } \
+         }
+
+
+#define BEAT_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 BEAT_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: GENLIST_PART_BG_COLOR_INC; \
+            } \
+         }
+
+
+#define BEAT_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; \
+            } \
+         }
\ No newline at end of file
diff --git a/live.viewer/dbox.app/data/groups/style_popup.edc b/live.viewer/dbox.app/data/groups/style_popup.edc
new file mode 100644 (file)
index 0000000..6bcac08
--- /dev/null
@@ -0,0 +1,1536 @@
+/*\r
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ *  Licensed under the Apache License, Version 2.0 (the "License");\r
+ *  you may not use this file except in compliance with the License.\r
+ *  You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ *  Unless required by applicable law or agreed to in writing, software\r
+ *  distributed under the License is distributed on an "AS IS" BASIS,\r
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ *  See the License for the specific language governing permissions and\r
+ *  limitations under the License.\r
+ *\r
+ */\r
+\r
+#define DEMO_POPUP_CONTENT_MINSTYLE_CONTENT_DEFAULT_MIN_INC 0 0\r
+#define DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC 0 408\r
+#define DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 532\r
+#define DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_BG_MIN 0 223\r
+#define DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_TITLE_HEIGHT_MIN_MAX 62\r
+#define DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_FIELD_MIN_MAX 0 66\r
+\r
+group { name: "elm/button/base/popup_button/app_style";\r
+               images {\r
+                       image: "00_button_01_normal.png" COMP;\r
+                       image: "00_button_01_press.png" COMP;\r
+                       image: "00_button_01_focus.png" COMP;\r
+               }\r
+               parts {\r
+                       part { name: "button_image";\r
+                               mouse_events: 1;\r
+                               scale: 1;\r
+                               description { state: "default" 0.0;\r
+                                       min: 16 70;\r
+                                       image {\r
+                                               normal: "00_button_01_normal.png";\r
+                                               border: 7 7 7 7;\r
+                                       }\r
+                                       image.middle: SOLID;\r
+                               }\r
+                               description { state: "clicked" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       image.normal: "00_button_01_press.png";\r
+                                       image.middle: SOLID;\r
+                               }\r
+                               description { state: "disabled" 0.0;\r
+                                       inherit:  "default" 0.0;\r
+                               }\r
+                               description { state: "focused" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       image.normal: "00_button_01_focus.png";\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "padding_left";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0;\r
+                                       align: 0.0 0.0;\r
+                                       rel1.relative: 0.0 0.0;\r
+                                       rel2.relative: 0.0 1.0;\r
+                                       min: 5 5;\r
+                                       fixed: 1 0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "padding_right";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0;\r
+                                       align: 1.0 0.0;\r
+                                       rel1.relative: 1.0 0.0;\r
+                                       rel2.relative: 1.0 1.0;\r
+                                       min: 5 5;\r
+                                       fixed: 1 0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "padding_top";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0;\r
+                                       align: 0.0 0.0;\r
+                                       rel1.relative: 0.0 0.0;\r
+                                       rel2.relative: 1.0 0.0;\r
+                                       min: 5 5;\r
+                                       fixed: 0 1;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "padding_bottom";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0;\r
+                                       align: 1.0 1.0;\r
+                                       rel1.relative: 0.0 1.0;\r
+                                       rel2.relative: 1.0 1.0;\r
+                                       min: 5 5;\r
+                                       fixed: 0 1;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "icon_rect";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0;\r
+                                       visible: 1;\r
+                                       min: 0 40;\r
+                                       fixed: 1 0;\r
+                                       rel1 {relative: 0.0 1.0; to_x: "elm.swallow.content"; to_y: "padding_top"; }\r
+                                       rel2 {relative: 1.0 0.0; to_x: "elm.swallow.content"; to_y: "padding_bottom"; }\r
+                                       align: 0.0 0.5;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part {\r
+                               name: "padding_icon_text";\r
+                               type: RECT;\r
+                               scale: 1;\r
+                               mouse_events: 0;\r
+                               description { state: "default" 0.0; //when only icon or no icon is there\r
+                                       align: 0.0 0.0;\r
+                                       rel1 { relative: 1.0 0.0; to: "icon_rect"; }\r
+                                       rel2 { relative: 1.0 1.0; to: "icon_rect"; }\r
+                                       fixed: 1 0;\r
+                                       min: 0 0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                               description { state: "icononly" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                               }\r
+                               description { state: "visible" 0.0; //when icon is visible\r
+                                       align: 0.0 0.0;\r
+                                       rel1 { relative: 1.0 0.0; to: "icon_rect"; }\r
+                                       rel2 { relative: 1.0 1.0; to: "icon_rect"; }\r
+                                       fixed: 1 0;\r
+                                       min: 5 0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                       }\r
+                       part { name: "elm.swallow.content";\r
+                               type: SWALLOW;\r
+                               scale: 1;\r
+                               description { state: "default" 0.0;\r
+                                       visible: 0;\r
+                                       align: 0.0 0.5;\r
+                                       rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }\r
+                                       rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }\r
+                                       fixed: 1 0;\r
+                               }\r
+                               description { state: "visible" 0.0;\r
+                                       fixed: 1 0;\r
+                                       visible: 1;\r
+                                       align: 0.0 0.5;\r
+                                       rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }\r
+                                       rel2 {relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }\r
+                                       aspect: 1.0 1.0;\r
+                                       aspect_preference: VERTICAL;\r
+                               }\r
+                               description { state: "icononly" 0.0;;\r
+                                       visible: 1;\r
+                                       min: 60 60;\r
+                                       rel1 {relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }\r
+                                       rel2 {relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; }\r
+                                       align: 0.5 0.5;\r
+                                       aspect: 1.0 1.0;\r
+                                       aspect_preference: VERTICAL;\r
+                               }\r
+                       }\r
+                       part { name: "elm.text";\r
+                               type:          TEXT;\r
+                               effect:        SOFT_SHADOW;\r
+                               mouse_events:  0;\r
+                               scale: 1;\r
+                               description { state: "default" 0.0;\r
+                                       visible: 0;\r
+                                       rel1 { relative: 1.0 1.0; to_x: "padding_icon_text"; to_y: "padding_top"; }\r
+                                       rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y:"padding_bottom"; }\r
+                                       align: 0.5 0.5;\r
+                                       color: 27 26 24 255;\r
+                                       color2: 255 255 255 255;\r
+                                       color3: 255 255 255 255;\r
+                                       text {\r
+                                               font: FONT_MED;\r
+                                               size: 34;\r
+                                               min:  0 0;\r
+                                               align: 0.5 0.5;\r
+                                               max: 1 0;\r
+                                       }\r
+                               }\r
+                               description { state: "visible" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       visible: 1;\r
+                                       min: 90 60;\r
+                               }\r
+                               description { state: "clicked" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       visible: 1;\r
+                                       min: 0 0;\r
+                                       color: 255 255 255 255;\r
+                                       color2: 0 0 0 102;\r
+                                       color3: 0 0 0 255;\r
+                               }\r
+                               description { state: "disabled" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       color: 0 0 0 128;\r
+                                       color3: 0 0 0 0;\r
+                               }\r
+                               description { state: "disabled_visible" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       color: 0 0 0 128;\r
+                                       color3: 0 0 0 0;\r
+                                       visible: 1;\r
+                               }\r
+                               description { state: "focused" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       visible: 1;\r
+                                       min: 0 0;\r
+                                       color: 255 255 255 255;\r
+                                       color2: 0 0 0 102;\r
+                                       color3: 0 0 0 255;\r
+                               }\r
+                       }\r
+                       part { name: "over2";\r
+                               type: RECT;\r
+                               mouse_events: 1;\r
+                               repeat_events: 1;\r
+                               ignore_flags: ON_HOLD;\r
+                               description { state: "default" 0.0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                               description { state: "disabled" 0.0;\r
+                                       inherit:  "default" 0.0;\r
+                                       visible: 0;\r
+                               }\r
+                       }\r
+                       part { name: "over3";\r
+                               type: RECT;\r
+                               mouse_events: 1;\r
+                               repeat_events: 1;\r
+                               description { state: "default" 0.0;\r
+                                       color: 0 0 0 0;\r
+                               }\r
+                               description { state: "clicked" 0.0;\r
+                                       inherit:  "default" 0.0;\r
+                                       visible: 1;\r
+                               }\r
+                       }\r
+                       part { name: "disabler";\r
+                               type: RECT;\r
+                               description { state: "default" 0.0;\r
+                                       color: 0 0 0 0;\r
+                                       visible: 0;\r
+                               }\r
+                               description { state: "disabled" 0.0;\r
+                                       inherit: "default" 0.0;\r
+                                       visible: 1;\r
+                               }\r
+                       }\r
+               }\r
+               programs {\r
+                       program { name: "button_click";\r
+                               signal: "mouse,down,1";\r
+                               source: "over2";\r
+                               action: SIGNAL_EMIT "elm,action,press" "";\r
+                               after: "button_click_anim";\r
+                       }\r
+                       program { name: "button_click_anim";\r
+                               action: STATE_SET "clicked" 0.0;\r
+                               target: "button_image";\r
+                               after: "text_clicked";\r
+                       }\r
+                       program { name: "text_clicked";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (!strcmp(st, "visible"))\r
+                                               set_state(PART:"elm.text", "clicked", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "button_unclick";\r
+                               signal: "mouse,up,1";\r
+                               source: "over2";\r
+                               action: SIGNAL_EMIT "elm,action,unpress" "";\r
+                               after: "button_unclick_anim";\r
+                       }\r
+                       program { name: "button_unclick_anim";\r
+                               action: STATE_SET "default" 0.0;\r
+                               target: "button_image";\r
+                               after: "text_unclicked";\r
+                       }\r
+                       program { name: "text_unclicked";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       new st1[31];\r
+                                       new Float:vl1;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       get_state(PART:"elm.swallow.content", st1, 30, vl1);\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (((!strcmp(st, "focused"))||(!strcmp(st, "clicked")) ) && (strcmp(st1, "icononly")))\r
+                                               set_state(PART:"elm.text", "visible", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "button_mouseout_clicked";\r
+                               signal: "mouse,out";\r
+                               source: "over2";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (!strcmp(st, "clicked"))\r
+                                               set_state(PART:"elm.text", "visible", 0.0);\r
+                                       set_state(PART:"button_image", "default", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "button_click2";\r
+                               signal: "mouse,down,1";\r
+                               source: "over3";\r
+                               action: STATE_SET "clicked" 0.0;\r
+                               target: "over3";\r
+                       }\r
+                       program { name: "button_unclick2";\r
+                               signal: "mouse,up,1";\r
+                               source: "over3";\r
+                               action: STATE_SET "default" 0.0;\r
+                               target: "over3";\r
+                       }\r
+                       program { name: "button_unclick3";\r
+                               signal: "mouse,up,1";\r
+                               source: "over2";\r
+                               action: SIGNAL_EMIT "elm,action,click" "";\r
+                       }\r
+                       program { name: "text_show";\r
+                               signal: "elm,state,text,visible";\r
+                               source: "elm";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.swallow.content", st, 30, vl);\r
+                                       if (!strcmp(st, "icononly"))\r
+                                       {\r
+                                               set_state(PART:"elm.swallow.content", "visible", 0.0);\r
+                                               set_state(PART:"padding_icon_text", "visible", 0.0);\r
+                                       }\r
+                                       set_state(PART:"elm.text", "visible", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "text_hide";\r
+                               signal: "elm,state,text,hidden";\r
+                               source: "elm";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.swallow.content", st, 30, vl);\r
+                                       if (!strcmp(st, "visible"))\r
+                                       {\r
+                                               set_state(PART:"elm.swallow.content", "icononly", 0.0);\r
+                                               set_state(PART:"padding_icon_text", "icononly", 0.0);\r
+                                       }\r
+                                       set_state(PART:"elm.text", "default", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "icon_show";\r
+                               signal: "elm,state,icon,visible";\r
+                               source: "elm";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (!strcmp(st, "visible"))\r
+                                       {\r
+                                               set_state(PART:"elm.swallow.content", "visible", 0.0);\r
+                                               set_state(PART:"padding_icon_text", "visible", 0.0);\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               set_state(PART:"elm.swallow.content", "icononly", 0.0);\r
+                                               set_state(PART:"padding_icon_text", "icononly", 0.0);\r
+                                       }\r
+                               }\r
+                       }\r
+                       program { name: "icon_hide";\r
+                               signal: "elm,state,icon,hidden";\r
+                               source: "elm";\r
+                               action:  STATE_SET "default" 0.0;\r
+                               target: "elm.swallow.content";\r
+                       }\r
+                       program { name: "disable";\r
+                               signal: "elm,state,disabled";\r
+                               source: "elm";\r
+                               action: STATE_SET "disabled" 0.0;\r
+                               target: "button_image";\r
+                               target: "over2";\r
+                               target: "disabler";\r
+                               after: "disable_text";\r
+                       }\r
+                       program { name: "disable_text";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (!strcmp(st, "visible"))\r
+                                               set_state(PART:"elm.text", "disabled_visible", 0.0);\r
+                                       else\r
+                                               set_state(PART:"elm.text", "disabled", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "enable";\r
+                               signal: "elm,state,enabled";\r
+                               source: "elm";\r
+                               action: STATE_SET "default" 0.0;\r
+                               target: "button_image";\r
+                               target: "over2";\r
+                               target: "disabler";\r
+                               after: "enable_text";\r
+                       }\r
+                       program { name: "enable_text";\r
+                               script {\r
+                                       new st[31];\r
+                                       new Float:vl;\r
+                                       get_state(PART:"elm.text", st, 30, vl);\r
+                                       if (!strcmp(st, "disabled_visible"))\r
+                                               set_state(PART:"elm.text", "visible", 0.0);\r
+                                       else\r
+                                               set_state(PART:"elm.text", "default", 0.0);\r
+                               }\r
+                       }\r
+                       program { name: "focused";\r
+                               signal: "elm,action,focus";\r
+                               source: "elm";\r
+                               action: STATE_SET "focused" 0.0;\r
+                               target: "button_image";\r
+                               target: "elm.text";\r
+                       }\r
+                       program { name: "unfocused";\r
+                               signal: "elm,action,unfocus";\r
+                               source: "elm";\r
+                               action: STATE_SET "default" 0.0;\r
+                               target: "button_image";\r
+                               after: "unfocus_text";\r
+                       }\r
+                       program { name: "unfocus_text";\r
+                               action: STATE_SET "visible" 0.0;\r
+                               target: "elm.text";\r
+                       }\r
+               }\r
+       }\r
+\r
+group { name: "elm/label/base/popup_description/app_style";\r
+   styles\r
+     {\r
+       style { name: "popup_desc_style_char_wrap";\r
+          base: "font="FONT_ROM" font_size=32 align=center color=#ffffff wrap=word";\r
+          tag:  "br" "\n";\r
+          tag:  "hilight" "+ font="FONT_ROM":style=Bold";\r
+          tag:  "b" "+ font="FONT_ROM":style=Bold";\r
+          tag:  "whitecolor" "+ color=#ffffff";\r
+          tag:  "tab" "\t";\r
+       }\r
+     }\r
+   parts {\r
+      part { name: "left_padding";\r
+        type: RECT;\r
+        scale: 1;\r
+        description { state: "default" 0.0;\r
+           fixed: 1 0;\r
+           visible: 0;\r
+           align: 0.0 0.5;\r
+           min: 10 0;\r
+           rel1 {\r
+              relative: 0.0 0.0;\r
+           }\r
+           rel2 {\r
+              relative: 0.0 1.0;\r
+           }\r
+        }\r
+      }\r
+      part { name: "elm.text";\r
+        type: TEXTBLOCK;\r
+        mouse_events: 0;\r
+        effect: SHADOW;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           align: 0.0 0.0;\r
+           fixed: 1 0;\r
+           text {\r
+              style: "popup_desc_style";\r
+              min: 1 1;\r
+           }\r
+           rel1 {\r
+              relative: 1.0 0.0;\r
+              to: left_padding;\r
+           }\r
+           rel2 {\r
+              relative: 1.0 1.0;\r
+              to: left_padding;\r
+           }\r
+        }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/label/base_wrap/popup_description/app_style";\r
+   parts {\r
+      part { name: "left_padding";\r
+        type: RECT;\r
+        scale: 1;\r
+        description { state: "default" 0.0;\r
+           fixed: 1 0;\r
+           visible: 0;\r
+           align: 0.0 0.5;\r
+           min: 10 0;\r
+           rel1 {\r
+              relative: 0 0;\r
+           }\r
+           rel2 {\r
+              relative: 0 1;\r
+           }\r
+        }\r
+      }\r
+      part { name: "elm.text";\r
+        type: TEXTBLOCK;\r
+        mouse_events: 0;\r
+        effect: SHADOW;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           align: 0.0 0.0;\r
+           text {\r
+              style: "popup_desc_style_char_wrap";\r
+              min: 0 1;\r
+           }\r
+           rel1 {\r
+              relative: 1.0 0.0;\r
+              to: left_padding;\r
+           }\r
+        }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/popup/base/app_style";\r
+   parts {\r
+      images {\r
+        image: "00_popup_title_bg.png" COMP;\r
+        image: "00_popup_bottom_bg.png" COMP;\r
+        image: "00_popup_bg.png" COMP;\r
+       }\r
+      styles\r
+     {\r
+       style { name: "popup_title_style";\r
+          base: "font="FONT_MED" font_size=34 align=center color=#ffffff wrap=word";\r
+          tag:  "br" "\n";\r
+          tag:  "hilight" "+ font="FONT_MED":style=Bold";\r
+          tag:  "b" "+ font="FONT_MED":style=Bold";\r
+          tag:  "whitecolor" "+ color=#ffffff";\r
+          tag:  "tab" "\t";\r
+       }\r
+     }\r
+      part { name: "base";\r
+        type: RECT;\r
+        scale : 1;\r
+        mouse_events: 0;\r
+        repeat_events: 1;\r
+        description { state: "default" 0.0;\r
+           min: 448 0;\r
+           max: 448 730;\r
+           color: 0 0 0 0;\r
+           rel1.relative: 0.0 0.0;\r
+           rel2.relative: 1.0 1.0;\r
+           align: 0.0 0.0;\r
+        }\r
+      }\r
+     part { name: "background";\r
+       scale : 1;\r
+       mouse_events: 0;\r
+       description { state: "default" 0.0;\r
+          rel1.to: "base";\r
+          rel2.to: "base";\r
+          image {\r
+             normal: "00_popup_bg.png";\r
+             border: 16 16 15 29;\r
+             middle: DEFAULT;\r
+             border_scale: 0;\r
+          }\r
+       }\r
+     }\r
+      part { name: "elm.rect.title";\r
+        type: IMAGE;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           min: 434 70;\r
+           fixed : 1 1;\r
+           align: 0.5 0.0;\r
+           visible: 0;\r
+           image.normal: "00_popup_title_bg.png";\r
+           image.border: 9 9 9 0;\r
+           rel1 {\r
+              relative: 0.5 0.0;\r
+              to: "base";offset: 1 1;\r
+           }\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "base";offset: -2 -2;\r
+           }\r
+        }\r
+        description { state: "show_title" 0.0;\r
+           inherit: "default" 0.0;\r
+           visible: 1;\r
+        }\r
+      }\r
+      part { name: "elm.swallow.title.icon";\r
+        type: SWALLOW;\r
+        scale: 1;\r
+        description { state: "default" 0.0;\r
+           min: 48 48;\r
+           max: 48 48;\r
+           fixed: 1 1;\r
+           align: 0 0.5;\r
+           rel1 {\r
+              to: "elm.rect.title";\r
+              relative: 0.0 0.5;\r
+           }\r
+           rel2 {\r
+              to: "elm.rect.title";\r
+              relative: 1.0 0.5;\r
+           }\r
+           visible: 0;\r
+        }\r
+        description { state: "show_title_icon" 0.0;\r
+           inherit: "default" 0.0;\r
+           visible: 1;\r
+        }\r
+      }\r
+        part {\r
+                       name: "elm.swallow.title";\r
+                       type: TEXTBLOCK;\r
+                       effect: SHADOW;\r
+                       scale:1;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               text\r
+                     {\r
+                                       style: "popup_title_style";\r
+                                       min: 0 0;\r
+                                       max: 0 1;\r
+                     }\r
+                   visible:0;\r
+                       color2: 0 0 0 255;\r
+                               rel1 { relative: 0.0 0.0; to: "elm.rect.title"; }\r
+                               rel2 { relative: 1.0 1.0; to: "elm.rect.title"; }\r
+                               align: 0.5 0.5;\r
+                       }\r
+                       description { state: "show_title" 0.0;\r
+                               inherit: "default" 0.0;\r
+                               visible: 1;\r
+                       }\r
+                       description { state: "show_title_icon" 0.0;\r
+                               inherit: "default" 0.0;\r
+                               rel1 {\r
+                                       to: "elm.rect.title";\r
+                                       relative: 0.5 0.5;\r
+                               }\r
+                               visible: 1;\r
+                       }\r
+               }\r
+      part { name: "elm.swallow.content";\r
+        type: SWALLOW;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           min: 426 0;\r
+           align: 0.5 0.5;\r
+           fixed: 1 0;\r
+           rel1 {\r
+              relative: 0.5 0.0;\r
+              to: "base";\r
+           }\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "pad_b_button";\r
+           }\r
+        }\r
+        description { state: "show_title" 0.0;\r
+           inherit: "default" 0.0;\r
+           rel1 {\r
+              relative: 0.5 1.0;\r
+              to: "elm.rect.title";\r
+           }\r
+        }\r
+        description { state: "show_button_area" 0.0;\r
+           inherit: "default" 0.0;\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "elm.swallow.buttonArea.Background";\r
+           }\r
+        }\r
+        description { state: "show_button_title_area" 0.0;\r
+           inherit: "default" 0.0;\r
+           rel1 {\r
+              relative: 0.5 1.0;\r
+              to: "elm.rect.title";\r
+           }\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "elm.swallow.buttonArea.Background";\r
+           }\r
+        }\r
+      }\r
+      part { name: "elm.swallow.buttonArea.Background";\r
+        type: IMAGE;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           min: 440 90;\r
+           fixed : 1 1;\r
+           align: 0.5 1.0;\r
+           visible: 0;\r
+           image.normal: "00_popup_bottom_bg.png";\r
+           image.border: 9 9 7 10;\r
+           rel1 {\r
+              relative: 0.5 0.0;\r
+              to: "pad_b_button";\r
+           }\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "pad_b_button";\r
+           }\r
+        }\r
+        description { state: "show_button_area" 0.0;\r
+           inherit: "default" 0.0;\r
+           visible: 1;\r
+        }\r
+       }\r
+      part { name: "elm.swallow.buttonArea";\r
+        type: SWALLOW;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           min: 224 70;\r
+           max: 444 70;\r
+           fixed : 1 1;\r
+           align: 0.5 0.5;\r
+           visible: 0;\r
+           rel1 {\r
+              relative: 0.0 0.0;\r
+              to: "elm.swallow.buttonArea.Background";\r
+           }\r
+           rel2 {\r
+              relative: 1.0 1.0;\r
+              to: "elm.swallow.buttonArea.Background";\r
+           }\r
+        }\r
+        description { state: "show_button_area" 0.0;\r
+           inherit: "default" 0.0;\r
+           visible: 1;\r
+        }\r
+      }\r
+      part { name: "pad_b_button";\r
+        type: RECT;\r
+        scale : 1;\r
+        mouse_events: 0;\r
+        repeat_events: 1;\r
+        description { state: "default" 0.0;\r
+           align: 0.5 1.0;\r
+           min: 0 15;\r
+           fixed: 0 1;\r
+           color: 0 0 0 0;\r
+           rel1 {\r
+              relative: 0.0 1.0;\r
+              to: "base";\r
+           }\r
+           rel2 {\r
+              relative: 1.0 1.0;\r
+              to: "base";\r
+           }\r
+        }\r
+      }\r
+   }\r
+   programs {\r
+      program { name: show_title;\r
+        signal: "elm,state,title,visible";\r
+        source: "elm";\r
+        action: STATE_SET "show_title" 0.0;\r
+        target: "elm.swallow.title";\r
+        target: "elm.rect.title";\r
+        target: "elm.swallow.content";\r
+        target: "base";\r
+      }\r
+      program { name: hide_title;\r
+        signal: "elm,state,title,hidden";\r
+        source: "elm";\r
+        action: STATE_SET "default" 0.0;\r
+        target: "elm.swallow.title";\r
+        target: "elm.rect.title";\r
+        target: "elm.swallow.content";\r
+        target: "base";\r
+      }\r
+      program { name: show_title_icon;\r
+        signal: "elm,state,title,icon,visible";\r
+        source: "elm";\r
+        action: STATE_SET "show_title_icon" 0.0;\r
+        target: "elm.swallow.title";\r
+        target: "elm.swallow.title.icon";\r
+      }\r
+      program { name: hide_title_icon;\r
+        signal: "elm,state,title,icon,hidden";\r
+        source: "elm";\r
+        action: STATE_SET "default" 0.0;\r
+        target: "elm.swallow.title";\r
+        target: "elm.swallow.title.icon";\r
+      }\r
+      program { name: show_button_area;\r
+        signal: "elm,state,button,visible";\r
+        source: "elm";\r
+        action: STATE_SET "show_button_area" 0.0;\r
+        target: "elm.swallow.buttonArea";\r
+        target: "elm.swallow.content";\r
+        target: "elm.swallow.buttonArea.Background";\r
+        target: "base";\r
+      }\r
+      program { name: hide_button_area;\r
+        signal: "elm,state,button,hidden";\r
+        source: "elm";\r
+        action: STATE_SET "default" 0.0;\r
+        target: "elm.swallow.buttonArea";\r
+        target: "elm.swallow.content";\r
+        target: "elm.swallow.buttonArea.Background";\r
+        target: "base";\r
+      }\r
+      program { name: show_button_title_area;\r
+        signal: "elm,state,button,title,visible";\r
+        source: "elm";\r
+        action: STATE_SET "show_button_title_area" 0.0;\r
+        target: "elm.swallow.content";\r
+        target: "base";\r
+      }\r
+      program { name: hide_button_title_area;\r
+        signal: "elm,state,button,title,hidden";\r
+        source: "elm";\r
+        action: STATE_SET "default" 0.0;\r
+        target: "elm.swallow.content";\r
+        target: "base";\r
+      }\r
+   } /* end of programs */\r
+}\r
+\r
+group { name: "elm/popup/content/app_style";\r
+   parts{\r
+      part { name: "pad_t";\r
+        type: RECT;\r
+        scale : 1;\r
+        mouse_events: 0;\r
+        repeat_events: 1;\r
+        description { state: "default" 0.0;\r
+           align: 0.5 0.0;\r
+           min: 0 60;\r
+           fixed: 0 1;\r
+           color: 0 0 0 0;\r
+           rel1 {\r
+              relative: 1.0 0.0;to_x: "pad_l";\r
+           }\r
+           rel2 {\r
+              relative: 0.0 0.0;to_x: "pad_r";\r
+           }\r
+        }\r
+      }\r
+      part { name: "pad_l";\r
+        type: RECT;\r
+        scale: 1;\r
+        description { state: "default" 0.0;\r
+           min : 20 0;\r
+           fixed: 1 0;\r
+           rel1 {\r
+              relative: 0.0 0.0;\r
+           }\r
+           rel2 {\r
+              relative: 0.0 1.0;\r
+           }\r
+           color: 0 0 0 0;\r
+           align: 0.0 0.0;\r
+        }\r
+      }\r
+      part { name: "pad_r";\r
+        type: RECT;\r
+        scale: 1;\r
+        description { state: "default" 0.0;\r
+           min : 20 0;\r
+           fixed: 1 0;\r
+           rel1 {\r
+              relative: 1.0 0.0;\r
+           }\r
+           rel2 {\r
+              relative: 1.0 1.0;\r
+           }\r
+           color: 0 0 0 0;\r
+           align: 1.0 0.0;\r
+        }\r
+      }\r
+      part{ name:"elm.swallow.content";\r
+        type: SWALLOW;\r
+        scale : 1;\r
+        description { state: "default" 0.0;\r
+           min: 400 0;\r
+           align: 0.5 0.5;\r
+           fixed: 1 0;\r
+           rel1 {\r
+              relative: 0.5 1.0;\r
+              to: "pad_t";\r
+           }\r
+           rel2 {\r
+              relative: 0.5 0.0;\r
+              to: "pad_b";\r
+           }\r
+        }\r
+      }\r
+      part { name: "pad_b";\r
+        type: RECT;\r
+        scale : 1;\r
+        mouse_events: 0;\r
+        repeat_events: 1;\r
+        description { state: "default" 0.0;\r
+           align: 0.5 1.0;\r
+           min: 0 60;\r
+           fixed: 0 1;\r
+           color: 0 0 0 0;\r
+           rel1 {\r
+              relative: 0.0 1.0;to_x: "pad_l";\r
+           }\r
+           rel2 {\r
+              relative: 1.0 1.0;to_x: "pad_r";\r
+           }\r
+        }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/popup/entrypasswordview_2button";\r
+   parts {\r
+      part { name: "base";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_BG_MIN;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+      part { name: "content_top_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 42;\r
+            fixed: 0 1;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               relative: 1.0 0.0;\r
+               to_x: "content_left_padding";\r
+            }\r
+            rel2 {\r
+               relative: 0.0 0.0;\r
+               to_x: "content_right_padding";\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_left_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 47 0;\r
+            fixed: 1 0;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               to: "base";\r
+               relative: 0.0 0.0;\r
+            }\r
+            rel2 {\r
+               to: "base";\r
+               relative: 0.0 1.0;\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_right_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 47 0;\r
+            fixed: 1 0;\r
+            align: 1.0 0.0;\r
+            rel1 {\r
+               to: "base";\r
+               relative: 1.0 0.0;\r
+            }\r
+            rel2 {\r
+               to: "base";\r
+               relative: 1.0 1.0;\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_bottom_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 42;\r
+            fixed: 0 1;\r
+            align: 0.0 1.0;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "content_left_padding";\r
+            }\r
+            rel2 {\r
+               relative: 0.0 1.0;\r
+               to_x: "content_right_padding";\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_field";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 66;\r
+            fixed: 0 1;\r
+            align: 0.5 0.0;\r
+            rel1 {\r
+               relative: 0.0 1.0;\r
+               to: "content_top_padding";\r
+            }\r
+            rel2.to: "content_top_padding";\r
+         }\r
+      }\r
+      part { name: "elm.swallow.content";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 66;\r
+            fixed: 1 1;\r
+            align: 0.5 0.5;\r
+            rel1.to: "content_field";\r
+            rel2.to: "content_field";\r
+         }\r
+      }\r
+      part { name: "end_top_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 10;\r
+            fixed: 0 1;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               to: "content_field";\r
+               relative: 0.0 1.0;\r
+            }\r
+            rel2.to: "content_field";\r
+         }\r
+      }\r
+      part { name: "end_field";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 63;\r
+            fixed: 0 1;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               to: "end_top_padding";\r
+               relative: 0.0 1.0;\r
+            }\r
+            rel2.to: "end_top_padding";\r
+         }\r
+      }\r
+      part { name: "elm.swallow.end";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            align: 0.0 0.5;\r
+            rel1.to: "end_field";\r
+            rel2.to: "end_field";\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/popup/entryview_2button";\r
+   parts {\r
+      part { name: "base";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 150;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+      part { name: "content_top_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 42;\r
+            fixed: 0 1;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               relative: 1.0 0.0;\r
+               to_x: "content_left_padding";\r
+            }\r
+            rel2 {\r
+               relative: 0.0 0.0;\r
+               to_x: "content_right_padding";\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_left_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 65 0;\r
+            fixed: 1 0;\r
+            align: 0.0 0.0;\r
+            rel1 {\r
+               to: "base";\r
+               relative: 0.0 0.0;\r
+            }\r
+            rel2 {\r
+               to: "base";\r
+               relative: 0.0 1.0;\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_right_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 65 0;\r
+            fixed: 1 0;\r
+            align: 1.0 0.0;\r
+            rel1 {\r
+               to: "base";\r
+               relative: 1.0 0.0;\r
+            }\r
+            rel2 {\r
+               to: "base";\r
+               relative: 1.0 1.0;\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_bottom_padding";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 42;\r
+            fixed: 0 1;\r
+            align: 0.0 1.0;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "content_left_padding";\r
+            }\r
+            rel2 {\r
+               relative: 0.0 1.0;\r
+               to_x: "content_right_padding";\r
+            }\r
+         }\r
+      }\r
+      part { name: "content_field";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 66;\r
+            fixed: 0 1;\r
+            align: 0.5 0.0;\r
+            rel1 {\r
+               relative: 0.0 1.0;\r
+               to: "content_top_padding";\r
+            }\r
+            rel2.to: "content_top_padding";\r
+         }\r
+      }\r
+      part { name: "elm.swallow.content";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            align: 0.5 0.5;\r
+            rel1.to: "content_field";\r
+            rel2.to: "content_field";\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/popup/entrypasswordview";\r
+   images {\r
+      image : "00_search_edit_field_bg.#.png" COMP;\r
+      image : "00_search_edit_field_selected.#.png" COMP;\r
+   }\r
+   parts {\r
+      part { name: "base";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 194;\r
+            max: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 194;\r
+            align: 0.5 0.5;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+      part { name: "pad_bottom";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 40;\r
+            max: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 40;\r
+            fixed: 0 1;\r
+            rel1 {\r
+               relative: 0.0 1.0;\r
+               to: "base";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 1.0;\r
+               to: "base";\r
+            }\r
+            align: 0.5 1.0;\r
+         }\r
+      }\r
+      part { name: "elm.password.text";\r
+         type: TEXT;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 0 0;\r
+            max: 0 0;\r
+            fixed: 1 1;\r
+            align: 0.5 0.0;\r
+            rel1.to: "base";\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "base";\r
+            }\r
+            text {\r
+               align: 0.5 0.5;\r
+               min: 0 1;\r
+               text_class: "T1231";\r
+            }\r
+            color_class: "T1231";\r
+         }\r
+      }\r
+      part { name: "padding_after_text";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 40;\r
+            max: DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN 40;\r
+            fixed: 1 1;\r
+            align: 0.5 0.0;\r
+            rel1 {\r
+               relative: 0.0 1.0;\r
+               to_x: "base";\r
+               to_y: "elm.password.text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 1.0;\r
+               to_x: "base";\r
+               to_y: "elm.password.text";\r
+            }\r
+         }\r
+      }\r
+      part { name: "elm.image1";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 118 114;\r
+            max: 118 114;\r
+            fixed: 1 1;\r
+            align: 0.0 0.5;\r
+            rel1 {\r
+               relative: 0.0 1.0;\r
+               to: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            image.normal: "00_search_edit_field_bg.#.png";\r
+            color_class: "W031L1";\r
+         }\r
+      }\r
+      part { name: "elm.image1.outline";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            rel1.to: "elm.image1";\r
+            rel2.to: "elm.image1";\r
+            image.normal: "00_search_edit_field_selected.#.png";\r
+            color_class: "W031L2";\r
+         }\r
+      }\r
+      part { name: "elm.entry1";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            rel1.to: "elm.image1";\r
+            rel2.to: "elm.image1";\r
+         }\r
+      }\r
+      part { name: "pad_n";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 20 0;\r
+            max: 20 9999;\r
+            fixed: 1 0;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "elm.image1";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            align: 0.0 0.0;\r
+         }\r
+      }\r
+      part { name: "elm.image2";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 118 114;\r
+            max: 118 114;\r
+            fixed: 1 1;\r
+            align: 0.0 0.5;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "pad_n";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            image.normal: "00_search_edit_field_bg.#.png";\r
+            color_class: "W031L1";\r
+         }\r
+      }\r
+      part { name: "elm.image2.outline";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            rel1.to: "elm.image2";\r
+            rel2.to: "elm.image2";\r
+            image.normal: "00_search_edit_field_selected.#.png";\r
+            color_class: "W031L2";\r
+         }\r
+      }\r
+      part { name: "elm.entry2";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            rel1.to: "elm.image2";\r
+            rel2.to: "elm.image2";\r
+         }\r
+      }\r
+      part { name: "pad_n2";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 20 0;\r
+            max: 20 9999;\r
+            fixed: 1 0;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "elm.image2";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            align: 0.0 0.0;\r
+         }\r
+      }\r
+      part { name: "elm.image3";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 118 114;\r
+            max: 118 114;\r
+            fixed: 1 1;\r
+            align: 0.0 0.5;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "pad_n2";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            image.normal: "00_search_edit_field_bg.#.png";\r
+            color_class: "W031L1";\r
+         }\r
+      }\r
+      part { name: "elm.image3.outline";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            rel1.to: "elm.image3";\r
+            rel2.to: "elm.image3";\r
+            image.normal: "00_search_edit_field_selected.#.png";\r
+            color_class: "W031L2";\r
+         }\r
+      }\r
+      part { name: "elm.entry3";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            rel1.to: "elm.image3";\r
+            rel2.to: "elm.image3";\r
+         }\r
+      }\r
+      part { name: "pad_n3";\r
+         type: SPACER;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 20 0;\r
+            max: 20 9999;\r
+            fixed: 1 0;\r
+            rel1 {\r
+               relative: 1.0 1.0;\r
+               to_x: "elm.image3";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            align: 0.0 0.0;\r
+         }\r
+      }\r
+      part { name: "elm.image4";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: 118 114;\r
+            max: 118 114;\r
+            fixed: 1 1;\r
+            align: 0.0 0.5;\r
+            rel1 { relative: 1.0 1.0;\r
+               to_x: "pad_n3";\r
+               to_y: "padding_after_text";\r
+            }\r
+            rel2 {\r
+               relative: 1.0 0.0;\r
+               to: "pad_bottom";\r
+            }\r
+            image.normal: "00_search_edit_field_bg.#.png";\r
+            color_class: "W031L1";\r
+         }\r
+      }\r
+      part { name: "elm.image4.outline";\r
+         type: IMAGE;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            rel1.to: "elm.image4";\r
+            rel2.to: "elm.image4";\r
+            image.normal: "00_search_edit_field_selected.#.png";\r
+            color_class: "W031L2";\r
+         }\r
+      }\r
+      part { name: "elm.entry4";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            fixed: 1 1;\r
+            rel1.to: "elm.image4";\r
+            rel2.to: "elm.image4";\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/content/menustyle";\r
+   parts{\r
+      part{ name:"elm.swallow.content";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC;\r
+            align: 0.5 0.5;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/content/liststyle";\r
+   parts{\r
+      part{ name:"elm.swallow.content";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC;\r
+            align: 0.5 0.5;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+group { name: "elm/layout/content/min_liststyle";\r
+   parts{\r
+      part{ name:"elm.swallow.content";\r
+         type: SWALLOW;\r
+         scale: 1;\r
+         description { state: "default" 0.0;\r
+            min: DEMO_POPUP_CONTENT_MINSTYLE_CONTENT_DEFAULT_MIN_INC;\r
+            align: 0.5 0.5;\r
+            fixed: 1 0;\r
+         }\r
+      }\r
+   }\r
+}\r
+\r
+#undef DEMO_POPUP_CONTENT_MINSTYLE_CONTENT_DEFAULT_MIN_INC\r
+#undef DEMO_POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC\r
+#undef DEMO_POPUP_ENTRYPASSWORDVIEW_CONTENT_WIDTH_MIN\r
+#undef DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_BG_MIN\r
+#undef DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_TITLE_HEIGHT_MIN_MAX\r
+#undef DEMO_POPUP_ENTRYPASSWORDVIEW_2BUTTON_FIELD_MIN_MAX\r
diff --git a/live.viewer/dbox.app/data/groups/tickernoti.edc b/live.viewer/dbox.app/data/groups/tickernoti.edc
new file mode 100644 (file)
index 0000000..a936730
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group {
+      name: "elmdemo-test/tickernoti";
+      parts {
+         part { name: "bg";
+            mouse_events: 0;
+            type: RECT;
+            scale: 1;
+            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: "top_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 50;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; to: "bg";}
+               rel2 { relative: 1.0 0.0; to: "bg";}
+               color: 0 0 0 0;
+               align: 0.0 0.0;
+            }
+         }
+
+         part {
+            name: "btn_tickernoti_show";
+            type: SWALLOW;
+            mouse_events: 1;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               min: 250 80;
+               max: 250 80;
+               rel1 { relative: 0.0 1.0; to: "top_padding"; }
+               rel2 { relative: 1.0 1.0; to: "top_padding"; }
+               align: 0.5 0.0;
+            }
+         }
+
+
+         part { name: "top_padding_2";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 0 50;
+               fixed: 0 1;
+               rel1 { relative: 0.0 1.0; to: "btn_tickernoti_show";}
+               rel2 { relative: 1.0 1.0; to: "btn_tickernoti_show";}
+               color: 0 0 0 0;
+               align: 0.0 0.0;
+            }
+         }
+
+         part {
+            name: "btn_tickernoti_show2";
+            type: SWALLOW;
+            mouse_events: 1;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+               min: 250 80;
+               max: 250 80;
+               rel1 { relative: 0.0 1.0; to: "top_padding_2"; }
+               rel2 { relative: 1.0 1.0; to: "top_padding_2"; }
+               align: 0.5 0.0;
+            }
+         }
+      }
+   }
+
+   group { name: "tickernoti_layout";
+      parts {
+         part {
+             name: "bg";
+             type: RECT;
+             scale: 1;
+             description { state: "default" 0.0;
+                rel1.relative: 0.0 0.0;
+                rel2.relative: 1.0 1.0;
+                color: 0 0 0 0;
+             }
+         }
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 50 50;
+               fixed: 0 1;
+               rel1 { relative: 0.0 0.0; to: "bg";}
+               rel2 { relative: 1.0 0.0; to: "bg";}
+               color: 0 0 0 0;
+               align: 0.0 0.0;
+            }
+         }
+         part {
+             name: "btn1";
+             type: SWALLOW;
+             scale: 1;
+             description { state: "default" 0.0;
+                fixed: 1 1;
+                min: 550 80;
+                max: 550 80;
+                rel1 { relative: 0.0 1.0; to: "top_padding"; }
+                rel2 { relative: 1.0 1.0; to: "top_padding"; }
+                align: 0.5 0.0;
+             }
+         }
+         part { name: "top_padding_2";
+            type: RECT;
+            scale: 1;
+            description { state: "default" 0.0;
+               min: 50 50;
+               fixed: 0 1;
+               rel1 { relative: 0.0 1.0; to: "btn1";}
+               rel2 { relative: 1.0 1.0; to: "btn1";}
+               color: 0 0 0 0;
+               align: 0.0 0.0;
+            }
+         }
+         part {
+             name: "btn2";
+             type: SWALLOW;
+             scale: 1;
+             description { state: "default" 0.0;
+                fixed: 1 1;
+                min: 550 80;
+                max: 550 80;
+                rel1 { relative: 0.0 1.0; to: "top_padding_2"; }
+                rel2 { relative: 1.0 1.0; to: "top_padding_2"; }
+                align: 0.5 0.0;
+             }
+         }
+      }
+   }
\ No newline at end of file
diff --git a/live.viewer/dbox.app/data/groups/tizen-dark-inc.edc b/live.viewer/dbox.app/data/groups/tizen-dark-inc.edc
new file mode 100644 (file)
index 0000000..225577f
--- /dev/null
@@ -0,0 +1,1372 @@
+/*
+ * Copyright (c) 2010 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * PROPRIETARY/CONFIDENTIAL
+ *
+ * This software is the confidential and proprietary information of SAMSUNG
+ * ELECTRONICS ("Confidential Information"). You agree and acknowledge that this
+ * software is owned by Samsung and you shall not disclose such Confidential
+ * Information and shall use it only in accordance with the terms of the license
+ * agreement you entered into with SAMSUNG ELECTRONICS. SAMSUNG make no
+ * representations or warranties about the suitability of the software, either
+ * express or implied, including but not limited to the implied warranties of
+ * merchantability, fitness for a particular purpose, or non-infringement.
+ * SAMSUNG shall not be liable for any damages suffered by licensee arising out
+ * of or releated to this software.
+ *
+ */
+
+#define BG_DEFAULT_COLOR_INC 0 0 0 255
+#define BG_EDIT_MODE_COLOR_INC 0 0 0 255
+#define BG_GROUP_LIST_COLOR_INC 0 0 0 255
+#define BG_TRANSPARENT_COLOR_INC 0 0 0 0
+
+#define LAYOUT_BG_COLOR_INC 0 0 0 255
+#define LAYOUT_EDIT_MODE_BG_COLOR_INC 0 0 0 255
+#define LAYOUT_GROUP_LIST_BG_COLOR_INC 0 0 0 255
+#define LAYOUT_INDICATOR_HEIGHT_INC 60
+#define LAYOUT_INDICATOR_COLOR_INC 0 0 0 255
+
+#define NAVIFRAME_TITLE_TEXT_BG_H_INC 88
+#define NAVIFRAME_LANDSCAPE_TITLE_TEXT_BG_H_INC 76
+#define NAVIFRAME_TITLE_BG_IMAGE_BORDER_INC 8 8 2 2
+#define NAVIFRAME_TITLE_H_INC 96
+#define NAVIFRAME_LANDSCAPE_TITLE_H_INC 91
+#define NAVIFRAME_TAB_TITLE_H_INC 165
+#define NAVIFRAME_LANDSCAPE_TAB_TITLE_H_INC 145
+#define NAVIFRAME_TAB_TITLE_H2_INC 126
+#define NAVIFRAME_TOOLBAR_HEIGHT_INC 98
+#define NAVIFRAME_LANDSCAPE_TOOLBAR_HEIGHT_INC 85
+#define NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC 183 96
+#define NAVIFRAME_LANDSCAPE_TITLE_FUNC_BTN_SIZE_INC 183 91
+#define NAVIFRAME_PREV_FUNC_BTN_SIZE_INC 85 98
+#define NAVIFRAME_LANDSCAPE_PREV_FUNC_BTN_SIZE_INC 85 85
+#define NAVIFRAME_TITLE_TAB_H_INC 75
+#define NAVIFRAME_TITLE_TAB_FONT_SIZE_INC 44
+#define NAVIFRAME_LANDSCAPE_TITLE_TAB_FONT_SIZE_INC 38
+#define NAVIFRAME_TITLE_TAB_TEXT_H_INC 90
+#define NAVIFRAME_LANDSCAPE_TITLE_TAB_TEXT_H_INC 70
+#define NAVIFRAME_TITLE_FONT_SIZE_INC 50
+#define NAVIFRAME_TITLE_FONT_MIN_SIZE_INC 46
+#define NAVIFRAME_LANDSCAPE_TITLE_FONT_SIZE_INC 50
+#define NAVIFRAME_TITLE_SMALL_FONT_SIZE_INC 42
+#define NAVIFRAME_LANDSCAPE_TITLE_SMALL_FONT_SIZE_INC 38
+#define NAVIFRAME_ICON_SIZE_INC 45 45
+#define NAVIFRAME_PADDING_INC 26 0
+#define NAVIFRAME_PADDING2_INC 16 0
+#define NAVIFRAME_BADGE_PADDING_INC 92 0
+#define NAVIFRAME_BADGE_LEFT_PADDING_INC 8 0
+#define NAVIFRAME_BADGE_TOP_PADDING_INC 0 10
+#define NAVIFRAME_BADGE_TEXT_LEFT_PADDING_INC 12 54
+#define NAVIFRAME_BADGE_TEXT_H_INC 34
+#define NAVIFRAME_BADGE_TEXT_MIN_W_INC 30
+#define NAVIFRAME_BADGE_TEXT_MAX_W_INC 60
+#define NAVIFRAME_BADGE_BG_IMAGE_SIZE_INC 54 54
+#define NAVIFRAME_BADGE_BG_IMAGE_BORDER_INC 26 26 0 0
+#define NAVIFRAME_TOOLBAR_BUTTON_BG_PADDING_INC 112 0
+#define NAVIFRAME_ICON_PADDING_INC 77 0
+#define NAVIFRAME_TITLE_TEXT_COLOR_INC 250 250 250 255
+#define NAVIFRAME_TITLE_STYLE_COLOR_INC "#FAFAFA"
+#define NAVIFRAME_TITLE_TEXT_SHADOW_COLOR_INC 0 0 0 255
+#define NAVIFRAME_TITLE_STYLE_SHADOW_COLOR_INC "#000000"
+#define NAVIFRAME_SUBTITLE_TEXT_COLOR_INC 250 250 250 255
+#define NAVIFRAME_SUBTITLE_TEXT_SHADOW_COLOR_INC 0 0 0 255
+#define NAVIFRAME_SUBTITLE_FONT_SIZE_INC 30
+#define NAVIFRAME_LANDSCAPE_SUBTITLE_FONT_SIZE_INC 28
+#define NAVIFRAME_SUBTITLE_H_INC 37
+#define NAVIFRAME_LANDSCAPE_SUBTITLE_H_INC 30
+#define NAVIFRAME_SUBTITLE_TOP_PADDING_H_INC 2
+#define NAVIFRAME_LANDSCAPE_SUBTITLE_TOP_PADDING_H_INC 4
+#define NAVIFRAME_BADGE_TEXT_COLOR_INC 250 250 250 255;
+#define NAVIFRAME_TITLE_BUTTON_DIVIDER_COLOR_INC 255 255 255 82
+#define NAVIFRAME_TITLE_TEXT_SLIDE_EFFECT_IMAGE_SIZE_INC 63 27
+#define NAVIFRAME_TITLE_TEXT_SLIDE_EFFECT_IMAGE_BORDER_INC 0 0 13 12
+
+#define PROGRESSBAR_TITLE_FONT_SIZE_INC 28
+#define PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC 20
+
+#define CTXPOPUP_WIDTH_MIN_INC 386
+#define CTXPOPUP_WIDTH_MAX_INC 692
+#define CTXPOPUP_TEXT_MAX_INC 652
+#define CTXPOPUP_ICON_TEXT_MAX_INC 595
+#define CTXPOPUP_MORE_TEXT_MAX_INC 599
+#define CTXPOPUP_BUBBLE_BG_IMAGE_BORDER 26 26 26 26
+#define CTXPOPUP_BUBBLE_MORE_BG_IMAGE_BORDER 26 26 25 0
+#define CTXPOPUP_BUBBLE_BG_PRESSED_IMAGE_BORDER 8 8 8 8
+#define CTXPOPUP_SHADOW_LEFT_PADDING 14
+#define CTXPOPUP_SHADOW_RIGHT_PADDING 14
+#define CTXPOPUP_SHADOW_TOP_PADDING 14
+#define CTXPOPUP_SHADOW_BOTTOM_PADDING 14
+#define CTXPOPUP_CONTENT_PADDING_WIDTH 1
+#define CTXPOPUP_CONTENT_PADDING_HEIGHT 1
+#define CTXPOPUP_PRESS_PADDING 4
+#define CTXPOPUP_PRESS_PADDING2 3
+#define CTXPOPUP_ARROW_PADDING 1
+#define CTXPOPUP_SCROLLER_PADDING 8
+#define CTXPOPUP_SCROLLER_HORIZONTAL_PADDING 16
+#define CTXPOPUP_SCROLLER_VERTICAL_PADDING 16
+#define CTXPOPUP_SCROLLER_TOP_PADDING 8
+#define CTXPOPUP_SCROLLER_BOTTOM_PADDING 8
+#define CTXPOPUP_SCROLLER_LEFT_PADDING 8
+#define CTXPOPUP_SCROLLER_RIGHT_PADDING 8
+#define CTXPOPUP_SCROLLER_V_MIN_SIZE_INC 9 18
+#define CTXPOPUP_SCROLLER_H_MIN_SIZE_INC 18 9
+#define CTXPOPUP_FRAME_CORNER_ARROW_PADDING 18
+#define CTXPOPUP_ICON_CLIP_DEFAULT_COLOR_INC 255 255 255 255
+#define CTXPOPUP_ICON_CLIP_DIM_COLOR_INC 162 165 174 255
+#define CTXPOPUP_MAIN_TEXT_COLOR_INC 255 255 255 255
+#define CTXPOPUP_MAIN_TEXT_DIM_COLOR_INC 162 165 174 255
+#define CTXPOPUP_MAIN_TEXT_PRESS_COLOR_INC 255 255 255 255
+#define CTXPOPUP_LIST_MAIN_TEXT_COLOR_INC 255 255 255 255
+#define CTXPOPUP_LIST_MAIN_TEXT_DIM_COLOR_INC 162 165 174 255
+#define CTXPOPUP_LIST_MAIN_TEXT_PRESS_COLOR_INC 255 255 255 255
+#define CTXPOPUP_SEPARATOR_PXLINE_SIZE_INC 1
+#define CTXPOPUP_SEPARATOR_PADDING_INC 20
+#define CTXPOPUP_SEPARATOR_COLOR_INC 29 38 60 255
+#define CTXPOPUP_SEPARATOR2_COLOR_INC 86 92 109 255
+#define CTXPOPUP_HORIZONTAL_SEPARATOR_1_COLOR_INC 29 38 60 255
+#define CTXPOPUP_HORIZONTAL_SEPARATOR_2_COLOR_INC 98 102 117 255
+#define CTXPOPUP_HORIZONTAL_SEPARATOR_MIN_SIZE_INC 1 96
+#define CTXPOPUP_HORIZONTAL_SEPARATOR_MAX_SIZE_INC 1 96
+#define CTXPOPUP_ITEM_DISABLED_COLOR 0 0 0 0
+#define CTXPOPUP_LIST_MAIN_TEXT_SIZE_INC 40
+#define CTXPOPUP_LIST_MAIN_TEXT_MAX_SIZE_INC (CTXPOPUP_LIST_MAIN_TEXT_SIZE_INC * 2)
+#define CTXPOPUP_MAIN_TEXT_SIZE_INC 32
+#define CTXPOPUP_ITEM_HEIGHT_MIN_INC 110
+#define CTXPOPUP_ITEM_HEIGHT_MAX_INC 130
+#define CTXPOPUP_TEXT_ITEM_HORIZONTAL_WIDTH_INC 128
+#define CTXPOPUP_ICON_ITEM_HORIZONTAL_WIDTH_INC 112
+#define CTXPOPUP_ITEM_HORIZONTAL_HEIGHT_INC 96
+#define CTXPOPUP_ICON_WIDTH_INC 45
+#define CTXPOPUP_ICON_HEIGHT_INC 45
+#define CTXPOPUP_ICON_HORIZONTAL_WIDTH_INC 45
+#define CTXPOPUP_ICON_HORIZONTAL_HEIGHT_INC 45
+#define CTXPOPUP_ARROW_SIZE_INC 36 36
+#define CTXPOPUP_ITEM_TEXT_PADDING_INC 20
+#define CTXPOPUP_ITEM_ICON_PADDING_INC 16
+#define CTXPOPUP_TP_BG_IMAGE_BORDER 8 8 8 8
+#define CTXPOPUP_TP_ARROW_SIZE_INC 27 18
+#define CTXPOPUP_TP_HEIGHT_INC 102
+#define CTXPOPUP_MORE_WIDTH_MIN_INC 412
+#define CTXPOPUP_MORE_WIDTH_MAX_INC 720
+#define CTXPOPUP_MORE_ITEM_PADDING_INC 16
+#define CTXPOPUP_MORE_ITEM_HEIGHT_MIN_INC 110
+#define CTXPOPUP_MORE_ITEM_HEIGHT_MAX_INC 130
+#define CTXPOPUP_MORE_ICON_WIDTH_INC 45
+#define CTXPOPUP_MORE_ICON_HEIGHT_INC 45
+#define CTXPOPUP_MORE_ITEM_TEXT_SIZE_INC 40
+#define CTXPOPUP_MOVE_PAD_INC 40
+#define CTXPOPUP_TOOLBAR_SEGMENTEDCONTROL_WIDTH_MIN_INC 334
+#define CTXPOPUP_TOOLBAR_SEGMENTEDCONTROL_WIDTH_MAX_INC 720
+#define CTXPOPUP_TOOLBAR_SEGMENTEDCONTROL_HEIGHT_MIN_INC 90
+#define CTXPOPUP_TOOLBAR_SEGMENTEDCONTROL_HEIGHT_MAX_INC 130
+#define CTXPOPUP_COPYPASTE_TEXT_COLOR_INC 255 255 255 255
+#define CTXPOPUP_COPYPASTE_TEXT_DIM_COLOR_INC 255 255 255 30
+#define CTXPOPUP_COPYPASTE_TEXT_PRESS_COLOR_INC 255 255 255 255
+#define CTXPOPUP_COPYPASTE_TEXT_SIZE_INC 26
+#define CTXPOPUP_COPYPASTE_TEXT_MAX_SIZE_INC (CTXPOPUP_COPYPASTE_TEXT_SIZE_INC * 2)
+#define CTXPOPUP_COPYPASTE_WIDTH_MAX_INC 1252
+#define CTXPOPUP_COPYPASTE_ITEM_HEIGHT_MIN_INC 126
+#define CTXPOPUP_COPYPASTE_ICON_WIDTH_INC 45
+#define CTXPOPUP_COPYPASTE_ICON_HEIGHT_INC 45
+#define CTXPOPUP_COPYPASTE_ITEM_ICON_TOP_PADDING_INC 24
+#define CTXPOPUP_COPYPASTE_SEPARATOR_MIN_SIZE_INC 1 CTXPOPUP_COPYPASTE_ITEM_HEIGHT_MIN_INC
+#define CTXPOPUP_COPYPASTE_SEPARATOR_MAX_SIZE_INC 1 -1
+
+#define DISKSELECTOR_DF_FONT_COLOR_INC 255 255 255 178
+#define DISKSELECTOR_DF_FONT_MOUSE_DOWN_COLOR_INC 255 255 255 255
+#define DISKSELECTOR_DF_ITEM_MIN_SIZE_INC 70 106;
+#define DISKSELECTOR_DF_FONT_SIZE_INC 48
+#define DISKSELECTOR_DF_DATA_MIN_HEIGHT_INC "106"
+
+#define LABEL_TEXT_BLOCK_STYLE_COLOR_INC "#FAFAFA"
+#define LABEL_FONT_SIZE_INC 36
+
+#define GENGRID_FONT_STYLE_INC "26"
+#define GENGRID_FONT_STYLE_APPLICATION_INC "26"
+#define GENGRID_FONT_STYLE_24_INC "24"
+#define GENGRID_PART_BG_COLOR_INC 0 0 0 0
+#define GENGRID_PART_REORDER_DEFAULT_BG_COLOR_INC 0 0 0 77
+#define GENGRID_PART_REORDER_BG_COLOR_INC 0 0 0 77
+#define GENGRID_PART_TEXTBLOCK_STYLE_COLOR_INC "#FAFAFAFF"
+#define GENGRID_PART_TEXTBLOCK_STYLE_SHADOW_COLOR_INC "#00000000"
+#define GENGRID_PART_BACKGROUND_COLOR_INC 0 0 0 0
+#define GENGRID_EDIT_MODE_CHECK_TOP_RIGHT_INC 6 6
+#define GENGRID_EDIT_MODE_CHECK_SIZE_INC 63 63
+#define GENGRID_ITEM_CHECK_TOP_RIGHT_PADDING_INC 6 6
+
+#define GENGRID_DEFAULT_LEFT_TOP_PADDING_INC 2 2
+#define GENGRID_DEFAULT_RIGHT_BOTTOM_PADDING_INC 2 2
+#define GENGRID_DEFAULT_ITEM_BG_LEFT_TOP_PADDING_INC 1 1
+#define GENGRID_DEFAULT_ITEM_BG_RIGHT_BOTTOM_PADDING_INC 1 1
+#define GENGRID_DEFAULT_ITEM_REAL_BG_RIGHT_PADDING_INC 0 0
+#define GENGRID_DEFAULT_LEFT_TOP_FOCUS_PADDING_INC 2 2
+#define GENGRID_DEFAULT_RIGHT_BOTTOM_FOCUS_PADDING_INC 2 2
+
+#define GENGRID_GALLERY_LEFT_TOP_PADDING_INC 6 0
+#define GENGRID_GALLERY_RIGHT_BOTTOM_PADDING_INC 0 6
+#define GENGRID_GALLERY_ITEM_BG_LEFT_TOP_PADDING_INC 1 1
+#define GENGRID_GALLERY_ITEM_BG_RIGHT_BOTTOM_PADDING_INC 1 1
+#define GENGRID_GALLERY_ITEM_REAL_BG_RIGHT_PADDING_INC 0 0
+#define GENGRID_GALLERY_LEFT_TOP_FOCUS_PADDING_INC 1 1
+#define GENGRID_GALLERY_RIGHT_BOTTOM_FOCUS_PADDING_INC 1 1
+
+#define GENGRID_MYFILE_LEFT_TOP_PADDING_INC 6 6
+#define GENGRID_MYFILE_RIGHT_BOTTOM_PADDING_INC 6 6
+#define GENGRID_MYFILE_ITEM_BG_LEFT_TOP_PADDING_INC 0 0
+#define GENGRID_MYFILE_ITEM_BG_RIGHT_BOTTOM_PADDING_INC 0 0
+#define GENGRID_MYFILE_ITEM_REAL_BG_RIGHT_PADDING_INC 0 0
+#define GENGRID_MYFILE_LEFT_TOP_FOCUS_PADDING_INC 4 4
+#define GENGRID_MYFILE_RIGHT_BOTTOM_FOCUS_PADDING_INC 4 4
+
+#define GENGRID_GRID_TEXT_LEFT_TOP_PADDING_INC 6 6
+#define GENGRID_GRID_TEXT_RIGHT_BOTTOM_PADDING_INC 6 64
+#define GENGRID_GRID_TEXT_ITEM_BG_LEFT_TOP_PADDING_INC 1 1
+#define GENGRID_GRID_TEXT_ITEM_BG_RIGHT_BOTTOM_PADDING_INC 1 1
+#define GENGRID_GRID_TEXT_ITEM_REAL_BG_RIGHT_PADDING_INC 0 0
+#define GENGRID_GRID_TEXT_LEFT_TOP_FOCUS_PADDING_INC 2 2
+#define GENGRID_GRID_TEXT_RIGHT_BOTTOM_FOCUS_PADDING_INC 2 62
+
+#define GENGRID_GRID_TEXT2_LEFT_TOP_PADDING_INC 6 6
+#define GENGRID_GRID_TEXT2_RIGHT_BOTTOM_PADDING_INC 6 6
+#define GENGRID_GRID_TEXT2_ITEM_BG_LEFT_TOP_PADDING_INC 1 1
+#define GENGRID_GRID_TEXT2_ITEM_BG_RIGHT_BOTTOM_PADDING_INC 1 1
+#define GENGRID_GRID_TEXT2_ITEM_REAL_BG_RIGHT_PADDING_INC 0 0
+#define GENGRID_GRID_TEXT2_LEFT_TOP_FOCUS_PADDING_INC 2 2
+#define GENGRID_GRID_TEXT2_RIGHT_BOTTOM_FOCUS_PADDING_INC 2 2
+
+#define GENGRID_VIDEO_TEXT_BG_COLOR 0 0 0 153
+
+#define GENGRID_POPUP_CONTENT_TOP_PADDING 26
+#define GENGRID_POPUP_CONTENT_BOTTOM_PADDING 26
+#define GENGRID_POPUP_BG_COLOR 0 0 0 0
+#define GENGRID_POPUP_TEXT_LEFT_TOP_PADDING_INC 24 0
+#define GENGRID_POPUP_TEXT_RIGHT_BOTTOM_PADDING_INC 24 64
+#define GENGRID_POPUP_TEXT_LEFT_TOP_FOCUS_PADDING_INC 24 0
+#define GENGRID_POPUP_TEXT_RIGHT_BOTTOM_FOCUS_PADDING_INC 24 64
+#define GENGRID_POPUP_ITEM_REAL_BG_LEFT_PADDING_INC ((150-117)/2) ((150-117)/2)
+#define GENGRID_POPUP_ITEM_REAL_BG_RIGHT_PADDING_INC ((150-117)/2) ((150-117)/2)
+
+// Please do not use these !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+#define GENLIST_PADDING_5_INC 5
+#define GENLIST_PADDING_24_INC 24
+#define GENLIST_PADDING_64_INC 64
+#define GENLIST_PADDING_88_INC 88
+#define GENLIST_PADDING_34_INC 34
+#define GENLIST_PADDING_32_INC 32
+#define GENLIST_PADDING_16_INC 16
+#define GENLIST_SIZE_80_INC 80
+
+#define BUBBLE_DISCLIP_COLOR                        255 255 255 102 // opacity 40%
+
+// List bg color
+#define GENLIST_LIST_BG_POPUP_COLOR                 29 38 60 255
+#define GENLIST_LIST_LINE1_POPUP_COLOR              29 38 60 255
+#define GENLIST_LIST_LINE2_POPUP_COLOR              86 92 109 255
+#define GENLIST_LIST_BG_COLOR                       0 0 0 255
+#define GENLIST_LIST_PRESS_COLOR                    33 49 99 255
+#define GENLIST_LIST_DIM_COLOR                      0 0 0 255
+#define GENLIST_LIST_LINE1_COLOR                    64 64 64 255
+#define GENLIST_LIST_LINE2_COLOR                    0 0 0 255
+#define GENLIST_LIST_DIVIDER1_COLOR                 64 64 64 255
+#define GENLIST_LIST_DIVIDER2_COLOR                 64 64 64 255
+#define GENLIST_MULTILINE_DIVIDER1_COLOR            65 66 73 255
+#define GENLIST_MULTILINE_DIVIDER2_COLOR            65 66 73 255
+#define GENLIST_SELECT_ALL_BG_COLOR                 34 44 71 255
+#define GENLIST_SWEEP_BG_COLOR                      28 30 40 255
+
+// Group Index
+#define GENLIST_GROUPINDEX_LIST_SIZE                     32
+#define GENLIST_GROUPINDEX_LIST_COLOR                    66 87 144 255
+#define GENLIST_GROUPINDEX_LIST_FOCUS_COLOR              250 250 250 255
+#define GENLIST_GROUPINDEX_LIST_COLOR_STYLE              "#425790FF"
+#define GENLIST_GROUPINDEX_LIST_FOCUS_COLOR_STYLE        "#FAFAFAFF"
+
+#define GENLIST_GROUPINDEX_LIST_BG_COLOR                 0 0 0 255
+#define GENLIST_GROUPINDEX_LIST_PRESS_COLOR              33 49 99 255
+#define GENLIST_GROUPINDEX_LINE_COLOR                    66 87 144 255
+#define GENLIST_GROUPINDEX_LINE_FOCUS_COLOR              250 250 250 255
+
+// Genlist Text
+#define GENLIST_LIST_MAIN_TEXT_SIZE                         44
+#define GENLIST_LIST_MAIN_TEXT_UNREAD_COLOR                 250 250 250 255
+#define GENLIST_LIST_MAIN_TEXT_UNREAD_COLOR_STYLE           "#FAFAFAFF"
+#define GENLIST_LIST_MAIN_TEXT_UNREAD_DIM_COLOR             150 150 150 255
+#define GENLIST_LIST_MAIN_TEXT_UNREAD_DIM_COLOR_STYLE       "#969696FF"
+#define GENLIST_LIST_MAIN_TEXT_READ_COLOR                   110 111 118 255
+#define GENLIST_LIST_MAIN_TEXT_READ_DIM_COLOR               67 67 67 255
+#define GENLIST_LIST_TEXT_FOCUS_COLOR                       250 250 250 255
+#define GENLIST_LIST_TEXT_FOCUS_COLOR_STYLE                 "#FAFAFAFF"
+
+#define GENLIST_LIST_SUB_TEXT_SIZE                          32
+#define GENLIST_LIST_SUB_TEXT_DEFAULT_COLOR                 110 111 118 255
+#define GENLIST_LIST_SUB_TEXT_DEFAULT_COLOR_STYLE           "#6E6F76FF"
+#define GENLIST_LIST_SUB_TEXT_DEFAULT_DIM_COLOR             67 67 67 255
+#define GENLIST_LIST_SUB_TEXT_DEFAULT_DIM_COLOR_STYLE       "#434343FF"
+#define GENLIST_LIST_SUB_TEXT_SETTINGS_COLOR                104 144 255 255
+#define GENLIST_LIST_SUB_TEXT_SETTINGS_COLOR_STYLE          "#6890FFFF"
+#define GENLIST_LIST_SUB_TEXT_SETTINGS_DIM_COLOR            62 86 153 255
+#define GENLIST_LIST_SUB_TEXT_SETTINGS_DIM_COLOR_STYLE      "#3E5699FF"
+
+#define GENLIST_LIST_SUB_TEXT_02_SIZE                       24
+#define GENLIST_LIST_SUB_TEXT_02_COLOR                      209 0 0 255
+
+#define GENLIST_CONTENTS_TEXT_SIZE                          28
+#define GENLIST_CONTENTS_TEXT_COLOR                         128 128 128 255
+#define GENLIST_CONTENTS_TEXT_COLOR_STYLE                   "#808080FF"
+
+#define GENLIST_LIST_BUBBLE_TEXT_SIZE                       32
+#define GENLIST_LIST_BUBBLE_TEXT_COLOR                      249 249 249 255
+#define GENLIST_LIST_BUBBLE_TEXT_FOCUS_COLOR                33 49 99 255
+#define GENLIST_LIST_BUBBLE_COLOR                           33 49 99 255
+#define GENLIST_LIST_BUBBLE_PRESS_COLOR                     250 250 250 255
+
+#define GENLIST_PROGRESS_MAIN_TEXT_SIZE                     32
+
+// Dialogue group
+#define GENLIST_DIALOGUE_GROUP_TITLE_SIZE               32
+#define GENLIST_DIALOGUE_GROUP_TITLE_COLOR              93 131 255 255
+#define GENLIST_DIALOGUE_GROUP_DIVIDER1_COLOR           82 82 82 255
+#define GENLIST_DIALOGUE_GROUP_DIVIDER2_COLOR           82 82 82 255
+
+#define GENLIST_APPS_NAME_SIZE                          30
+#define GENLIST_APPS_NAME_COLOR                         110 111 118 255
+#define GENLIST_APPS_INC_SIZE                           30
+#define GENLIST_APPS_INC_COLOR                          249 249 249 255
+#define GENLIST_APPS_RATING_SIZE                        24
+#define GENLIST_APPS_RATING_COLOR                       110 111 118 255
+#define GENLIST_APPS_PRICE_SIZE                         24
+#define GENLIST_APPS_PRICE_ORIGINAL_COLOR               93 131 255 255
+#define GENLIST_APPS_PRICE_SALE_COLOR                   209 0 0 255
+#define GENLIST_APPS_PRICE_FREE_COLOR                   93 131 255 255
+
+#define DIALOGUE_PASSWORD_TITLE_SIZE                    32
+#define DIALOGUE_PASSWORD_TITLE_COLOR                   249 249 249 255
+
+#define GENLIST_DIALOGUE_GROUP_HELP_TEXT_SIZE           32
+#define GENLIST_DIALOGUE_GROUP_HELP_TEXT_COLOR_STYLE    "#6E6F76FF"
+#define GENLIST_PART_MATCH_TAG_COLOR                    "+ color=#1382FF"
+
+#define GENLIST_EXPANDABLE_ARROW_NORMAL_COLOR           250 250 250 255
+#define GENLIST_EXPANDABLE_ARROW_DIM_COLOR              157 158 161 255
+#define GENLIST_EXPANDABLE_ARROW_PRESS_COLOR            250 250 250 255
+
+#define GENLIST_EXPANDABLE_ARROW_SHADOW_NORMAL_COLOR    0 0 0 0
+#define GENLIST_EXPANDABLE_ARROW_SHADOW_DIM_COLOR       0 0 0 0
+#define GENLIST_EXPANDABLE_ARROW_SHADOW_PRESS_COLOR     0 0 0 0
+
+#define GENLIST_EMAIL_TEXT_FOCUS_COLOR                  250 250 250 255
+#define GENLIST_EMAIL_TEXT_FOCUS_COLOR_STYLE            "#FAFAFAFF"
+
+#define GENLIST_EMAIL_MAIN_TEXT_UNREAD_COLOR_STYLE      "#FAFAFAFF"
+#define GENLIST_EMAIL_MAIN_TEXT_UNREAD_DIM_COLOR_STYLE  "#969696FF"
+#define GENLIST_EMAIL_MAIN_TEXT_READ_COLOR_STYLE        "#6E6F76FF"
+#define GENLIST_EMAIL_MAIN_TEXT_READ_DIM_COLOR_STYLE    "#4D4E5399"
+
+#define GENLIST_EMAIL_SUB_TEXT_UNREAD_COLOR_STYLE       "#6E6F76FF"
+#define GENLIST_EMAIL_SUB_TEXT_READ_COLOR_STYLE         "#6E6F76FF"
+
+#define GENLIST_EMAIL_COUNT_TEXT_UNREAD_COLOR           104 144 255 255
+#define GENLIST_EMAIL_COUNT_TEXT_UNREAD_COLOR_STYLE     "#6890FFFF"
+#define GENLIST_EMAIL_COUNT_TEXT_READ_COLOR             110 111 118 255
+#define GENLIST_EMAIL_COUNT_TEXT_READ_COLOR_STYLE       "#6E6F76FF"
+
+#define GENLIST_EMAIL_CONTENTS_TEXT_COLOR_STYLE         "#6E6F76FF"
+
+#define GENLIST_EMAIL_MATCH_TAG_COLOR                   "+ color=#1382FF"
+
+#define GENLIST_EMAIL_READ_BG_COLOR                      1 1 1 255
+#define GENLIST_EMAIL_UNREAD_BG_COLOR                    0 0 0 255
+
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_DIM_COLOR_INC "#151619FF"
+
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_DELETE_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_DELETE_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_TEXT_SHADOW_TEXTBLOCK_DELETE_DIM_COLOR_INC "#6D0000FF"
+
+#define BUTTON_NUMBER_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_NUMBER_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_NUMBER_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_NUMBER_TEXTBLOCK_DISABLE_VISIBLE_COLOR_INC "#B2B2B5FF"
+
+#define BUTTON_NUMBER_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_NUMBER_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_NUMBER_SHADOW_TEXTBLOCK_DIM_COLOR_INC "#242529FF"
+
+#define BUTTON_NUMBER_ICON_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_NUMBER_ICON_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_NUMBER_ICON_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_DISABLED_COLOR_INC "#B2B2B5FF"
+
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_SHADOW_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_SHADOW_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_TEXTBLOCK_SHADOW_DIM_COLOR_INC "#242529FF"
+
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_DISABLED_COLOR_INC "#96B882FF"
+
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_SHADOW_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_SHADOW_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_SEND_TEXTBLOCK_SHADOW_DIM_COLOR_INC "#002E6CFF"
+
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_DISABLED_COLOR_INC "#E89696FF"
+
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_SHADOW_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_SHADOW_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_SEARCH_BUTTON_CANCEL_TEXTBLOCK_SHADOW_DIM_COLOR_INC "#6D0000FF"
+
+#define BUTTON_TEXT_STYLE1_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_TEXTBLOCK_DISABLED_COLOR_INC "#A6A7A9FF"
+
+#define BUTTON_TEXT_STYLE1_DELETE_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_DELETE_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_DELETE_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_TEXT_STYLE1_DELETE_TEXTBLOCK_DISABLED_COLOR_INC "#E89696FF"
+
+#define BUTTON_SWEEP_BUTTON_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_SWEEP_BUTTON_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_SWEEP_BUTTON_SHADOW_TEXTBLOCK_DIM_COLOR_INC "#151619FF"
+
+#define BUTTON_SWEEP_BUTTON_DELETE_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_SWEEP_BUTTON_DELETE_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_SWEEP_BUTTON_DELETE_SHADOW_TEXTBLOCK_DIM_COLOR_INC "#6D0000FF"
+
+#define BUTTON_POPUP_BUTTON_TEXTBLOCK_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_POPUP_BUTTON_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_POPUP_BUTTON_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_POPUP_BUTTON_TEXTBLOCK_DISABLED_COLOR_INC "#6F6F70FF"
+
+#define BUTTON_POPUP_BUTTON_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_POPUP_BUTTON_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC "#000000FF"
+#define BUTTON_POPUP_BUTTON_SHADOW_TEXTBLOCK_DIM_COLOR_INC "#E8E8E9FF"
+
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_DEFAULT_STYLE_BUTTON_TEXTBLOCK_DISABLED_COLOR_INC "#FAFAFA99"
+
+#define BUTTON_CONTACT_BUTTON_TEXTBLOCK_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_CONTACT_BUTTON_TEXTBLOCK_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_CONTACT_BUTTON_TEXTBLOCK_FOCUSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_CONTACT_BUTTON_TEXTBLOCK_DISABLED_COLOR_INC "#7A7C81FF"
+
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_DEFAULT_COLOR_INC 250 250 250 255
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_DISABLED_COLOR_INC 129 138 161 255
+
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_DEFAULT_SHADOW_COLOR_INC 0 0 0 255
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_PRESSED_SHADOW_COLOR_INC 0 0 0 255
+#define BUTTON_NAVIFRAME_TITLE_ICON_CLIPPER_DISABLED_SHADOW_COLOR_INC 34 44 72 255
+
+#define BUTTON_CIRCLE_STYLE_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_CIRCLE_STYLE_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_CIRCLE_STYLE_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_CIRCLE_STYLE_CLIPPER_DEFAULT_COLOR_INC 0 0 0 255
+#define BUTTON_CIRCLE_STYLE_ICON_CLIPPER_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_CIRCLE_STYLE_ICON_CLIPPER_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_CIRCLE_STYLE_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_CIRCLE_STYLE_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_CIRCLE_STYLE_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_CIRCLE_STYLE_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_WARNING_STYLE_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_WARNING_STYLE_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_WARNING_STYLE_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_WARNING_STYLE_CLIPPER_NORMAL_COLOR_INC 0 0 0 0
+#define BUTTON_WARNING_STYLE_CLIPPER_PRESSED_COLOR_INC 0 0 0 0
+#define BUTTON_WARNING_STYLE_CLIPPER_DISABLED_COLOR_INC 0 0 0 0
+
+#define BUTTON_WARNING_STYLE_NORMAL_TOP_OFFSET_INC 0 1
+#define BUTTON_WARNING_STYLE_NORMAL_BOTTOM_OFFSET_INC -1 -1
+#define BUTTON_WARNING_STYLE_PRESSED_TOP_OFFSET_INC 0 0
+#define BUTTON_WARNING_STYLE_PRESSED_BOTTOM_OFFSET_INC -1 -1
+
+#define BUTTON_EDIT_STYLE_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_EDIT_STYLE_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_EDIT_STYLE_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_EDIT_STYLE_CLIPPER_DEFAULT_COLOR_INC 0 0 0 255
+#define BUTTON_EDIT_STYLE_ICON_CLIPPER_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_EDIT_STYLE_ICON_CLIPPER_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_EDIT_STYLE_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_EDIT_STYLE_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_EDIT_STYLE_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_EDIT_STYLE_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_CIRCLE_STYLE_MINUS_SHADOW_NORMAL_COLOR_INC 0 0 0 0
+#define BUTTON_CIRCLE_STYLE_MINUS_SHADOW_PRESSED_COLOR_INC 0 0 0 0
+#define BUTTON_CIRCLE_STYLE_MINUS_SHADOW_DISABLED_COLOR_INC 0 0 0 0
+
+#define BUTTON_CIRCLE_STYLE_MINUS_NORMAL_TOP_OFFSET_INC 0 0
+#define BUTTON_CIRCLE_STYLE_MINUS_NORMAL_BOTTOM_OFFSET_INC -1 -1
+#define BUTTON_CIRCLE_STYLE_MINUS_PRESSED_TOP_OFFSET_INC 0 0
+#define BUTTON_CIRCLE_STYLE_MINUS_PRESSED_BOTTOM_OFFSET_INC -1 -1
+
+#define BUTTON_CIRCLE_STYLE_MINUS_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_CIRCLE_STYLE_MINUS_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_CIRCLE_STYLE_MINUS_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_COLORSELECTOR_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_COLORSELECTOR_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_COLORSELECTOR_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_COLORSELECTOR_SHADOW_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_COLORSELECTOR_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_COLORSELECTOR_SHADOW_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_COLORSELECTOR_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_COLORSELECTOR_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_COLORSELECTOR_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_COLORSELECTOR_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_DATETIME_AMPM_BG_MIN_INC 95 60
+#define BUTTON_DATETIME_AMPM_TEXT_FONT_SIZE_INC 34
+
+#define BUTTON_SEARCH_BUTTON_BG_BORDER_INC 13 13 13 13
+#define BUTTON_SEARCH_BUTTON_BG_MIN_INC 100 66
+#define BUTTON_SEARCH_BUTTON_VISIBLE_BG_MIN_INC 148 66
+#define BUTTON_SEARCH_BUTTON_ICONONLY_BG_MIN_INC 66 66
+#define BUTTON_SEARCH_BUTTON_TEXT_FONT_SIZE_INC 30
+
+#define BUTTON_STYLE1_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_STYLE1_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_STYLE1_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_STYLE1_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_STYLE1_SHADOW_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_STYLE1_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_STYLE1_SHADOW_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_STYLE1_ICON_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_STYLE1_ICON_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_STYLE1_ICON_DISABLED_COLOR_INC 166 167 169 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 13 13 15 15
+#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 12 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 45 45
+#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 4 0
+#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 45 45
+#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 45 45
+#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 36
+
+#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 72 72
+#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 45 45
+#define BUTTON_CIRCLE_STYLE_CONTENT_MIN_MAX_INC 45 45
+#define BUTTON_CIRCLE_STYLE_LEFT_PADDING_MIN_MAX_INC 13 13
+#define BUTTON_CIRCLE_STYLE_RIGHT_PADDING_MIN_MAX_INC 14 14
+
+#define BUTTON_CIRCLE_NORMAL_MIN_WIDTH_INC 72
+#define BUTTON_CIRCLE_NORMAL_MIN_HEIGHT_INC 72
+#define BUTTON_CIRCLE_EXTENEDED_MIN_WIDTH_INC 110
+#define BUTTON_CIRCLE_EXTENEDED_MIN_HEIGHT_INC 110
+
+#define BUTTON_POPUP_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_POPUP_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_POPUP_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_POPUP_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_POPUP_SHADOW_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_POPUP_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_POPUP_SHADOW_DISABLED_COLOR_INC 231 232 232 255
+
+#define BUTTON_POPUP_ICON_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_POPUP_ICON_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_POPUP_ICON_DISABLED_COLOR_INC 81 82 82 255
+
+#define BUTTON_POPUP_BG_NORMAL_MIN_INC 30 76
+#define BUTTON_POPUP_BG_BORDER_INC 13 13 9 9
+#define BUTTON_POPUP_PADDING_MIN_INC 12 3
+#define BUTTON_POPUP_PADDING_ICON_TEXT_VISIBLE_MIN_INC 8 0
+#define BUTTON_POPUP_ICON_ICONONLY_MIN_INC 45 45
+#define BUTTON_POPUP_TEXT_FONT_SIZE_INC 36
+
+#define BUTTON_EDIT_STYLE_BG_NORMAL_MIN_MAX_INC 72 72
+#define BUTTON_EDIT_STYLE_IMAGE_NORMAL_MIN_MAX_INC 45 45
+
+#define BUTTON_EDIT_NORMAL_MIN_WIDTH_INC 72
+#define BUTTON_EDIT_NORMAL_MIN_HEIGHT_INC 72
+#define BUTTON_EDIT_EXTENDED_MIN_WIDTH_INC 90
+#define BUTTON_EDIT_EXTENDED_MIN_HEIGHT_INC 90
+
+#define BUTTON_EXPAND_BUTTON_TEXT_SIZE_INC 30
+
+#define BUTTON_EXPANDABLE_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_EXPANDABLE_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_EXPANDABLE_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_EXPANDABLE_PRESSED_BOTTOM_OFFSET_INC -1 -3
+
+#define BUTTON_EXPANDABLE_SHADOW_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_EXPANDABLE_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_EXPANDABLE_SHADOW_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_EXPANDABLE_NUMBER_BG_NORMAL_MIN_MAX_INC 92 45
+#define BUTTON_EXPANDABLE_NUMBER_BG_BORDER_INC 13 13 15 15
+#define BUTTON_EXPANDABLE_NUMBER_PADDING_MIN_INC 12 1
+#define BUTTON_EXPANDABLE_NUMBER_ICON_RECT_EXPAND_MIN_MAX_INC 18 45
+#define BUTTON_EXPANDABLE_NUMBER_TEXT_MIN_MAX_INC 50 45
+#define BUTTON_EXPANDABLE_NUMBER_FONT_SIZE_INC 28
+
+#define BUTTON_CONTACT_BG_MIN_INC 18 66
+#define BUTTON_CONTACT_BG_BORDER_INC 8 8 8 8
+#define BUTTON_CONTACT_LEFT_PADDING_MIN_INC 12 0
+#define BUTTON_CONTACT_RIGHT_PADDING_MIN_INC 12 0
+#define BUTTON_CONTACT_FONT_SIZE_INC 32
+
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC 85 98
+#define BUTTON_NAVIFRAME_LANDSCAPE_BACK_BUTTON_BG_MIN_MAX_INC 85 85
+#define BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC 63 63
+
+#define BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC 250 250 250 255
+#define BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC 250 250 250 255
+
+#define BUTTON_NAVIFRAME_TITLE_ICON_BG_MIN_MAX_INC 115 96
+#define BUTTON_NAVIFRAME_LANDSCAPE_TITLE_ICON_BG_MIN_MAX_INC 115 91
+#define BUTTON_NAVIFRAME_TITLE_ICON_IMAGE_MIN_MAX_INC 63 63
+
+#define BUTTON_NAVIFRAME_TITLE_TEXT_BG_MIN_INC 0 96
+#define BUTTON_NAVIFRAME_TITLE_TEXT_BG_MAX_INC 183 96
+#define BUTTON_NAVIFRAME_LANDSCAPE_TITLE_TEXT_BG_MIN_INC 0 91
+#define BUTTON_NAVIFRAME_LANDSCAPE_TITLE_TEXT_BG_MAX_INC 183 91
+#define BUTTON_NAVIFRAME_TITLE_TEXT_LEFT_PADDING_INC 16
+#define BUTTON_NAVIFRAME_TITLE_TEXT_TEXTBLOCK_MIN_INC 0 96
+#define BUTTON_NAVIFRAME_TITLE_TEXT_TEXTBLOCK_MAX_INC 151 96
+#define BUTTON_NAVIFRAME_LANDSCAPE_TITLE_TEXT_TEXTBLOCK_MIN_INC 0 91
+#define BUTTON_NAVIFRAME_LANDSCAPE_TITLE_TEXT_TEXTBLOCK_MAX_INC 151 91
+#define BUTTON_NAVIFRAME_TITLE_TEXT_BG_PRESSED_BORDER_INC 8 8 8 8
+#define BUTTON_NAVIFRAME_TITLE_TEXT_FONT_SIZE_INC 32
+#define BUTTON_NAVIFRAME_TITLE_TEXT_MIN_FONT_SIZE_INC 32
+#define BUTTON_NAVIFRAME_TITLE_TEXT_NORMAL_COLOR_INC "#FAFAFAFF"
+#define BUTTON_NAVIFRAME_TITLE_TEXT_SHADOW_NORMAL_COLOR_INC "#000000FF"
+#define BUTTON_NAVIFRAME_TITLE_TEXT_DISABLED_COLOR_INC "#818AA1FF"
+#define BUTTON_NAVIFRAME_TITLE_TEXT_SHADOW_DISABLED_COLOR_INC "#222C48FF"
+#define BUTTON_NAVIFRAME_TITLE_TEXT_PRESSED_COLOR_INC "#FAFAFAFF"
+#define BUTTON_NAVIFRAME_TITLE_TEXT_SHADOW_PRESSED_COLOR_INC "#000000FF"
+
+#define BUTTON_NAVIFRAME_MORE_BG_MIN_MAX_INC 85 98
+#define BUTTON_NAVIFRAME_LANDSCAPE_MORE_BG_MIN_MAX_INC 85 85
+#define BUTTON_NAVIFRAME_MORE_DEFAULT_IMAGE_MIN_MAX_INC 63 63
+#define BUTTON_NAVIFRAME_MORE_BOTTOM_PADDING_INC 0 17
+
+#define BUTTON_COLORSELECTOR_BG_DEFAULT_MIN_INC 74 74
+#define BUTTON_COLORSELECTOR_BG_BORDER_INC 13 13 15 15
+#define BUTTON_COLORSELECTOR_IMAGE_MIN_MAX_INC 45 45
+
+#define BUTTON_DEFAULT_STYLE_BG_MIN_INC 100 74
+#define BUTTON_DEFAULT_STYLE_BG_BORDER_INC 13 13 15 15
+#define BUTTON_DEFAULT_STYLE_PADDING_MIN_INC 12 5
+#define BUTTON_DEFAULT_STYLE_PADDING_ICON_TEXT_VISIBLE_MIN_INC 8 0
+#define BUTTON_DEFAULT_STYLE_ICONONLY_ICON_MIN_INC 45 45
+#define BUTTON_DEFAULT_STYLE_TEXT_MIN_INC 144 36
+#define BUTTON_DEFAULT_STYLE_FONT_SIZE_INC 36
+
+#define BUTTON_EDITFIELD_CLEAR_BUTTON_MIN_MAX_INC 60 60
+#define BUTTON_EDITFIELD_CLEAR_BUTTON_IMAGE_MIN_MAX_INC 54 54
+#define BUTTON_EDITFIELD_CLEAR_BUTTON_CLIPPER_DEFAULT_COLOR_INC 72 93 147 255
+#define BUTTON_EDITFIELD_CLEAR_BUTTON_CLIPPER_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_EDITFIELD_CLEAR_BUTTON_CLIPPER_DISABLED_COLOR_INC 56 70 108 255
+
+#define BUTTON_SEARCH_CLEAR_BUTTON_MIN_MAX_INC 60 60
+#define BUTTON_SEARCH_CLEAR_BUTTON_IMAGE_MIN_MAX_INC 45 45
+#define BUTTON_SEARCH_CLEAR_BUTTON_CLIPPER_DEFAULT_COLOR_INC 93 97 118 255
+#define BUTTON_SEARCH_CLEAR_BUTTON_CLIPPER_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_SEARCH_CLEAR_BUTTON_CLIPPER_DISABLED_COLOR_INC 56 58 71 153
+
+#define BUTTON_JUMP_SHADOW_NORMAL_COLOR_INC 0 0 0 255
+#define BUTTON_JUMP_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define BUTTON_JUMP_SHADOW_DISABLED_COLOR_INC 21 22 25 255
+
+#define BUTTON_JUMP_NORMAL_COLOR_INC 250 250 250 255
+#define BUTTON_JUMP_PRESSED_COLOR_INC 250 250 250 255
+#define BUTTON_JUMP_DISABLED_COLOR_INC 166 167 169 255
+
+#define BUTTON_JUMP_STYLE_BG_MIN_INC 74 74
+#define BUTTON_JUMP_TO_NORMAL_TOP_OFFSET_INC 0 2
+#define BUTTON_JUMP_TO_NORMAL_BOTTOM_OFFSET_INC -1 1
+#define BUTTON_JUMP_TO_PRESSED_TOP_OFFSET_INC 0 -2
+#define BUTTON_JUMP_TO_PRESSED_BOTTOM_OFFSET_INC -1 -3
+#define BUTTON_JUMP_TOP_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+#define BUTTON_JUMP_LEFT_PADDING_TO_SCROLLER_MIN_MAX_INC 26 18
+
+#define BUTTON_FOCUS_DIALOGUE_LEFT_PADDING_INC 16 0
+#define BUTTON_FOCUS_DIALOGUE_RIGHT_PADDING_INC 16 0
+
+#define CHECK_DEFAULT_TEXT_FONT_SIZE_INC 36
+
+#define CHECK_ONOFF_BG_NORMAL_MIN_MAX_INC 135 63
+#define CHECK_ONOFF_ON_FONT_SIZE_INC 24
+#define CHECK_ONOFF_OFF_FONT_SIZE_INC 24
+#define CHECK_ONOFF_HANDLER_MIN_MAX_INC 81 63
+
+#define CHECK_STYLE_FAVORITE_SMALL_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 45
+#define CHECK_STYLE_FAVORITE_SMALL_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 45
+
+#define CHECK_STYLE_FAVORITE_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 72
+#define CHECK_STYLE_FAVORITE_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 72
+#define CHECK_STYLE_FAVORITE_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 100
+#define CHECK_STYLE_FAVORITE_EXTENDED_BG_IMAGE_MIN_HEIGHT_INC 100
+#define CHECK_STYLE_FAVORITE_BG_NORMAL_MIN_MAX_INC 72 72
+
+#define CHECK_STYLE_DEFAULT_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 63
+#define CHECK_STYLE_DEFAULT_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 63
+#define CHECK_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 75
+#define CHECK_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_HEIGHT_INC 91
+#define CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC 63 63
+
+#define INDEX_BG_NINEPATCH_INC 8 8 8 8
+#define INDEX_ITEM_WIDTH_INC 52
+#define INDEX_ITEM_HEIGHT_INC 33
+#define INDEX_POPUP_BG_NINEPATCH_INC 22 22 22 22
+#define INDEX_POPUP_TEXT_COLOR_INC 250 250 250 255
+#define INDEX_POPUP_TEXT_SIZE_INC 136
+#define INDEX_ROLLOVER_TEXT_SIZE_INC 26
+#define INDEX_ROLLOVER_TEXT_COLOR_INC 160 159 154 255
+#define INDEX_ROLLOVER_ACTIVE_TEXT_COLOR_INC 93 131 255 255
+#define INDEX_DIVIDER_COLOR_INC 64 64 64 255
+#define INDEX_DIVIDER_WIDTH_INC 1
+#define INDEX_SCROLL_BG_LINE_COLOR_INC 64 64 64 255
+#define INDEX_SCROLL_BG_LINE_ACTIVE_COLOR_INC 79 102 197 255
+#define INDEX_SCROLL_BG_LINE_WIDTH_INC 3
+#define INDEX_POPUP_TOP_PADDING_SIZE_INC 10
+#define INDEX_POPUP_BOTTOM_PADDING_SIZE_INC 10
+#define INDEX_POPUP_LEFT_PADDING_SIZE_INC 34
+#define INDEX_POPUP_RIGHT_PADDING_SIZE_INC 34
+#define INDEX_POPUP_TEXT_WIDTH_INC 128
+#define INDEX_POPUP_TEXT_HEIGHT_INC 180
+#define INDEX_PADDING_SIZE_INC 3
+#define INDEX_ITEM_PADDING_SIZE_INC 2
+#define INDEX_SCROLL_BG_COLOR_INC 33 36 40 255
+
+#define INDEX_PAGECONTROL_IND_INC 52 9
+#define INDEX_PAGECONTROL_IND_MIN_INC 10 9
+#define INDEX_PAGECONTROL_FONT_SIZE_INC 28
+#define INDEX_PAGECONTROL_FONT_COLOR_INC 120 120 120
+
+#define RADIO_STYLE_DEFAULT_BG_IMAGE_MIN_WIDTH_INC 63
+#define RADIO_STYLE_DEFAULT_BG_IMAGE_MIN_HEIGHT_INC 63
+#define RADIO_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 76
+#define RADIO_STYLE_DEFAULT_EXTENDED_BG_IMAGE_MIN_WIDTH_INC 76
+#define RADIO_STYLE_DEFAULT_BG_MIN_MAX_INC 63 63
+#define RADIO_STYLE_DEFAULT_FONT_SIZE_INC 36
+
+#define PANES_STYLE_DEFAULT_MOVABLE_SIZE_INC 65
+#define PANES_STYLE_DEFAULT_PADDING_LEFT_SIZE_INC 26
+#define PANES_STYLE_DEFAULT_PADDING_RIGHT_SIZE_INC 26
+#define PANES_STYLE_DEFAULT_MIDDLE_SIZE_INC 26
+#define PANES_STYLE_DEFAULT_FIXED_SIZE_INC 57
+
+#define SEGMENT_CONTROL_DEFAULT_ITEM_TEXT_COLOR_NORMAL_INC 153 153 153 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_PRESSED_INC 59 115 182 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_SELECTED_INC 59 115 182 255
+#define SEGMENT_CONTROL_ITEM_TITLE_TEXT_COLOR_DISABLED_INC 153 153 153 255
+
+#define SEGMENT_CONTROL_MULTILINE_TEXT_SIZE_INC 30
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MIN_INC 12
+#define SEGMENT_CONTROL_TEXT_SIZE_RANGE_MAX_INC 28
+#define SEGMENT_CONTROL_DIVIDER_LINE_MIN_SIZE_INC 4 32
+#define SEGMENT_CONTROL_DIVIDER_LEFT_COLOR_INC 211 209 203 255
+#define SEGMENT_CONTROL_DIVIDER_RIGHT_COLOR_INC 255 255 255 255
+#define SEGMENT_CONTROL_TEXT_PADDING_MIN_SIZE_INC 18 0
+#define SEGMENT_CONTROL_VISIBLE_ICON_RECT_MIN_MAX_INC 40 40
+#define SEGMENT_CONTROL_BADGE_TEXT_LEFT_PADDING_MIN_INC 22 45
+#define SEGMENT_CONTROL_BADGE_TEXT_RIGHT_PADDING_MIN_INC 18 47
+#define SEGMENT_CONTROL_BADGE_TEXT_COLOR_INC 10 100 208 255;
+#define SEGMENT_CONTROL_BADGE_TEXT_FONT_SIZE_INC 26;
+
+#define EDITFIELD_TITLE_SIZE_INC 32
+#define EDITFIELD_TITLE_COLOR_INC 110 111 118 255
+#define EDITFIELD_GUIDE_TEXT_COLOR_INC 121 131 138 255
+#define EDITFIELD_DEFAULT_ERASER_MINW_INC 48
+#define EDITFIELD_DEFAULT_ERASER_MINH_INC 48
+#define EDITFIELD_DEFAULT_ERASER_EVENT_MINW_INC 48
+#define EDITFIELD_DEFAULT_ERASER_EVENT_MINH_INC 70
+#define EDITFIELD_DEFAULT_MINH_INC 112
+#define EDITFIELD_TITLE_MINH_INC 128
+#define EDITFIELD_DEFAULT_TOP1_SINGLE_INC 27
+#define EDITFIELD_DEFAULT_TOP1_MULTI_INC 56
+#define EDITFIELD_DEFAULT_TOP2_INC 8
+#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 25
+#define EDITFIELD_DEFAULT_BOTTOM1_MULTI_INC 8
+#define EDITFIELD_DEFAULT_BOTTOM2_MULTI_INC 12
+#define EDITFIELD_ERASER_DEFAULT_COLOR_INC 79 93 147 255
+#define EDITFIELD_ERASER_PRESSED_COLOR_INC 250 250 250 255
+
+#define BUTTON_TICKERNOTI_NORMAL_COLOR_INC        225 215 215 255
+#define BUTTON_TICKERNOTI_PRESSED_COLOR_INC       255 255 255 255
+#define BUTTON_TICKERNOTI_DISABLED_COLOR_INC      225 215 215 76
+
+#define BUTTON_DISCLIP_NORMAL_COLOR_INC           255 255 255 255
+#define BUTTON_DISCLIP_DISABLED_COLOR_INC         255 255 255 153
+
+#define CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC        "#FFFFFFFF"
+#define CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC      "#FFFFFF80"
+#define CHECK_DISCLIP_NORMAL_COLOR_INC             255 255 255 255
+#define CHECK_DISCLIP_DISABLED_COLOR_INC           255 255 255 128
+
+#define RADIO_DEFAULT_TEXT_NORMAL_COLOR_INC        "#FFFFFFFF"
+#define RADIO_DEFAULT_TEXT_DISABLED_COLOR_INC      "#FFFFFF80"
+#define RADIO_DISCLIP_NORMAL_COLOR_INC             255 255 255 255
+#define RADIO_DISCLIP_DISABLED_COLOR_INC           255 255 255 128
+
+#define CONTROLBAR_LARGE_HEIGHT_INC 122
+
+#define MULTIBUTTONENTRY_BG_COLOR_INC 29 38 60 255
+#define MULTIBUTTONENTRY_WIDTH_PAD_INC 26
+#define MULTIBUTTONENTRY_HEIGHT_PAD_INC 16
+#define MULTIBUTTONENTRY_BOX_HORIZONTAL_PAD_INC 8
+#define MULTIBUTTONENTRY_BOX_VERTICAL_PAD_INC 16
+#define MULTIBUTTONENTRY_LABEL_HEIGHT_INC 66 // same as button
+#define MULTIBUTTONENTRY_LABEL_PAD_INC 8
+#define MULTIBUTTONENTRY_LABEL_TEXT_SIZE_INC 36
+#define MULTIBUTTONENTRY_LABEL_TEXT_COLOR_INC "#FAFAFA"
+#define MULTIBUTTONENTRY_LABEL_TEXT_SHADOW_COLOR_INC "#000000"
+#define MULTIBUTTONENTRY_GUIDE_HEIGHT_INC 66 // same as button
+#define MULTIBUTTONENTRY_GUIDE_TEXT_SIZE_INC 36
+#define MULTIBUTTONENTRY_GUIDE_TEXT_COLOR_INC "#485D93" //same as editfield
+#define MULTIBUTTONENTRY_BUTTON_HEIGHT_INC 66
+#define MULTIBUTTONENTRY_BUTTON_PAD_INC 12
+#define MULTIBUTTONENTRY_BUTTON_NINEPATCH_INC 8 8 17 17
+#define MULTIBUTTONENTRY_BUTTON_TEXT_SIZE_INC 32
+#define MULTIBUTTONENTRY_BUTTON_TEXT_COLOR_INC "#FAFAFA"
+#define MULTIBUTTONENTRY_BUTTON_TEXT_DIM_COLOR_INC "#7A7C81"
+#define MULTIBUTTONENTRY_NUMBER_TEXT_SIZE_INC 32
+#define MULTIBUTTONENTRY_NUMBER_TEXT_COLOR_INC 250 250 250 255 // same as multibuttonentry label
+#define MULTIBUTTONENTRY_NUMBER_TEXT_SHADOW_COLOR_INC 0 0 0 255 // same as multibuttonentry label
+#define MULTIBUTTONENTRY_CLOSEDBUTTON_SIZE_INC 64
+
+#define SEARCHBAR_CANCEL_BUTTON_W_INC 136
+#define SEARCHBAR_CANCEL_BUTTON_WITH_DOUBLE_PADDING_W_INC 166
+#define SEARCHBAR_CANCEL_BUTTON_LEFT_PADDING_INC 10
+#define SEARCHBAR_TOP_PADDING_INC 17
+#define SEARCHBAR_BOTTOM_PADDING_INC 16
+#define SEARCHBAR_BASE_HEIGHT_INC 99
+#define SEARCHBAR_HEIGHT_INC 66
+#define SEARCHBAR_WIDTH_INC 120
+#define SEARCHBAR_LEFT_PADDING_INC 16
+#define SEARCHBAR_RIGHT_PADDING_INC 16
+#define SEARCHBAR_H_INC 99
+
+#define SELECTION_INFO_BACKGROUND_COLOR_INC          43 58 175 255
+#define SELECTION_INFO_TEXT_COLOR_INC                250 250 250 255
+#define SELECTION_INFO_MIN_VER_W_INC                 720
+#define SELECTION_INFO_MIN_HORZ_W_INC                1280
+#define SELECTION_INFO_VER_PADDING_INC               48
+#define SELECTION_INFO_LEFT_PADDING_INC              16
+#define SELECTION_INFO_TEXT_FONT_SIZE_INC            32
+#define SELECTION_INFO_SHADOW_VER_W_INC              720
+#define SELECTION_INFO_SHADOW_VER_H_INC              9
+#define SELECTION_INFO_SHADOW_HORZ_W_INC             1280
+#define SELECTION_INFO_SHADOW_HORZ_H_INC             9
+#define SELECTION_INFO_MIN_VER_BOTTOM_64_H_INC       150
+#define SELECTION_INFO_MIN_VER_BOTTOM_86_H_INC       186
+
+#define POPUP_ITEM_BG_DEFAULT_MIN_INC 614 112
+#define POPUP_ITEM_LEFT_MIN_PADDING_INC 24 0
+#define POPUP_ITEM_RIGHT_MIN_PADDING_INC 24 0
+#define POPUP_ITEM_ICON_TEXT_PADDING_INC 16 0
+#define POPUP_ITEM_TEXT_DISABLED_COLOR_INC 250 250 250 153
+#define POPUP_ITEM_TEXT_DISABLED_VISIBLE_COLOR_INC 250 250 250 153
+
+#define POPUP_ITEM_BG_LANDCAPE_MIN_INC 794 112
+
+#define POPUP_DEFAULT_TITLE_TEXT_COLOR_INC "#FAFAFA"
+#define POPUP_DEFAULT_TITLE_TEXT_SHADOW_COLOR "#000000"
+#define POPUP_DEFAULT_TITLE_TEXT_SHADOW_STYLE "far_shadow,bottom"
+#define POPUP_DEFAULT_DESCRIPTION_TEXT_COLOR_INC "#FFFFFF"
+#define POPUP_DIM_BG_DEFAULT_COLOR_INC 0 0 0 0
+#define POPUP_DIM_BG_COLOR_INC 0 0 0 128
+#define POPUP_DIM_BG_CLICKED_COLOR_INC 0 0 0 128
+#define POPUP_DIM_BG_TRANS_COLOR_INC 0 0 0 0
+#define POPUP_DIM_BG_CLICKED_TRANS_COLOR_INC 0 0 0 50
+
+#define POPUP_BASE_DEFAULT_TEXT_MIN_FONT_SIZE_INC 42
+#define POPUP_BASE_DEFAULT_TEXT_FONT_SIZE_INC 50
+#define POPUP_DESCRIPTION_DEFAULT_TEXT_FONT_SIZE_INC 38
+
+#define POPUP_BASE_DEFAULT_BASE_DEFAULT_MIN_INC 652 0
+#define POPUP_BASE_DEFAULT_BASE_DEFAULT_MAX_INC 652 1280
+#define POPUP_BASE_DEFAULT_BASE_LANDSCAPE_MIN_INC 832 0
+#define POPUP_BASE_DEFAULT_BASE_LANDSCAPE_MAX_INC 832 720
+#define POPUP_BASE_DEFAULT_BG_DEFAULT_IMAGE_BORDER_INC 26 26 32 47
+#define POPUP_BASE_DEFAULT_TITLE_DEFAULT_IMAGE_BORDER_INC 12 13 30 31
+#define POPUP_BASE_DEFAULT_BUTTON_BG_IMAGE_BORDER_INC 12 13 30 31
+#define POPUP_BASE_DEFAULT_TITLE_DEFAULT_MIN_INC 620 78
+#define POPUP_BASE_DEFAULT_TITLE_LANDSCAPE_MIN_INC 800 78
+#define POPUP_BASE_DEFAULT_PADDING_MIN_MAX_INC 26 0
+#define POPUP_BASE_DEFAULT_TITLE_ICON_DEFAULT_MIN_MAX_INC 64 64
+#define POPUP_BASE_DEFAULT_CONTENT_DEFAULT_MIN_MAX_INC 630 0
+#define POPUP_BASE_DEFAULT_CONTENT_LANDSCAPE_MIN_MAX_INC 810 0
+#define POPUP_BASE_DEFAULT_BUTTON_BG_DEFAULT_MIN_INC 596 96
+
+#define POPUP_DESC_LEFT_PADDING 16
+#define POPUP_DESC_RIGHT_PADDING 16
+#define POPUP_DESC_TOP_PADDING 14
+#define POPUP_DESC_BOTTOM_PADDING 16
+#define POPUP_LABEL_DESC_TOP_PADDING 32
+#define POPUP_LABEL_DESC_BOTTOM_PADDING 32
+#define POPUP_ACTION_DESC_TOP_PADDING 2
+#define POPUP_TITLE_LEFT_PADDING 26
+#define POPUP_TITLE_RIGHT_PADDING 26
+#define POPUP_TITLE_TOP_PADDING 0
+#define POPUP_TITLE_BOTTOM_PADDING 0
+#define POPUP_TITLE_ICON_TEXT_PADDING_INC 16 10
+
+#define POPUP_CONTENT_DEFAULT_PADDING_TOP_MIN_INC 32
+#define POPUP_CONTENT_DEFAULT_PADDING_LEFT_MIN_INC 40
+#define POPUP_CONTENT_DEFAULT_PADDING_RIGHT_MIN_INC 40
+#define POPUP_CONTENT_DEFAULT_PADDING_BOTTOM_MIN_INC 32
+#define POPUP_CONTENT_DEFAULT_CONTENT_DEFAULT_MIN_INC 630 0
+#define POPUP_CONTENT_DEFAULT_CONTENT_LANDSCAPE_MIN_INC 810 0
+
+#define POPUP_BASE_CONTENT_EXPAND_BG_DEFAULT_MIN_INC 0 96
+#define POPUP_BASE_CONTENT_EXPAND_TITLE_DEFAULT_MIN_INC 0 78
+
+#define POPUP_BASE_VERTICAL_BUTTON_BUTTONAREA_DEFAULT_MIN_INC 596 296
+
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_TOP_MIN_INC 0 10
+#define POPUP_BUTTON3_VERTICAL_ACTION_AREA_HEIGHT "296"
+#define POPUP_BUTTON3_VERTICAL_BUTTON_BUTTON_MIN_MAX_INC 394 76
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_BUTTON_MIN_INC 0 24
+#define POPUP_BUTTON3_VERTICAL_BUTTON_PADDING_BUTTON_MAX_INC 9999 24
+
+#define POPUP_CONTENT_LISTSTYLE_PADDING_TOP_MIN_MAX_INC 0 20
+#define POPUP_CONTENT_LISTSTYLE_CONTENT_DEFAULT_MIN_INC 568 408
+#define POPUP_CONTENT_LISTSTYLE_PADDING_RIGHT_MIN_INC 0 0
+
+#define POPUP_CONTENT_MINSTYLE_LEFT_PADDING_MIN_INC 17
+#define POPUP_CONTENT_MINSTYLE_RIGHT_PADDING_MIN_INC 17
+#define POPUP_CONTENT_MINSTYLE_CONTENT_DEFAULT_MIN_INC 568 0
+#define POPUP_CONTENT_MINSTYLE_CONTENT_LANDSCAPE_MIN_INC 866 0
+#define POPUP_CONTENT_VOLUMEBAR_STYLE_CONTENT_DEFAULT_MIN_INC 596 134
+#define POPUP_CONTENT_VOLUMEBAR_TEXT_STYLE_CONTENT_DEFAULT_MIN_INC 596 250
+#define POPUP_BASE_VOLUMEBAR_STYLE_BUTTONAREA_BG_DEFAULT_MIN_INC 648 134
+
+#define POPUP_BUTTON_DEFAULT_ACTION_AREA_HEIGHT "96"
+#define POPUP_BUTTON1_DEFAULT_BUTTON1_DEFAULT_MIN_INC 394 76
+#define POPUP_BUTTON1_DEFAULT_BUTTON1_DEFAULT_MAX_INC 596 76
+#define POPUP_BUTTON2_DEFAULT_HEIGHT_INC 76
+#define POPUP_BUTTON2_DEFAULT_BUTTON_DEFAULT_MIN_MAX_INC 314 76
+#define POPUP_BUTTON2_DEFAULT_PADDING_BUTTON_MIN_MAX_INC 16 76
+#define POPUP_BUTTON2_DEFAULT_PADDING_LEFT_RIGHT_WIDTH_INC 28
+#define POPUP_BUTTON3_DEFAULT_HEIGHT_INC 76
+#define POPUP_BUTTON3_DEFAULT_PADDING_BUTTON_MIN_MAX_INC 10 76
+#define POPUP_BUTTON3_DEFAULT_PADDING_LEFT_RIGHT_WIDTH_INC 28
+
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_TEXT_COLOR_INC          110 111 118 255
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_STATUS_TEXT_COLOR_INC          110 111 118 255
+#define PROGRESSBAR_LIST_PROGRESS_HEIGHT_INC 27
+#define PROGRESSBAR_LIST_PENDING_HEIGHT_INC 27
+#define PROGRESSBAR_PROGRESS_CIRCLE_BG_SIZE_INC 126 126
+#define PROGRESS_BG_IMAGE_BORDER_INC 17 17 0 0
+#define PROGRESS_BAR_IMAGE_BORDER_INC 8 8 0 0
+#define PROGRESS_BAR_IMAGE_PADDING_SIZE_INC 6 0
+
+#define NOCONTENT_TEXT_BLOCK_STYLE_COLOR_INC "#FAFAFA"
+#define NOCONTENT_TEXT_BLOCK_STYLE_COLOR_DIM_INC "#A2A5AE"
+#define NOCONTENT_HELP_TEXT_BLOCK_STYLE_COLOR_INC "#6E6F76"
+#define NOCONTENT_TEXT_BLOCK_TEXT_SIZE_INC   36
+#define NOCONTENT_HELP_TEXT_BLOCK_TEXT_SIZE_INC 32
+#define NOCONTENT_IMAGE_WIDTH_HEIGHT_INC     252 252
+#define NOCONTENT_BG_COLOR_INC               0 0 0 0
+#define NOCONTENT_TEXT_STYLE_BG_MIN_INC      0 68
+#define NOCONTENT_BASE_SEARCH_PADDING_INC    40
+#define NOCONTENT_PORTRAIT_HELP_TEXT_STYLE_BG_MIN_INC 0 152
+#define NOCONTENT_LANDSCAPE_HELP_TEXT_STYLE_BG_MIN_INC 0 78
+#define NOCONTENT_IMAGE_COLOR_INC            250 250 250 255
+#define NOCONTENT_SWALLOW_AREA_MIN_INC       0 74
+#define NOCONTENT_PORTRAIT_AFTER_HELP_TEXT_PADDING_INC 70 94
+#define NOCONTENT_LANDSCAPE_AFTER_HELP_TEXT_PADDING_INC 180 18
+#define NOCONTENT_PORTRAIT_AFTER_TEXT_PADDING_INC    70 96
+#define NOCONTENT_LANDSCAPE_AFTER_TEXT_PADDING_INC    180 16
+#define NOCONTENT_BASE_PORTRAIT_MIN_WIDTH_HEIGHT_INC 0 320
+#define NOCONTENT_BASE_LANDS_MIN_WIDTH_HEIGHT_INC 0 320
+#define NOCONTENT_BASE_PORTRAIT_MIN_WIDTH_HEIGHT_WITH_TEXT 0 736
+#define NOCONTENT_BASE_LANDS_MIN_WIDTH_HEIGHT_WITH_TEXT 0 504
+
+#define ENTRY_TEXT_SIZE_INC 44
+#define ENTRY_TEXT_COLOR_INC "#FAFAFA"
+#define ENTRY_DISABLED_TEXT_COLOR_INC "#FAFAFA99"
+#define ENTRY_GUIDE_TEXT_COLOR_INC "#5D6176"
+#define ENTRY_CURSOR_COLOR_INC 58 114 255 255
+#define ENTRY_PREEDIT_BACKGROUND_COLOR_INC "#FAFAFA"
+#define ENTRY_PREEDIT_TEXT_COLOR_INC "#000000"
+#define ENTRY_PREEDIT_UNDERLINE_COLOR_INC "#FAFAFA"
+#define ENTRY_PREEDIT_SUB1_COLOR_INC "#2EA8E1"
+#define ENTRY_PREEDIT_SUB2_COLOR_INC "#9962C3"
+#define ENTRY_PREEDIT_SUB3_COLOR_INC "#76DE37"
+#define ENTRY_PREEDIT_SUB4_COLOR_INC "#999999"
+#define ENTRY_SELECTION_BG_COLOR 19 106 144 255
+#define ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE 51 79
+#define ENTRY_SELECTION_EDGE_COLOR 59 115 182 255
+#define ENTRY_SELECTION_BLOCK_HANDLE_EDGE_WIDTH 4
+#define ENTRY_TOP_BOTTOM_PADDING_HEIGHT 3
+#define MAGNIFIER_HEIGHT_FILL 182
+#define MAGNIFIER_HEIGHT_FIXED 164
+#define MAGNIFIER_WIDTH_FIXED 325
+
+#define ENTRY_EDITFIELD_TEXT_SIZE_INC 44
+#define ENTRY_EDITFIELD_TEXT_COLOR_INC "#FAFAFA"
+#define ENTRY_EDITFIELD_DISABLED_TEXT_COLOR_INC "#FAFAFA99"
+#define ENTRY_EDITFIELD_GUIDE_TEXT_COLOR_INC "#485D93"
+
+#define ENTRY_EDITFIELD_SEARCHBAR_TEXT_SIZE_INC 36
+#define ENTRY_EDITFIELD_SEARCHBAR_TEXT_COLOR_INC "#FAFAFA"
+#define ENTRY_EDITFIELD_SEARCHBAR_DISABLED_TEXT_COLOR_INC "#969696"
+#define ENTRY_EDITFIELD_SEARCHBAR_GUIDE_TEXT_COLOR_INC "#5D6176"
+#define ENTRY_EDITFIELD_SEARCHBAR_DISABLED_GUIDE_TEXT_COLOR_INC "#969696"
+
+#define ENTRY_FONT_COLOR_BLACK_TEXT_COLOR_INC "#000000"
+#define ENTRY_FONT_COLOR_BLACK_DISABLED_TEXT_COLOR_INC "#00000080"
+#define ENTRY_FONT_COLOR_BLACK_GUIDE_TEXT_COLOR_INC "#90A9C7"
+
+#define BUBBLE_LAYOUT_SELECT_PAD 10
+#define BUBBLE_LAYOUT_BOTTOM_PAD 20
+
+#define ENTRY_BUBBLE_CALLERID_PAD 115
+#define ENTRY_BUBBLE_CALLERID_ICON_PAD 16
+#define ENTRY_BUBBLE_CALLERID_WIDTH 99
+#define ENTRY_BUBBLE_CALLERID_HEIGHT 99
+#define ENTRY_BUBBLE_GROUPCHAT_PAD 42
+#define ENTRY_BUBBLE_GROUPCHAT_TEXT_PAD 38
+#define ENTRY_BUBBLE_STATUS_PAD 140
+#define ENTRY_BUBBLE_READ_LEFTTOP_PAD 58 14
+#define ENTRY_BUBBLE_READ_RIGHTTOP_PAD 20 14
+#define ENTRY_BUBBLE_READ_RIGHTBOTTOM_PAD 20 14
+#define ENTRY_BUBBLE_SENT_LEFTTOP_PAD 20 14
+#define ENTRY_BUBBLE_SENT_RIGHTTOP_PAD 58 14
+#define ENTRY_BUBBLE_SENT_LEFTBOTTOM_PAD 20 14
+#define ENTRY_BUBBLE_MIDDLE_PAD 14
+#define ENTRY_BUBBLE_STATUS_TEXT_ICON_PAD 10 14
+#define ENTRY_BUBBLE_STATUS_TIME_SIZE 100 30
+#define ENTRY_BUBBLE_ICON_TOP_PAD 12
+#define ENTRY_BUBBLE_ICON_PAD 10
+#define ENTRY_BUBBLE_TEXT_MIN 82 50
+#define ENTRY_BUBBLE_TEXT_SIZE 38
+#define ENTRY_BUBBLE_SENT_TEXT_COLOR "#000000"
+#define ENTRY_BUBBLE_SENT_TEXT_SHADOW_STYLE "shadow,bottom"
+#define ENTRY_BUBBLE_SENT_TEXT_SHADOW_COLOR "#ffffff7f"
+#define ENTRY_BUBBLE_RECEV_TEXT_COLOR "#000000"
+#define ENTRY_BUBBLE_RECEV_TEXT_SHADOW_STYLE "shadow,bottom"
+#define ENTRY_BUBBLE_RECEV_TEXT_SHADOW_COLOR "#ffffff7f"
+#define ENTRY_BUBBLE_RECEV_BG_BORDER_INC 55 24 55 15
+#define ENTRY_BUBBLE_SENT_BG_BORDER_INC 24 55 55 15
+#define ENTRY_BUBBLE_STATUS_TIME_TEXT_SIZE_INC 22
+#define ENTRY_BUBBLE_SENT_STATUS_TIME_COLOR_INC 110 111 118 255
+#define ENTRY_BUBBLE_READ_STATUS_TIME_COLOR_INC 110 111 118 255
+#define ENTRY_BUBBLE_GROUPCHAT_SIZE_INC 30
+#define ENTRY_BUBBLE_GROUPCHAT_COLOR_INC 110 111 118 255
+
+/* not used in elm/entry/base-noedit/{read,sent}message */
+#define ENTRY_BUBBLE_EX_PAD 58
+#define ENTRY_BUBBLE_EX_CALLERID_PAD 178
+#define ENTRY_BUBBLE_IX_PAD 20
+#define ENTRY_BUBBLE_Y_PAD 15
+#define ENTRY_BUBBLE_DATE_AREA_TEXT_SIZE_INC 26
+#define ENTRY_BUBBLE_CALLERID_RELATIVE_INC 0.0 0.0
+#define ENTRY_BUBBLE_RECEV_CALLERID_REL_INC 1.0 0.0
+#define ENTRY_BUBBLE_TEXT_CALLID_REL2_X_INC "elm.rect.right.pad"
+#define ENTRY_BUBBLE_READ_TEXT_CALLID_REL1_X_INC "elm.rect.left.pad"
+#define ENTRY_BUBBLE_TEXT_CALLID_REL2_Y_INC "elm.rect.groupchat.text.pad"
+#define ENTRY_BUBBLE_STATUS_TIME_PAD_MIN_H_INC 14
+#define ENTRY_BUBBLE_STATUS_TIME_PAD_REL_INC 0.0 1.0
+#define ENTRY_BUBBLE_READ_STATUS_TIME_PAD_REL_INC 1.0 1.0
+#define ENTRY_BUBBLE_GROUPCHART_ENABLE_INC 1
+#define ENTRY_BUBBLE_GROUPCHART_PAD 36 30
+#define ENTRY_BUBBLE_GROUPCHART_WITH_CALLERID_PAD 158 30
+#define ENTRY_BUBBLE_READ_STATUS_REL_INC 1.0 0.0
+#define ENTRY_BUBBLE_READ_TIME_REL_INC 1.0 1.0
+
+#define ENTRY_SEARCH_ICON_MIN_MAX_INC 45 45
+#define ENTRY_SEARCH_ICON_CLIPPER_DEFAULT_COLOR_INC 93 97 118 255
+#define ENTRY_SEARCH_ICON_CLIPPER_DISABLED_COLOR_INC 56 58 71 255
+#define ENTRY_SEARCH_ICON_LEFT_PADDING_MIN_MAX_INC 6 0
+#define ENTRY_SEARCH_ICON_RIGHT_PADDING_MIN_MAX_INC 16 0
+
+#define SLIDER_INDICATOR_TEXT_COLOR_INC      "#FAFAFAFF"
+#define SLIDER_INDICATOR_TEXT_PRESSED_COLOR_INC      "#FAFAFAFF"
+#define SLIDER_INDICATOR_TEXT_DIM_COLOR_INC      "#AAAAACFF"
+#define SLIDER_INDICATOR_TEXT_SHADOW_TEXTBLOCK_NORMAL_COLOR_INC    "#000000FF"
+#define SLIDER_INDICATOR_TEXT_SHADOW_TEXTBLOCK_PRESSED_COLOR_INC    "#000000FF"
+#define SLIDER_INDICATOR_TEXT_SHADOW_TEXTBLOCK_DIM_COLOR_INC        "#212226FF"
+#define SLIDER_UNITS_TEXT_COLOR_INC      250 250 250 158
+#define SLIDER_UNITS_TEXT_SIZE_INC  30
+#define SLIDER_INDICATOR_TEXT_SIZE_INC  42
+#define SLIDER_BASE_HEIGHT_INC  34
+#define SLIDER_BASE_MIN_WIDTH_INC 375
+#define SLIDER_SWALLOW_BAR_MIN_WIDTH_INC  72
+#define SLIDER_SWALLOW_BAR_HEIGHT_INC  74
+#define SLIDER_INDICATOR_IMAGE_BORDER_INC  32 32 32 32
+#define SLIDER_INDICATOR_IMAGE_PADDING_SIZE_INC  12 0
+#define SLIDER_INDICATOR_MAX_WIDTH_INC 90
+#define SLIDER_INDICATOR_WIDTH_INC 48
+#define SLIDER_INDICATOR_HEIGHT_INC 72
+#define SLIDER_ICON_CLIPPER_COLOR_INC 250 250 250 153
+#define SLIDER_ICON_DISABLED_COLOR_INC 150 150 150 153
+#define SLIDER_CENTER_POINT_PADDING_SIZE_INC 0 9
+#define SLIDER_UNITS_TEXT_NUM_SIZE_INC 48
+#define SLIDER_UNITS_TEXTSTYLE_SIZE_INC 28
+
+#define SLIDER_INDICATOR_POPUP_TEXT_COLOR_INC 76 81 88 255
+#define SLIDER_INDICATOR_POPUP_TEXT_SIZE_INC 72
+#define SLIDER_INDICATOR_POPUP_HEIGHT_INC 99
+#define SLIDER_INDICATOR_POPUP_MIN_WIDTH_INC 90
+#define SLIDER_INDICATOR_POPUP_BG_IMAGE_WIDTH_INC 35
+#define SLIDER_INDICATOR_POPUP_BG_CENTER_IMAGE_SIZE_INC 18 99
+#define SLIDER_INDICATOR_POPUP_PADDING_MIN_SIZE_INC 12 0
+#define SLIDER_INDICATOR_POPUP_LEFT_BG_BORDER_INC 16 0 0 0
+#define SLIDER_INDICATOR_POPUP_RIGHT_BG_BORDER_INC 0 16 0 0
+#define SLIDER_CENTER_POINT_MIN_SIZE_INC 18 27
+#define SLIDER_CENTER_POINT_MAX_SIZE_INC 18 27
+#define SLIDER_BAR_RIGHT_PADDING_SIZE_INC 16 0
+
+#define TICKER_NOTI_DEFAULT_TEXT_COLOR_INC "#FAFAFA"
+#define TICKER_NOTI_DEFAULT_TEXT2_COLOR_INC "#FFFFFF"
+
+#define DATETIME_WIDGET_HEIGHT                     74
+#define DATETIME_FIELD_LEFT_PADDING_SIZE_INC       5 74
+#define DATETIME_FIELD_RIGHT_PADDING_SIZE_INC      5 74
+#define DATETIME_FIELD_PICKER_PADDING_SIZE_INC     40 74
+#define DATETIME_FIELD_MIN_SIZE_INC                0 74
+#define DATETIME_SEPARATOR_MIN_SIZE_INC            10 74
+#define DATETIME_WIDGET_PADDING_SIZE_INC           36 74
+#define DATETIME_TEXT_FONT_SIZE_INC                44
+#define DATETIME_SEPARATOR_TEXT_FONT_SIZE_INC      44
+#define DATETIME_TEXT_NORMAL_COLOR_INC             250 250 250 255
+#define DATETIME_SEPARATOR_TEXT_COLOR_INC          250 250 250 255
+#define DATETIME_TEXT_SELECTED_COLOR_INC           255 255 255 255
+#define DATETIME_BG_IMAGE_BORDER_INC               13 13 15 15
+#define DATETIME_LEFT_PADDING_SIZE_INC             27 112
+#define DATETIME_PICKER_BG_PADDING_SIZE_INC        12 0
+
+#define DATETIME_LABEL_TEXT_BLOCK_STYLE_COLOR_INC  250 250 250 255
+#define DATETIME_LABEL_TEXT_BLOCK_STYLE_SELECTED_COLOR_INC  250 250 250 255
+#define DATETIME_LABEL_DATE_FIELD_BG_IMAGE_BORDER_INC   8 8 21 22
+#define DATETIME_LABEL_DATE_FIELD_MIN_WIDTH_INC   104
+#define DATETIME_LABEL_TIME_FIELD_MIN_WIDTH_INC   69
+#define DATETIME_LABEL_DATE_FIELD_HEIGHT_INC      48
+
+#define DATETIME_POPUP_CONTENT_SIZE_INC 652 216
+#define DATETIME_POPUP_CONTENT_LEFT_PADDING_WIDTH_INC 62
+#define DATETIME_POPUP_CONTENT_RIGHT_PADDING_WIDTH_INC 62
+#define DATETIME_POPUP_CONTENT_CENTER_PADDING_WIDTH_INC 24
+#define DATETIME_POPUP_CONTENT_FIELD_WIDTH_INC 160
+#define DATETIME_POPUP_CONTENT_TIME_24HR_FIELD_WIDTH_INC 252
+#define DATETIME_POPUP_CONTENT_FIELD_TEXT_SIZE_INC 64
+#define DATETIME_POPUP_CONTENT_FIELD_TEXT_COLOR_INC 250 250 250 255
+
+#define DATETIME_POPUP_ENTRY_HEIGHT_INC 100
+#define DATETIME_POPUP_ENTRY_MIN_WIDTH_INC 84
+#define DATETIME_POPUP_ENTRY_TEXT_SIZE_INC 64
+#define DATETIME_POPUP_ENTRY_TEXT_COLOR_INC 250 250 250 255;
+
+#define SPINNER_UP_DOWN_IMAGE_SIZE_INC 84 58
+#define SPINNER_UP_DOWN_IMAGE_BORDER_SIZE_INC 13 13 15 15
+#define SPINNER_UP_DOWN_ARROW_IMAGE_SIZE_INC 54 54
+#define SPINNER_TEXT_HEIGHT_INC 100
+#define SPINNER_ENTRY_TEXT_SIZE_INC 64
+#define SPINNER_ENTRY_TEXT_COLOR_INC 250 250 250 255
+#define SPINNER_UP_DOWN_ARROW_DEFAULT_TOP_OFFSET_INC 0 2
+#define SPINNER_UP_DOWN_ARROW_DEFAULT_BOTTOM_OFFSET_INC -1 1
+#define SPINNER_UP_DOWN_ARROW_PRESSED_TOP_OFFSET_INC 0 -2
+#define SPINNER_UP_DOWN_ARROW_PRESSED_BOTTOM_OFFSET_INC -1 -3
+#define SPINNER_UP_DOWN_ARROW_SHADOW_DEFAULT_COLOR_INC 0 0 0 255
+#define SPINNER_UP_DOWN_ARROW_SHADOW_PRESSED_COLOR_INC 0 0 0 255
+#define SPINNER_UP_DOWN_ARROW_DEFAULT_COLOR_INC 250 250 250 255
+#define SPINNER_UP_DOWN_ARROW_PRESSED_COLOR_INC 250 250 250 255
+
+#define ENTRY_DATETIME_POPUP_TEXT_SIZE_INC 64
+
+#define COLORSELECTOR_MIN_W_INC 688
+#define COLORSELECTOR_MIN_H_INC 336
+#define COLORSELECTOR_MAX_W_INC 1014
+#define COLORSELECTOR_COLORBAR_HEIGHT 112
+#define COLORSELECTOR_COLORBAR_LEFT_PADDING 122
+#define COLORSELECTOR_COLORBAR_RIGHT_PADDING 122
+#define COLORSELECTOR_BUTTON_TOP_PADDING 19
+#define COLORSELECTOR_ARROW_BG_LEFT_PADDING 120
+#define COLORSELECTOR_ARROW_BG_RIGHT_PADDING 120
+#define COLORSELECTOR_ARROW_MIN_WIDTH 27
+#define COLORSELECTOR_ARROW_MIN_HEIGHT 72
+#define COLORSELECTOR_ARROW_REL1_OFFSET 0 4
+#define COLORSELECTOR_ARROW_REL2_OFFSET 0 3
+#define COLORSELECTOR_DRAGGABLE_EVENT_AREA 80 80
+#define COLORSELECTOR_BUTTON_LEFT_PADDING 32
+#define COLORSELECTOR_BUTTON_RIGHT_PADDING 32
+#define COLORSELECTOR_BUTTON_WIDTH 74
+#define COLORSELECTOR_BUTTON_HEIGHT 74
+#define COLORSELECTOR_BUTTON_BORDER 6 6 6 6
+#define COLORSELECTOR_PADDING_COLOR_TOP_INC 39 40 43 255
+#define COLORSELECTOR_PADDING_COLOR_BOTTOM_INC 17 19 27 255
+
+#define COLORSELECTOR_PALETTE_COLORBG_MIN_WIDTH_INC 86
+#define COLORSELECTOR_PALETTE_COLORBG_MIN_HEIGHT_INC 86
+#define COLORSELECTOR_PALETTE_COLORBG_FOCUS_MIN_WIDTH_INC 84
+#define COLORSELECTOR_PALETTE_COLORBG_FOCUS_MIN_HEIGHT_INC 84
+#define COLORSELECTOR_PORTRAIT_HOR_PAD_INC "50"
+#define COLORSELECTOR_PORTRAIT_VER_PAD_INC "20"
+#define COLORSELECTOR_LANDSCAPE_HOR_PAD_INC "36"
+#define COLORSELECTOR_LANDSCAPE_VER_PAD_INC "0"
+#define COLORSELECTOR_PALETTE_BORDER_INC 13 13 13 13
+#define COLORSELECTOR_PORTRAIT_HOR_PAD_COLORPLANE_INC "6"
+#define COLORSELECTOR_PORTRAIT_VER_PAD_COLORPLANE_INC "12"
+#define COLORSELECTOR_PALETTE_COLORBG_MIN_COLORPLANE_INC 67 67
+#define COLORSELECTOR_PALETTE_COLORPLANE_BORDER_INC 8 8 8 8
+#define COLORSELECTOR_COLORPLANE_PADDING_OUTER 35 0
+#define COLORSELECTOR_COLORPLANE_PADDING_COLORPLANE_BG 35 0
+#define COLORSELECTOR_COLORPLANE_CONTROL_SIZE 16 16
+#define COLORPLANE_MIN_HEIGHT 144
+
+#define TICKERNOTI_TEXT_COLOR_INC 250 250 250 255
+#define TICKERNOTI_DEFAULT_BG_MIN_HEIGHT_INC 100
+#define TICKERNOTI_DEFAULT_BG_TOTAL_MIN_HEIGHT_INC 100
+#define TICKERNOTI_DEFAULT_BG_BORDER_INC 8 8 8 8
+#define TICKERNOTI_DEFAULT_BG_PADDING_LEFT_TOP_INC 16 12
+#define TICKERNOTI_DEFAULT_BG_PADDING_RIGHT_BOTTOM_INC 16 12
+#define TICKERNOTI_DEFAULT_PADDING_AFTER_ICON_INC 16 0
+#define TICKERNOTI_DEFAULT_TEXT_MIN_INC 0 60
+#define TICKERNOTI_DEFAULT_BUTTON_MIN_INC 154 74
+#define TICKERNOTI_DEFAULT_BUTTON_MAX_INC 154 74
+#define TICKERNOTI_DEFAULT_ICON_MIN_INC 66 66
+#define TICKERNOTI_DEFAULT_PADDING_BEFORE_BUTTON_INC 16 0
+#define TICKERNOTI_DEFAULT_TEXT_FONT_SIZE_INC 30
+#define TICKERNOTI_DEFAULT_TEXT2_FONT_SIZE_INC 24
+#define TICKERNOTI_TEXTONLY_BG_MIN_HEIGHT_INC 60
+
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE "00_scroll_bar_v.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE "00_scroll_bar_h.png"
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MIN_SIZE_INC 18 72
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_MAX_SIZE_INC 18 99999
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MIN_SIZE_INC 72 18
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 18
+#define SCROLLER_DEFAULT_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_DEFAULT_SCROLLBAR_HBAR_PADDING_SIZE 6
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE "00_scroll_bar_v.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE "00_scroll_bar_h.png"
+#define SCROLLER_MATCHLIST_SCROLLBAR_BG_IMAGE_BORDER 13 13 10 15
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_MATCHLIST_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE "00_scroll_bar_v.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE "00_scroll_bar_h.png"
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_PADDING_SIZE 6
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_PADDING_SIZE 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MIN_SIZE_INC 16 238
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_MAX_SIZE_INC 16 99999
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MIN_SIZE_INC 180 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_MAX_SIZE_INC 99999 16
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_RUNNER_BORDER 0 0 4 4
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_RUNNER_BORDER 4 4 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_IMAGE_BORDER 0 0 12 14
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_IMAGE_BORDER 12 14 0 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_VBAR_OVER2 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER1 6 6 6 0
+#define SCROLLER_PHOTOCAM_SCROLLBAR_HBAR_OVER2 6 6 6 0
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIN_SIZE_INC 36 234
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIN_SIZE_INC 234 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_MIDDLE_MIN_SIZE_INC 36 37
+#define SCROLLER_HANDLER_SCROLLBAR_HBAR_MIDDLE_MIN_SIZE_INC 37 36
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_BOTTOM_BORDER 10 10 0 10
+#define SCROLLER_HANDLER_SCROLLBAR_VBAR_RIGHT_BORDER 0 10 10 10
+
+#define TOOLBAR_ITEM_BG_DEFAULT_BORDER_INC 8 8 2 0
+#define TOOLBAR_ITEM_BG_PRESSED_BORDER_INC 8 8 2 0
+#define TOOLBAR_ITEM_TAB_FOCUS_BORDER_INC 8 8 8 8
+#define TOOLBAR_ITEM_TEXTBLOCK_COLOR_INC "#FAFAFA"
+#define TOOLBAR_ITEM_PRESSED_TEXTBLOCK_COLOR_INC "#FAFAFA"
+#define TOOLBAR_ITEM_DISABLED_TEXTBLOCK_COLOR_INC "#8E929C"
+#define TOOLBAR_ITEM_TEXTBLOCK_SHADOW_COLOR_INC "#000000"
+#define TOOLBAR_ITEM_PRESSED_TEXTBLOCK_SHADOW_COLOR_INC "#000000"
+#define TOOLBAR_ITEM_DISABLED_TEXTBLOCK_SHADOW_COLOR_INC "#313542"
+#define TOOLBAR_ITEM_DEFAULT_ICON_COLOR_INC 255 255 255 255
+#define TOOLBAR_ITEM_ICON_COLOR_INC 250 250 250 255
+#define TOOLBAR_ITEM_PRESSED_ICON_COLOR_INC 250 250 250 255
+#define TOOLBAR_ITEM_DISABLED_ICON_COLOR_INC 158 160 167 255
+#define TOOLBAR_ITEM_ICON_SHADOW_COLOR_INC 0 0 0 255
+#define TOOLBAR_ITEM_PRESSED_ICON_SHADOW_COLOR_INC 0 0 0 255
+#define TOOLBAR_ITEM_DISABLED_ICON_SHADOW_COLOR_INC 53 57 71 255
+#define TOOLBAR_ITEM_ONE_ITEM_PADDING_SIZE 60
+#define TOOLBAR_ITEM_TWO_ITEMS_PADDING_SIZE 40
+#define TOOLBAR_ITEM_THREE_ITEMS_PADDING_SIZE 20
+#define TOOLBAR_ITEM_DIVIDER_SIZE 2 78
+#define TOOLBAR_ITEM_DIVIDER_LEFT_COLOR_INC 107 116 126 255
+#define TOOLBAR_ITEM_DIVIDER_RIGHT_COLOR_INC 107 116 126 255
+
+#define TABBAR_ITEM_TAB_SELECT_BAR_BORDER_INC 1 1 1 1
+#define TABBAR_ITEM_TAB_PRESS_BORDER_INC 8 8 4 0
+#define TABBAR_ITEM_TAB_FOCUS_BORDER_INC 8 8 8 8
+#define TABBAR_ITEM_TEXTBLOCK_COLOR_INC "#D2D2D2"
+#define TABBAR_ITEM_SELECTED_TEXTBLOCK_COLOR_INC "#FAFAFA"
+#define TABBAR_ITEM_PRESSED_TEXTBLOCK_COLOR_INC "#FAFAFA"
+#define TABBAR_ITEM_DISABLED_TEXTBLOCK_COLOR_INC "#717A91"
+#define TABBAR_ITEM_TEXTBLOCK_SHADOW_COLOR_INC "#000000"
+#define TABBAR_ITEM_PRESSED_TEXTBLOCK_SHADOW_COLOR_INC "#000000"
+#define TABBAR_ITEM_DISABLED_TEXTBLOCK_SHADOW_COLOR_INC "#1D263D"
+#define TABBAR_ITEM_DEFAULT_ICON_COLOR_INC 255 255 255 255
+#define TABBAR_ITEM_ICON_COLOR_INC 210 210 210 255
+#define TABBAR_ITEM_SELECTED_ICON_COLOR_INC 250 250 250 255
+#define TABBAR_ITEM_PRESSED_ICON_COLOR_INC 250 250 250 255
+#define TABBAR_ITEM_DISABLED_ICON_COLOR_INC 113 122 145 255
+#define TABBAR_ITEM_ICON_SHADOW_COLOR_INC 0 0 0 255
+#define TABBAR_ITEM_PRESSED_ICON_SHADOW_COLOR_INC 0 0 0 255
+#define TABBAR_ITEM_DISABLED_ICON_SHADOW_COLOR_INC 29 38 61 255
+#define TABBAR_ITEM_BG_DEFAULT_BORDER_INC 8 8 35 35
+#define TABBAR_ITEM_BG_DEFAULT_VISIBLE_INC 0
+#define TABBAR_DEFAULT_HEIGHT_INC 126
+#define TABBAR_ICON_TEXT_HEIGHT_INC 126
+#define TABBAR_HORIZONTAL_HEIGHT_INC 75
+#define TABBAR_HORIZONTAL_ICON_TEXT_HEIGHT_INC 75
+#define TABBAR_ITEM_ICON_SIZE_INC 63 63
+#define TABBAR_BADGE_TEXT_COLOR_INC 250 250 250 255
+#define TABBAR_BADGE_BG_IMAGE_BORDER_INC 26 26 0 0
+#define TABBAR_BADGE_ONE_ITEM_PADDING_SIZE 10 10
+#define TABBAR_BADGE_TWO_ITEMS_PADDING_SIZE 6 10
+#define TABBAR_BADGE_THREE_ITEMS_PADDING_SIZE 4 10
+#define TABBAR_ITEM_DIVIDER_SIZE 2 88
+#define TABBAR_ITEM_WITH_TITLE_DIVIDER_SIZE 2 48
+#define TABBAR_ITEM_DIVIDER_LEFT_COLOR_INC 131 140 163 255
+#define TABBAR_ITEM_DIVIDER_RIGHT_COLOR_INC 131 140 163 255
+#define TABBAR_ITEM_WITH_TITLE_DIVIDER_LEFT_COLOR_INC 78 86 108 255
+#define TABBAR_ITEM_WITH_TITLE_DIVIDER_RIGHT_COLOR_INC 78 86 108 255
+
+#define CONFORMANT_INDICATOR_BG_DEFAULT_COLOR_INC 30 30 30 255
+#define CONFORMANT_INDICATOR_BG_TRANSLUCENT_COLOR_INC 0 0 0 0
+#define CONFORMANT_INDICATOR_BG_TRANSPARENT_COLOR_INC 0 0 0 0
+
+#define TTS_FOCUS_BORDER 9 9 9 9
diff --git a/live.viewer/dbox.app/data/groups/transit.edc b/live.viewer/dbox.app/data/groups/transit.edc
new file mode 100644 (file)
index 0000000..002dc75
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+   group { name:"group_imageanimation";
+      parts {
+         part { name: "background";
+            type: RECT;
+            mouse_events: 0;
+
+            description { state: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "top_padding";
+            type: RECT;
+            scale: 1;
+
+            description { state: "default" 0.0;
+               fixed: 0 1;
+               visible: 0;
+               min: 0 50;
+               align: 0.5 0;
+               rel2 { relative: 1.0 0.0; }
+            }
+         }
+         part { name: "center_padding";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               visible: 0;
+               min: 100 50;
+               align: 0.5 0;
+               rel1 { relative: 0.5 1.0; to_y: "top_padding"; }
+               rel2 { relative: 0.5 1.0; to_y: "top_padding"; }
+            }
+         }
+         part { name: "calendar_icon";
+            type: SWALLOW;
+            scale: 1;
+
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: 119 148;
+               align: 1 0;
+               rel1 { relative: 0 1; to_x: "center_padding"; to_y: "top_padding"; }
+               rel2 { relative: 0 1; to_x: "center_padding"; to_y: "top_padding"; }
+            }
+         }
+         part { name: "message_icon";
+            type: SWALLOW;
+            scale: 1;
+
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: 119 148;
+               align: 0 0;
+               rel1 { relative: 1 1; to_x: "center_padding"; to_y: "top_padding"; }
+               rel2 { relative: 1 1; to_x: "center_padding"; to_y: "top_padding"; }
+            }
+         }
+         part { name: "middle_padding";
+            type: RECT;
+            scale: 1;
+
+            description { state: "default" 0.0;
+               fixed: 0 1;
+               visible: 0;
+               min: 0 30;
+               align: 0.5 0;
+               rel1 { relative: 0 1; to_y: "message_icon"; }
+               rel2 { relative: 0 1; to_y: "message_icon"; }
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/data/groups/vi.edc b/live.viewer/dbox.app/data/groups/vi.edc
new file mode 100644 (file)
index 0000000..0f2da28
--- /dev/null
@@ -0,0 +1,1755 @@
+/*\r
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved\r
+ *\r
+ *  Licensed under the Apache License, Version 2.0 (the "License");\r
+ *  you may not use this file except in compliance with the License.\r
+ *  You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ *  Unless required by applicable law or agreed to in writing, software\r
+ *  distributed under the License is distributed on an "AS IS" BASIS,\r
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ *  See the License for the specific language governing permissions and\r
+ *  limitations under the License.\r
+ *\r
+ */\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// Interpolation\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/interpolation";\r
+       parts {\r
+               /***** 1. sine i 33 *****/\r
+               part {\r
+                       name: "image1";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.025;\r
+                               rel2.relative: 0.1 0.1;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect1";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.025;\r
+                               rel2.relative: 0.8 0.1;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover1";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect1";\r
+                               rel2 { to: "rect1"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect1"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect1";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn1";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.025;\r
+                               rel2.relative: 0.95 0.1;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 2. sine o 33 *****/\r
+               part {\r
+                       name: "image2";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.125;\r
+                               rel2.relative: 0.1 0.2;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect2";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.125;\r
+                               rel2.relative: 0.8 0.2;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover2";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect2";\r
+                               rel2 { to: "rect2"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect2"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect2";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn2";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.125;\r
+                               rel2.relative: 0.95 0.2;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 3. sine io 33 *****/\r
+               part {\r
+                       name: "image3";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.225;\r
+                               rel2.relative: 0.1 0.3;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect3";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.225;\r
+                               rel2.relative: 0.8 0.3;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover3";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect3";\r
+                               rel2 { to: "rect3"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect3"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect3";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn3";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.225;\r
+                               rel2.relative: 0.95 0.3;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 4. sine io 50 *****/\r
+               part {\r
+                       name: "image4";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.325;\r
+                               rel2.relative: 0.1 0.4;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect4";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.325;\r
+                               rel2.relative: 0.8 0.4;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover4";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect4";\r
+                               rel2 { to: "rect4"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect4"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect4";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn4";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.325;\r
+                               rel2.relative: 0.95 0.4;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 5. sine io 60 *****/\r
+               part {\r
+                       name: "image5";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.425;\r
+                               rel2.relative: 0.1 0.5;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect5";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.425;\r
+                               rel2.relative: 0.8 0.5;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover5";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect5";\r
+                               rel2 { to: "rect5"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect5"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect5";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn5";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.425;\r
+                               rel2.relative: 0.95 0.5;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 6. sine io 70 *****/\r
+               part {\r
+                       name: "image6";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.525;\r
+                               rel2.relative: 0.1 0.6;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect6";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.525;\r
+                               rel2.relative: 0.8 0.6;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover6";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect6";\r
+                               rel2 { to: "rect6"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect6"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect6";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn6";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.525;\r
+                               rel2.relative: 0.95 0.6;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 7. sine io 80 *****/\r
+               part {\r
+                       name: "image7";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.625;\r
+                               rel2.relative: 0.1 0.7;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect7";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.625;\r
+                               rel2.relative: 0.8 0.7;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover7";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect7";\r
+                               rel2 { to: "rect7"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect7"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect7";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn7";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.625;\r
+                               rel2.relative: 0.95 0.7;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 8. sine io 90 *****/\r
+               part {\r
+                       name: "image8";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.725;\r
+                               rel2.relative: 0.1 0.8;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect8";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.725;\r
+                               rel2.relative: 0.8 0.8;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover8";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect8";\r
+                               rel2 { to: "rect8"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect8"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect8";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn8";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.725;\r
+                               rel2.relative: 0.95 0.8;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 9. quint io 50 *****/\r
+               part {\r
+                       name: "image9";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.825;\r
+                               rel2.relative: 0.1 0.9;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect9";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.825;\r
+                               rel2.relative: 0.8 0.9;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover9";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect9";\r
+                               rel2 { to: "rect9"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect9"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect9";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn9";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.825;\r
+                               rel2.relative: 0.95 0.9;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               /***** 10. quint io 80 *****/\r
+               part {\r
+                       name: "image10";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 70 70;\r
+                               max: 70 70;\r
+                               rel1.relative: 0.05 0.925;\r
+                               rel2.relative: 0.1 1.0;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rect10";\r
+                       type: RECT;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 450 40;\r
+                               max: 450 40;\r
+                               rel1.relative: 0.15 0.925;\r
+                               rel2.relative: 0.8 1;\r
+                               color: 0 0 0 0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "mover10";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1.to: "rect10";\r
+                               rel2 { to: "rect10"; relative: 0.1 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 178 178 178 255;\r
+                               rel1 { to: "rect10"; relative: 0.9 0.0;}\r
+                               rel2.to: "rect10";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn10";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               min: 68 68;\r
+                               max: 68 68;\r
+                               rel1.relative: 0.85 0.925;\r
+                               rel2.relative: 0.95 1.0;\r
+                               fixed: 1 1;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,state,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       target: "mover1";\r
+                       target: "mover2";\r
+                       target: "mover3";\r
+                       target: "mover4";\r
+                       target: "mover5";\r
+                       target: "mover6";\r
+                       target: "mover7";\r
+                       target: "mover8";\r
+                       target: "mover9";\r
+                       target: "mover10";\r
+               }\r
+               program {\r
+                       name: "show1";\r
+                       signal: "elm,state,show1";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: DECEL_FAC 1 0.33;\r
+                       target: "mover1";\r
+               }\r
+               program {\r
+                       name: "show2";\r
+                       signal: "elm,state,show2";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: ACCEL_FAC 1 0.33;\r
+                       target: "mover2";\r
+               }\r
+               program {\r
+                       name: "show3";\r
+                       signal: "elm,state,show3";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 0.5;\r
+                       target: "mover3";\r
+               }\r
+               program {\r
+                       name: "show4";\r
+                       signal: "elm,state,show4";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 0.8;\r
+                       target: "mover4";\r
+               }\r
+               program {\r
+                       name: "show5";\r
+                       signal: "elm,state,show5";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 1.1;\r
+                       target: "mover5";\r
+               }\r
+               program {\r
+                       name: "show6";\r
+                       signal: "elm,state,show6";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 1.4;\r
+                       target: "mover6";\r
+               }\r
+               program {\r
+                       name: "show7";\r
+                       signal: "elm,state,show7";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 1.7;\r
+                       target: "mover7";\r
+               }\r
+               program {\r
+                       name: "show8";\r
+                       signal: "elm,state,show8";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: SIN_FAC 1 2.0;\r
+                       target: "mover8";\r
+               }\r
+               program {\r
+                       name: "show9";\r
+                       signal: "elm,state,show9";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: DIVIS 1 1.7 2;\r
+                       target: "mover9";\r
+               }\r
+               program {\r
+                       name: "show10";\r
+                       signal: "elm,state,show10";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: DECEL_FAC 1 0.8;\r
+                       target: "mover10";\r
+               }\r
+       }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// Fade In/Out\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/fade";\r
+       parts {\r
+               part {\r
+                       name: "elm.swallow.content";\r
+                       type: SWALLOW;\r
+                       clip_to: "clipper";\r
+                       description {\r
+                               rel1.relative: 0.4 0.4;\r
+                               rel2.relative: 0.6 0.6;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clipper";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 100;\r
+                               rel1.to: "elm.swallow.content";\r
+                               rel2.to: "elm.swallow.content";\r
+                       }\r
+                       description {\r
+                               state: "fade_in" 0.0;\r
+                               inherit: "default";\r
+                               color: 255 255 255 255;\r
+                       }\r
+                       description {\r
+                               state: "fade_out" 0.0;\r
+                               inherit: "default";\r
+                               color: 255 255 255 0;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,action,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+               }\r
+               program {\r
+                       name: "show_fade_in";\r
+                       signal: "elm,action,in";\r
+                       source: "elm";\r
+                       action: STATE_SET "fade_in" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+               }\r
+               program {\r
+                       name: "show_fade_out";\r
+                       signal: "elm,action,out";\r
+                       source: "elm";\r
+                       action: STATE_SET "fade_out" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+               }\r
+       }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// Zoom In/Out\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/zoom";\r
+       parts {\r
+               part {\r
+                       name: "base";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: 0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "zoom_*1/4";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: -1400;\r
+                               }\r
+                       }\r
+            }\r
+               part {\r
+                       name: "zoom_*1/2";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: -700;\r
+                               }\r
+                       }\r
+            }\r
+               part {\r
+                       name: "zoom_*2";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: 500;\r
+                               }\r
+                       }\r
+            }\r
+               part {\r
+                       name: "zoom_*4";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: 700;\r
+                               }\r
+                       }\r
+            }\r
+               part {\r
+                       name: "elm.swallow.content";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1 { relative: 0.4 0.4; }\r
+                               rel2 { relative: 0.6 0.6; }\r
+                               map {\r
+                                       on: 1;\r
+                                       perspective: "base";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_1/4" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       perspective: "zoom_*1/4";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_1/2" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       perspective: "zoom_*1/2";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_2" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       perspective: "zoom_*2";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_4" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       perspective: "zoom_*4";\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn1";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.0 0.9;\r
+                               rel2.relative: 0.25 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn2";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.25 0.9;\r
+                               rel2.relative: 0.5 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn3";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.5 0.9;\r
+                               rel2.relative: 0.75 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn4";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.75 0.9;\r
+                               rel2.relative: 1.0 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "show_zoom_1";\r
+                       signal: "elm,action,zoom_1";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_1/4" 0.0;\r
+                       transition: ACCEL_FAC 0.5 0.8;\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "show_zoom_2";\r
+                       signal: "elm,action,zoom_2";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_1/2" 0.0;\r
+                       transition: ACCEL_FAC 0.5 0.8;\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "show_zoom_3";\r
+                       signal: "elm,action,zoom_3";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_2" 0.0;\r
+                       transition: ACCEL_FAC 0.5 0.8;\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "show_zoom_4";\r
+                       signal: "elm,action,zoom_4";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_4" 0.0;\r
+                       transition: ACCEL_FAC 0.5 0.8;\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,action,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: ACCEL_FAC 0.5 0.8;\r
+                       target: "elm.swallow.content";\r
+               }\r
+       }\r
+}\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// Rotate\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/rotate";\r
+       parts {\r
+               part {\r
+                       name: "content";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1 { relative: 0.4 0.3;}\r
+                               rel2 { relative: 0.6 0.5;}\r
+                               align: 0.5 0.5;\r
+                               map {\r
+                                       on: 1;\r
+                                       perspective_on: 1;\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "degree_90" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 0.0;\r
+                                               y: 0.0;\r
+                                               z: 90.0;\r
+                                       }\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "degree_180" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 0.0;\r
+                                               y: 0.0;\r
+                                               z: 180.0;\r
+                                       }\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "degree_270" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 0.0;\r
+                                               y: 0.0;\r
+                                               z: 270.0;\r
+                                       }\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "degree_360" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 0.0;\r
+                                               y: 0.0;\r
+                                               z: 360.0;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn1";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.0 0.9;\r
+                               rel2.relative: 0.25 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn2";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.25 0.9;\r
+                               rel2.relative: 0.5 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn3";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.5 0.9;\r
+                               rel2.relative: 0.75 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn4";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.75 0.9;\r
+                               rel2.relative: 1.0 1.0;\r
+                               align: 0.5 0.5;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,action,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "rotate90";\r
+                       signal: "elm,action,90";\r
+                       source: "elm";\r
+                       action: STATE_SET "degree_90" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "rotate180";\r
+                       signal: "elm,action,180";\r
+                       source: "elm";\r
+                       action: STATE_SET "degree_180" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "rotate270";\r
+                       signal: "elm,action,270";\r
+                       source: "elm";\r
+                       action: STATE_SET "degree_270" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "rotate360";\r
+                       signal: "elm,action,360";\r
+                       source: "elm";\r
+                       action: STATE_SET "degree_360" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "content";\r
+               }\r
+       }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// WIPE\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/wipe";\r
+       parts {\r
+               part {\r
+                       name: "bottom2top";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip1";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.0 0.0; }\r
+                               rel2 { relative: 0.5 0.25; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text1";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "bottom2top"; relative: 0.0 0.95; }\r
+                               rel2 { to: "bottom2top"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "B to T";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "top2bottom";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip2";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.5 0.0; }\r
+                               rel2 { relative: 1.0 0.25; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text2";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "top2bottom"; relative: 0.0 0.95; }\r
+                               rel2 { to: "top2bottom"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "T to B";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "left2right";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip3";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.0 0.25; }\r
+                               rel2 { relative: 0.5 0.5; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text3";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "left2right"; relative: 0.0 0.95; }\r
+                               rel2 { to: "left2right"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "L to R";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "right2left";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip4";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.5 0.25; }\r
+                               rel2 { relative: 1.0 0.5; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text4";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "right2left"; relative: 0.0 0.95; }\r
+                               rel2 { to: "right2left"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "R to L";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "leftbottom2righttop";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip5";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.0 0.5; }\r
+                               rel2 { relative: 0.5 0.75; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text5";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "leftbottom2righttop"; relative: 0.0 0.95; }\r
+                               rel2 { to: "leftbottom2righttop"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "LB to RT";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "rightbottom2lefttop";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip6";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.5 0.5; }\r
+                               rel2 { relative: 1.0 0.75; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text6";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "rightbottom2lefttop"; relative: 0.0 0.95; }\r
+                               rel2 { to: "rightbottom2lefttop"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "RB to LT";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "lefttop2rightbottom";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip7";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.0 0.75; }\r
+                               rel2 { relative: 0.5 1.0; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text7";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "lefttop2rightbottom"; relative: 0.0 0.95; }\r
+                               rel2 { to: "lefttop2rightbottom"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "LT to RB";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "righttop2leftbottom";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clip8";\r
+                       description {\r
+                               min: 360 200;\r
+                               max: 360 200;\r
+                               rel1 { relative: 0.5 0.75; }\r
+                               rel2 { relative: 1.0 1.0; }\r
+                               align: 0.5 0.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "text8";\r
+                       type: TEXT;\r
+                       description {\r
+                               rel1 { to: "righttop2leftbottom"; relative: 0.0 0.95; }\r
+                               rel2 { to: "righttop2leftbottom"; relative: 1.0 1.0; }\r
+                               color: 0 0 0 255;\r
+                               text {\r
+                                       font: "Tizen:style=Medium";\r
+                                       text: "RT to LB";\r
+                                       size: 40;\r
+                                       align: 0.5 0.0;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       parts {\r
+               part {\r
+                       name: "clip1";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "bottom2top"; relative: 0.0 1.0; }\r
+                               rel2 { to: "bottom2top"; relative: 1.0 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "bottom2top";\r
+                               rel2.to: "bottom2top";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip2";\r
+                       type: RECT;\r
+                       description{\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "top2bottom"; relative: 0.0 0.0; }\r
+                               rel2 { to: "top2bottom"; relative: 1.0 0.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "top2bottom";\r
+                               rel2.to: "top2bottom";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip3";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "left2right"; relative: 0.0 0.0; }\r
+                               rel2 { to: "left2right"; relative: 0.0 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "left2right";\r
+                               rel2.to: "left2right";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip4";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "right2left"; relative : 1.0 0.0; }\r
+                               rel2 { to: "right2left"; relative : 1.0 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "right2left";\r
+                               rel2.to: "right2left";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip5";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "leftbottom2righttop"; relative : 0.0 1.0; }\r
+                               rel2 { to: "leftbottom2righttop"; relative : 0.0 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "leftbottom2righttop";\r
+                               rel2.to: "leftbottom2righttop";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip6";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "rightbottom2lefttop"; relative : 1.0 1.0; }\r
+                               rel2 { to: "rightbottom2lefttop"; relative : 1.0 1.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "rightbottom2lefttop";\r
+                               rel2.to: "rightbottom2lefttop";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip7";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "lefttop2rightbottom"; relative : 0.0 0.0; }\r
+                               rel2 { to: "lefttop2rightbottom"; relative : 0.0 0.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "lefttop2rightbottom";\r
+                               rel2.to: "lefttop2rightbottom";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clip8";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1 { to: "righttop2leftbottom"; relative : 1.0 0.0; }\r
+                               rel2 { to: "righttop2leftbottom"; relative : 1.0 0.0; }\r
+                       }\r
+                       description {\r
+                               state: "show" 0.0;\r
+                               color: 255 255 255 255;\r
+                               rel1.to: "righttop2leftbottom";\r
+                               rel2.to: "righttop2leftbottom";\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,state,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip1";\r
+                       target: "clip2";\r
+                       target: "clip3";\r
+                       target: "clip4";\r
+                       target: "clip5";\r
+                       target: "clip6";\r
+                       target: "clip7";\r
+                       target: "clip8";\r
+               }\r
+               program {\r
+                       name: "show1";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip1";\r
+               }\r
+               program {\r
+                       name: "show2";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip2";\r
+               }\r
+               program {\r
+                       name: "show3";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip3";\r
+               }\r
+               program {\r
+                       name: "show4";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip4";\r
+               }\r
+               program {\r
+                       name: "show5";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip5";\r
+               }\r
+               program {\r
+                       name: "show6";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip6";\r
+               }\r
+               program {\r
+                       name: "show7";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip7";\r
+               }\r
+               program {\r
+                       name: "show8";\r
+                       signal: "elm,state,show";\r
+                       source: "elm";\r
+                       action: STATE_SET "show" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "clip8";\r
+               }\r
+       }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// FLIP\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/flip";\r
+       parts {\r
+               part {\r
+                       name: "content";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1.relative: 0.2 0.2;\r
+                               rel2.relative: 0.8 0.7;\r
+                               map {\r
+                                       on: 1;\r
+                                       perspective_on: 1;\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "flip_x" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 180.0;\r
+                                               y: 0.0;\r
+                                               z: 0.0;\r
+                                       }\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "flip_y" 0.0;\r
+                               inherit: "default";\r
+                               map {\r
+                                       rotation {\r
+                                               x: 0.0;\r
+                                               y: 180.0;\r
+                                               z: 0.0;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn1";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.1 0.9;\r
+                               rel2.relative: 0.35 1.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn2";\r
+                       type: SWALLOW;\r
+                       description {\r
+                               rel1.relative: 0.4 0.9;\r
+                               rel2.relative: 0.65 1.0;\r
+                       }\r
+               }\r
+               part {\r
+                       name: "btn3";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       description {\r
+                               rel1.relative: 0.7 0.9;\r
+                               rel2.relative: 0.95 1.0;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,state,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "flip_by_x";\r
+                       signal: "elm,state,flipx";\r
+                       source: "elm";\r
+                       action: STATE_SET "flip_x" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "content";\r
+               }\r
+               program {\r
+                       name: "flip_by_y";\r
+                       signal: "elm,state,flipy";\r
+                       source: "elm";\r
+                       action: STATE_SET "flip_y" 0.0;\r
+                       transition: LINEAR 1;\r
+                       target: "content";\r
+               }\r
+       }\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+// CUSTOM\r
+///////////////////////////////////////////////////////////////////////////////////////////////\r
+group {\r
+       name: "vi/custom";\r
+       parts {\r
+               part {\r
+                       name: "in";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1.to: "elm.swallow.content";\r
+                               rel2.to: "elm.swallow.content";\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                      zplane: 300;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "base";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1.to: "elm.swallow.content";\r
+                               rel2.to: "elm.swallow.content";\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: 0;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "out";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1.to: "elm.swallow.content";\r
+                               rel2.to: "elm.swallow.content";\r
+                               color: 0 0 0 0;\r
+                               perspective {\r
+                                       zplane: -1400;\r
+                               }\r
+                       }\r
+               }\r
+               part {\r
+                       name: "elm.swallow.content";\r
+                       type: SWALLOW;\r
+                       scale: 1;\r
+                       clip_to: "clipper";\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               rel1.relative: 0.4 0.4;\r
+                               rel2.relative: 0.6 0.6;\r
+                               map {\r
+                                       on: 1;\r
+                                       perspective: "base";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_in" 0.0;\r
+                               inherit: "default";\r
+                               rel1.relative: 0.7 0.7;\r
+                               rel2.relative: 0.9 0.9;\r
+                               map {\r
+                                       perspective: "in";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "zoom_out" 0.0;\r
+                               inherit: "default";\r
+                               rel1.relative: 0.1 0.1;\r
+                               rel2.relative: 0.3 0.3;\r
+                               map {\r
+                                       perspective: "out";\r
+                               }\r
+                       }\r
+                       description {\r
+                               state: "move1";\r
+                               inherit: "zoom_in";\r
+                       }\r
+                       description {\r
+                               state: "move2";\r
+                               inherit: "zoom_out";\r
+                       }\r
+               }\r
+               part {\r
+                       name: "clipper";\r
+                       type: RECT;\r
+                       description {\r
+                               state: "default" 0.0;\r
+                               color: 255 255 255 100;\r
+                       }\r
+                       description {\r
+                               state: "fade_in" 0.0;\r
+                               color: 255 255 255 255;\r
+                       }\r
+                       description {\r
+                               state: "fade_out" 0.0;\r
+                               color: 255 255 255 30;\r
+                       }\r
+               }\r
+       }\r
+       programs {\r
+               program {\r
+                       name: "reset";\r
+                       signal: "elm,action,reset";\r
+                       source: "elm";\r
+                       action: STATE_SET "default" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "show_fade_in";\r
+                       signal: "elm,action,_fade_in";\r
+                       source: "elm";\r
+                       action: STATE_SET "fade_in" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+               }\r
+               program {\r
+                       name: "show_fade_out";\r
+                       signal: "elm,action,_fade_out";\r
+                       source: "elm";\r
+                       action: STATE_SET "fade_out" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "clipper";\r
+               }\r
+               program {\r
+                       name: "show_zoom_in";\r
+                       signal: "elm,action,_zoom_in";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_in" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "elm.swallow.content";\r
+                       after: "show_move1";\r
+               }\r
+               program {\r
+                       name: "show_zoom_out";\r
+                       signal: "elm,action,_zoom_out";\r
+                       source: "elm";\r
+                       action: STATE_SET "zoom_out" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "elm.swallow.content";\r
+                       after: "show_move2";\r
+               }\r
+               program {\r
+                       name: "show_move1";\r
+                       action: STATE_SET "move1" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "elm.swallow.content";\r
+               }\r
+               program {\r
+                       name: "show_move2";\r
+                       action: STATE_SET "move2" 0.0;\r
+                       transition: LINEAR 0.5;\r
+                       target: "elm.swallow.content";\r
+               }\r
+       }\r
+}\r
diff --git a/live.viewer/dbox.app/data/groups/video.edc b/live.viewer/dbox.app/data/groups/video.edc
new file mode 100644 (file)
index 0000000..1081697
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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.
+ *
+ */
+
+   styles
+   {
+      style { name: "info_style";
+         base: "font=Tizen:style=Roman font_size=30 align=center color=#FFFFFF wrap=char text_class=tizen";
+         tag:  "br" "\n";
+      }
+   }
+
+   group {
+      name: "elmdemo-test/player";
+
+      parts {
+         part {
+            name: "info";
+            type: TEXTBLOCK;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1 { relative: 0.0 0.05; }
+               rel2 { relative: 1.0 0.2; }
+               text {
+                  style: info_style;
+               }
+            }
+         }
+         part {
+            name: "video";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1 { relative: 0.0 0.25; }
+               rel2 { relative: 1.0 0.75; }
+            }
+         }
+         part {
+            name: "player";
+            type: SWALLOW;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               align: 0.5 0.0;
+               fixed: 1 1;
+               rel1 { relative: 0.5 0.8; }
+               rel2 { relative: 0.5 0.8; }
+            }
+         }
+      }
+   }
diff --git a/live.viewer/dbox.app/include/access.h b/live.viewer/dbox.app/include/access.h
new file mode 100644 (file)
index 0000000..397c340
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_access_H_
+#define __DEF_test_access_H_
+
+#include <Elementary.h>
+
+void access_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_contextpopup_H__ */
diff --git a/live.viewer/dbox.app/include/autoscroll.h b/live.viewer/dbox.app/include/autoscroll.h
new file mode 100644 (file)
index 0000000..d359bf1
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_AutoScroll_H_
+#define __DEF_test_AutoScroll_H_
+
+#include <Elementary.h>
+
+void autoscroll_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_DialogueField_H__ */
diff --git a/live.viewer/dbox.app/include/bubble.h b/live.viewer/dbox.app/include/bubble.h
new file mode 100644 (file)
index 0000000..20f5b38
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_bubble_H_
+#define __DEF_test_bubble_H_
+
+#include <Elementary.h>
+
+void bubble_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_bubble_H__ */
diff --git a/live.viewer/dbox.app/include/button.h b/live.viewer/dbox.app/include/button.h
new file mode 100644 (file)
index 0000000..f18faf1
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_button_H_
+#define __DEF_test_button_H_
+
+#include <Elementary.h>
+
+void button_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_button_H__ */
diff --git a/live.viewer/dbox.app/include/center_popup.h b/live.viewer/dbox.app/include/center_popup.h
new file mode 100644 (file)
index 0000000..368ac87
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_center_popup_H_
+#define __DEF_test_center_popup_H_
+
+#include <Elementary.h>
+
+void center_popup_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_center_popup_H__ */
diff --git a/live.viewer/dbox.app/include/check.h b/live.viewer/dbox.app/include/check.h
new file mode 100644 (file)
index 0000000..fcd3bec
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_check_H_
+#define __DEF_test_check_H_
+
+#include <Elementary.h>
+
+void check_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_check_H__ */
diff --git a/live.viewer/dbox.app/include/colorclass.h b/live.viewer/dbox.app/include/colorclass.h
new file mode 100644 (file)
index 0000000..977ef5a
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_colorclass_H_
+#define __DEF_test_colorclass_H_
+
+#include <Elementary.h>
+
+void colorclass_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_colorclass_H__ */
diff --git a/live.viewer/dbox.app/include/colorselector.h b/live.viewer/dbox.app/include/colorselector.h
new file mode 100644 (file)
index 0000000..0357157
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_colorselector_H_
+#define __DEF_test_colorselector_H_
+
+#include <Elementary.h>
+
+void colorselector_cb(void *data, Evas_Object *obj, void *event_info);
+void colorselector_components_cb(void *data, Evas_Object *obj, void *event_info);
+void colorselector_palette_cb(void *data, Evas_Object *obj, void *event_info);
+void colorselector_plane_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_colorselector_H__ */
+
diff --git a/live.viewer/dbox.app/include/config.h b/live.viewer/dbox.app/include/config.h
new file mode 100644 (file)
index 0000000..451ebc7
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_config_H_
+#define __DEF_test_config_H_
+
+#include <Elementary.h>
+
+void config_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_config_H__ */
diff --git a/live.viewer/dbox.app/include/config_abort.h b/live.viewer/dbox.app/include/config_abort.h
new file mode 100644 (file)
index 0000000..ad97650
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_config_abort_H_
+#define __DEF_test_config_abort_H_
+
+#include <Elementary.h>
+
+void config_abort_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_config_abort_H_ */
diff --git a/live.viewer/dbox.app/include/config_mirror.h b/live.viewer/dbox.app/include/config_mirror.h
new file mode 100644 (file)
index 0000000..3031431
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_config_mirror_H_
+#define __DEF_test_config_mirror_H_
+
+#include <Elementary.h>
+
+void config_mirror_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_config_mirror_H_ */
diff --git a/live.viewer/dbox.app/include/config_scrolling.h b/live.viewer/dbox.app/include/config_scrolling.h
new file mode 100644 (file)
index 0000000..36dd99f
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_config_scrolling_H_
+#define __DEF_test_config_scrolling_H_
+
+#include <Elementary.h>
+
+void config_scrolling_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_config_H__ */
diff --git a/live.viewer/dbox.app/include/controlbar_animation.h b/live.viewer/dbox.app/include/controlbar_animation.h
new file mode 100644 (file)
index 0000000..831521a
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_animation_H_
+#define __DEF_test_controlbar_animation_H_
+
+#include <Elementary.h>
+
+void controlbar_animation_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_animation_H__ */
+
diff --git a/live.viewer/dbox.app/include/controlbar_vertical.h b/live.viewer/dbox.app/include/controlbar_vertical.h
new file mode 100644 (file)
index 0000000..77bfc77
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_vertical_H_
+#define __DEF_test_controlbar_vertical_H_
+
+#include <Elementary.h>
+
+void controlbar_vertical_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_vertical_H__ */
+
diff --git a/live.viewer/dbox.app/include/ctxpopup.h b/live.viewer/dbox.app/include/ctxpopup.h
new file mode 100644 (file)
index 0000000..7d11dd5
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_contextpopup_H_
+#define __DEF_test_contextpopup_H_
+
+#include <Elementary.h>
+
+void ctxpopup_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_contextpopup_H__ */
diff --git a/live.viewer/dbox.app/include/datetime.h b/live.viewer/dbox.app/include/datetime.h
new file mode 100644 (file)
index 0000000..068f9fb
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_datetime_H_
+#define __DEF_test_datetime_H_
+
+#include <Elementary.h>
+
+void datetime_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_datetime_H_ */
diff --git a/live.viewer/dbox.app/include/debug.h b/live.viewer/dbox.app/include/debug.h
new file mode 100644 (file)
index 0000000..d340aae
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if !defined(FLOG)
+#define DbgPrint(format, arg...)       SECURE_LOGD(format, ##arg)
+#define ErrPrint(format, arg...)       SECURE_LOGE(format, ##arg)
+#define WarnPrint(format, arg...)      SECURE_LOGW(format, ##arg)
+#else
+extern FILE *__file_log_fp;
+#define DbgPrint(format, arg...) do { fprintf(__file_log_fp, "[LOG] [\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg); fflush(__file_log_fp); } while (0)
+#define ErrPrint(format, arg...) do { fprintf(__file_log_fp, "[ERR] [\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg); fflush(__file_log_fp); } while (0)
+#define WarnPrint(format, arg...) do { fprintf(__file_log_fp, "[WRN] [\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg); fflush(__file_log_fp); } while (0)
+#endif
+
+// DbgPrint("FREE\n");
+#define DbgFree(a) do { \
+       free(a); \
+} while (0)
+
+#define DbgXFree(a) do { \
+       DbgPrint("XFree\n"); \
+       XFree(a); \
+} while (0)
+
+
+#if defined(_ENABLE_PERF)
+#define PERF_INIT() \
+       struct timeval __stv; \
+       struct timeval __etv; \
+       struct timeval __rtv
+
+#define PERF_BEGIN() do { \
+       if (gettimeofday(&__stv, NULL) < 0) { \
+               ErrPrint("gettimeofday: %s\n", strerror(errno)); \
+       } \
+} while (0)
+
+#define PERF_MARK(tag) do { \
+       if (gettimeofday(&__etv, NULL) < 0) { \
+               ErrPrint("gettimeofday: %s\n", strerror(errno)); \
+       } \
+       timersub(&__etv, &__stv, &__rtv); \
+       DbgPrint("[%s] %u.%06u\n", tag, __rtv.tv_sec, __rtv.tv_usec); \
+} while (0)
+#else
+#define PERF_INIT()
+#define PERF_BEGIN()
+#define PERF_MARK(tag)
+#endif
+
+/* End of a file */
diff --git a/live.viewer/dbox.app/include/dialoguegroup.h b/live.viewer/dbox.app/include/dialoguegroup.h
new file mode 100644 (file)
index 0000000..de3b0eb
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_dialoguegroup_H_
+#define __DEF_test_dialoguegroup_H_
+
+#include <Elementary.h>
+
+void dialoguegroup_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_dialoguegroup_H__ */
+
diff --git a/live.viewer/dbox.app/include/dnd.h b/live.viewer/dbox.app/include/dnd.h
new file mode 100644 (file)
index 0000000..b53e7d5
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_dnd_H_
+#define __DEF_test_dnd_H_
+
+#include <Elementary.h>
+
+void dnd_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_dnd_H__ */
diff --git a/live.viewer/dbox.app/include/dnd_gengrid_box.h b/live.viewer/dbox.app/include/dnd_gengrid_box.h
new file mode 100644 (file)
index 0000000..c23bc96
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_dnd_gengrid_box_H
+#define __DEF_test_dnd_gengrid_box_H
+
+#include <Elementary.h>
+
+void dnd_gengrid_box_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_dnd_gengrid_box_H */
diff --git a/live.viewer/dbox.app/include/dnd_genlist_gengrid.h b/live.viewer/dbox.app/include/dnd_genlist_gengrid.h
new file mode 100644 (file)
index 0000000..be116e9
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_dnd_genlist_gengrid_H_
+#define __DEF_test_dnd_genlist_gengrid_H_
+
+#include <Elementary.h>
+
+void dnd_genlist_gengrid_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_dnd_genlist_gengrid_H__ */
diff --git a/live.viewer/dbox.app/include/dnd_layout_genlist.h b/live.viewer/dbox.app/include/dnd_layout_genlist.h
new file mode 100644 (file)
index 0000000..3c18d4e
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_dnd_layout_genlist_H_
+#define __DEF_test_dnd_layout_genlist_H_
+
+#include <Elementary.h>
+
+void dnd_layout_genlist_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_dnd_layout_genlist_H__ */
diff --git a/live.viewer/dbox.app/include/drawer.h b/live.viewer/dbox.app/include/drawer.h
new file mode 100644 (file)
index 0000000..a95bf4e
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_drawer_H_
+#define __DEF_test_drawer_H_
+
+#include <Elementary.h>
+#include <libintl.h>
+#include <string.h>
+
+void drawer_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_drawer_H__ */
diff --git a/live.viewer/dbox.app/include/elmdemo_test.h b/live.viewer/dbox.app/include/elmdemo_test.h
new file mode 100644 (file)
index 0000000..9715d9d
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_elm_demo_H_
+#define __DEF_elm_demo_H_
+
+#include <Elementary.h>
+
+#define _EDJ(x) elm_layout_edje_get(x)
+
+typedef enum _MOVING_TYPE
+{
+       NONE,
+       FLICK_L2R,
+       FLICK_R2L,
+} MOVING_TYPE;
+
+struct _Touch_Info
+{
+   Evas_Coord cur_x, cur_y, cur_mx, cur_my;
+   Evas_Coord prev_x, prev_y, prev_mx, prev_my;
+
+   Eina_Bool multitouch_detected : 1;
+   Eina_Bool touchtype_detected : 1;
+
+   int moving_type;
+   int magic_num;
+};
+typedef struct _Touch_Info Touch_Info;
+
+struct appdata
+{
+       Evas_Coord root_w;
+       Evas_Coord root_h;
+
+       Evas *evas;
+       Evas_Object *win_main;
+       Evas_Object *bg;
+       Evas_Object *conform;
+       Evas_Object *layout_main;
+       Evas_Object *nf;
+
+       Touch_Info ti;
+};
+
+struct _menu_item {
+       char *name;
+       void (*func)(void *data, Evas_Object *obj, void *event_info);
+};
+
+struct _group_menu_item {
+       Eina_Bool is_group;
+       char *name;
+       void (*func)(void *data, Evas_Object *obj, void *event_info);
+};
+
+
+int init_elm_demo(struct appdata *ad);
+
+#endif /* __DEF_elm_demo_H__ */
diff --git a/live.viewer/dbox.app/include/elmdemo_util.h b/live.viewer/dbox.app/include/elmdemo_util.h
new file mode 100644 (file)
index 0000000..ccda3fa
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __ELMDEMO_UTIL_H__
+#define __ELMDEMO_UTIL_H_
+
+#include <Elementary.h>
+#include <syslog.h>
+#include <stdio.h>
+#include <efl_assist.h>
+
+#ifdef DESKTOP
+       #include "fake-tizen.h"
+#else
+       #include <vconf.h>
+#endif
+
+#ifdef _cplusplus
+extern "C" {
+#endif
+
+#ifndef S_
+#  define S_(str) dgettext("sys_string", str)
+#endif
+
+#define UNCLIPPED_CONTENT "unclipped"
+#define BOTTOM_PADDING_CONTENT_SIGNAL "elm,layout,content,bottom_padding"
+#define DEFAULT_CONTENT_SIGNAL "elm,layout,content,default"
+#define BOTTOM_PADDING_CONTENT_SOURCE "layout"
+
+void change_config_owner();
+void set_portrait_mode(Eina_Bool on);
+Eina_Bool is_portrait_mode();
+int get_rotation_degree();
+void set_rotation_degree(int degree);
+void set_rotation_mode(Eina_Bool rot_mode);
+Eina_Bool get_rotation_mode();
+
+
+#ifdef _cplusplus
+}
+#endif
+
+#endif // end of ELMDEMO_UTIL_H
diff --git a/live.viewer/dbox.app/include/elmglviewgears.h b/live.viewer/dbox.app/include/elmglviewgears.h
new file mode 100644 (file)
index 0000000..3f1a514
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_ElmGLViewGears_H_
+#define __DEF_test_ElmGLViewGears_H_
+
+
+#include <Elementary.h>
+#include <Evas_GL.h>
+
+#ifndef M_PI
+#define M_PI 3.14159265
+#endif
+
+typedef struct _Gear {
+   GLfloat *vertices;
+   GLuint vbo;
+   int count;
+   int vertices_amount;
+} Gear;
+
+// GL related data here..
+typedef struct _GLData
+{
+   Evas_GL_API *glapi;
+   GLuint       program;
+   GLuint       vtx_shader;
+   GLuint       fgmt_shader;
+   int          initialized : 1;
+   int          mouse_down : 1;
+
+   // Gear Stuff
+   GLfloat      view_rotx;
+   GLfloat      view_roty;
+   GLfloat      view_rotz;
+
+   Gear        *gears[50];
+
+   GLfloat      angle;
+
+   GLuint       proj_location;
+   GLuint       light_location;
+   GLuint       color_location;
+
+   GLfloat      proj[16];
+   GLfloat      light[3];
+
+   GLfloat gears_color[50][4];
+   GLfloat gears_x_position[50];
+   GLfloat gears_y_position[50];
+   GLfloat gears_z_position[50];
+
+
+} GLData;
+
+Evas_Object* fps_label;
+
+void elmgears_cb(void *data, Evas_Object *obj, void *event_info);
+
+Evas_Object *glview[4], *box;
+
+#endif
diff --git a/live.viewer/dbox.app/include/entry.h b/live.viewer/dbox.app/include/entry.h
new file mode 100644 (file)
index 0000000..a3d14e0
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_entry_H_
+#define __DEF_test_entry_H_
+
+#include <Elementary.h>
+
+void entry_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_entry_H__ */
diff --git a/live.viewer/dbox.app/include/fake-tizen.h b/live.viewer/dbox.app/include/fake-tizen.h
new file mode 100644 (file)
index 0000000..f44aede
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef __APPCORE_EFL_FAKE_H_
+#define __APPCORE_EFL_FAKE_H_
+
+#include <Ecore_Input.h>
+#include <Ecore.h>
+
+//#define PREFIX "./"
+//#define ELM_DEMO_EDJ "./elm_demo_tizen.edj"
+#define _(A) A
+#define N_(A) A
+#define KEY_END "15"
+#define VCONFKEY_LANGSET NULL
+
+typedef struct _bundle
+{
+       void *data;
+} bundle;
+
+struct appcore_ops
+{
+       int (*create)(void *data);
+       int (*terminate)(void *data);
+       int (*pause)(void *data);
+       int (*resume)(void *data);
+       int (*reset)(bundle *b, void *data);
+       void *data;
+};
+
+#define APPCORE_EVENT_LANG_CHANGE 0
+
+enum appcore_rm {
+    APPCORE_RM_UNKNOWN,
+            /**< Unknown mode */
+    APPCORE_RM_PORTRAIT_NORMAL,
+                 /**< Portrait mode */
+    APPCORE_RM_PORTRAIT_REVERSE,
+                  /**< Portrait upside down mode */
+    APPCORE_RM_LANDSCAPE_NORMAL,
+                  /**< Left handed landscape mode */
+    APPCORE_RM_LANDSCAPE_REVERSE,
+                /**< Right handed landscape mode */
+};
+
+int appcore_measure_time();
+void appcore_measure_start();
+int  appcore_measure_time_from(const char *str);
+void appcore_set_rotation_cb(int (*_rotation_cb)(enum appcore_rm mode, void *data), void *data);
+void appcore_set_i18n(const char *pkg, const char* locale);
+int appcore_efl_main(const char *pkg, int *argc, char **argv, struct appcore_ops *ops);
+typedef int (*FakeCb)(void *);
+void appcore_set_event_callback(int event, FakeCb fake_cb, void *data);
+
+// vconf
+char *vconf_get_str(const char *in_key);
+void vconf_get_int(const char *key, int *value);
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE 1
+
+#endif
diff --git a/live.viewer/dbox.app/include/fastscroll.h b/live.viewer/dbox.app/include/fastscroll.h
new file mode 100644 (file)
index 0000000..a53b221
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_fastscroll_H_
+#define __DEF_test_fastscroll_H_
+
+#include <Elementary.h>
+#include <libintl.h>
+#include <string.h>
+
+void fastscroll_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_button_H__ */
diff --git a/live.viewer/dbox.app/include/floating.h b/live.viewer/dbox.app/include/floating.h
new file mode 100644 (file)
index 0000000..1e5cf2b
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_floating_H_
+#define __DEF_test_floating_H_
+
+#include <Elementary.h>
+
+void floating_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_floating_H_ */
diff --git a/live.viewer/dbox.app/include/fonteffecttest.h b/live.viewer/dbox.app/include/fonteffecttest.h
new file mode 100644 (file)
index 0000000..8e31695
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_FONTEFFECTTEST_H__
+#define __DEF_FONTEFFECTTEST_H__
+
+#include <Elementary.h>
+
+void fonteffecttest_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_FONTEFFECTTEST_H__ */
diff --git a/live.viewer/dbox.app/include/fonttest.h b/live.viewer/dbox.app/include/fonttest.h
new file mode 100644 (file)
index 0000000..13869a0
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_FONTTEST_H__
+#define __DEF_FONTTEST_H__
+
+#include <Elementary.h>
+
+void fonttest_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_FONTTEST_H__ */
diff --git a/live.viewer/dbox.app/include/gengrid.h b/live.viewer/dbox.app/include/gengrid.h
new file mode 100644 (file)
index 0000000..58a6607
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_gengrid_H_
+#define __DEF_test_gengrid_H_
+
+#include <Elementary.h>
+
+void gengrid_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_gallerygrid_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_myfilegrid_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_myfilegridtext_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_theme_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_incheck_cb(void *data, Evas_Object *obj, void *event_info);
+void gengrid_groupindex_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_gengrid_H__ */
+
diff --git a/live.viewer/dbox.app/include/genlist.h b/live.viewer/dbox.app/include/genlist.h
new file mode 100644 (file)
index 0000000..85177bb
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_GENLIST_H__
+#define __DEF_GENLIST_H__
+
+#include <Elementary.h>
+
+void genlist_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_check_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_edit_mode_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_externals_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_fastscroll_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_index_fastscroll_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_index_expandable_fastscroll_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_music_player_style_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_pinchzoom_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_radio_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_scroll_jump_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_normal_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_swipe_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_variable_height_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_variable_width_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_color_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_separator_cb(void *data, Evas_Object *obj, void *event_info);
+
+void genlist_dialogue_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_dialogue_item_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_dialogue_appitem_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_editfield_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_collection_cb(void *data, Evas_Object *obj, void *event_info);
+
+void genlist_dialogue_edit_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_dialogue_contact_edit_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_expandable_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_ndepth_expandable_cb(void *data, Evas_Object *obj, void *event_info);
+
+void genlist_theme_default_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_theme_no_effect_cb(void *data, Evas_Object *obj, void *event_info);
+
+void genlist_homogenous_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_animator_cb(void *data, Evas_Object *obj, void *event_info);
+
+void list_cb(void *data, Evas_Object *obj, void *event_info);
+
+char** genlist_get_demo_names(void);
+char** genlist_get_demo_country_names(void);
+
+#define NUM_OF_GENLIST_DEMO_NAMES 100
+#define NUM_OF_GENLIST_DEMO_COUNTRY_NAMES 50
+#define NUM_OF_GENLIST_LONG_TEXTS 50
+#define NUM_OF_GENLIST_TIMES 10
+
+#endif /* __DEF_GENLIST_H__ */
+
diff --git a/live.viewer/dbox.app/include/handler.h b/live.viewer/dbox.app/include/handler.h
new file mode 100644 (file)
index 0000000..e2ac3dc
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_HANDLER_H__
+#define __DEF_HANDLER_H__
+
+#include <Elementary.h>
+
+void handler_cb(void *data, Evas_Object * obj, void *event_info);
+
+#endif /* __DEF_HANDLER_H__ */
+
diff --git a/live.viewer/dbox.app/include/imageslider.h b/live.viewer/dbox.app/include/imageslider.h
new file mode 100644 (file)
index 0000000..b923fbc
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_IMAGESLIDER_H__
+#define __DEF_IMAGESLIDER_H__
+
+#include <Elementary.h>
+
+void imageslider_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_IMAGESLIDER_H__ */
+
diff --git a/live.viewer/dbox.app/include/index.h b/live.viewer/dbox.app/include/index.h
new file mode 100644 (file)
index 0000000..7f14095
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_index_H_
+#define __DEF_test_index_H_
+
+#include <Elementary.h>
+
+void index_cb(void *data, Evas_Object *obj, void *event_info);
+void horizontal_cb(void *data, Evas_Object *obj, void *event_info);
+void horizontal_loop_cb(void *data, Evas_Object *obj, void *event_info);
+void vertical_cb(void *data, Evas_Object *obj, void *event_info);
+void vertical_loop_cb(void *data, Evas_Object *obj, void *event_info);
+void index_4way_cb(void *data, Evas_Object *obj, void *event_info);
+void index_slider_cb(void *data, Evas_Object *obj, void *event_info);
+#endif /* __DEF_test_index_H__ */
diff --git a/live.viewer/dbox.app/include/indicator.h b/live.viewer/dbox.app/include/indicator.h
new file mode 100644 (file)
index 0000000..1e61b22
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_indicator_H_
+#define __DEF_test_indicator_H_
+
+#include <Elementary.h>
+
+void indicator_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_indicator_H__ */
diff --git a/live.viewer/dbox.app/include/instance.h b/live.viewer/dbox.app/include/instance.h
new file mode 100644 (file)
index 0000000..8aba969
--- /dev/null
@@ -0,0 +1,18 @@
+struct instance;
+
+extern struct instance *instance_create(const char *id, const char *content, int w, int h);
+extern int instance_destroy(struct instance *inst);
+
+extern struct instance *instance_find(const char *id);
+
+extern int instance_set_size_by_id(const char *id, int w, int h);
+extern int instance_set_size_by_handle(struct instance *handle, int w, int h);
+
+extern int instance_get_size_by_id(const char *id, int *w, int *h);
+extern int instance_get_size_by_handle(struct instance *handle, int *w, int *h);
+
+extern int instance_set_data(struct instance *inst, void *data);
+extern void *instance_data(struct instance *inst);
+
+extern int instance_crawling(int (*cb)(struct instance *inst, void *data), void *data);
+/* End of a file */
diff --git a/live.viewer/dbox.app/include/label.h b/live.viewer/dbox.app/include/label.h
new file mode 100644 (file)
index 0000000..bf32607
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_H_
+#define __DEF_test_label_H_
+
+#include <Elementary.h>
+
+void label_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_H__ */
diff --git a/live.viewer/dbox.app/include/label_colorstyles.h b/live.viewer/dbox.app/include/label_colorstyles.h
new file mode 100644 (file)
index 0000000..d19dec4
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_colorstyles_H_
+#define __DEF_test_label_colorstyles_H_
+
+#include <Elementary.h>
+
+void label_color_styles_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_colorstyles_H__ */
diff --git a/live.viewer/dbox.app/include/label_ellipsis.h b/live.viewer/dbox.app/include/label_ellipsis.h
new file mode 100644 (file)
index 0000000..b053224
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_ellipsis_H_
+#define __DEF_test_label_ellipsis_H_
+
+#include <Elementary.h>
+
+void label_ellipsis_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_ellipsis_H__ */
diff --git a/live.viewer/dbox.app/include/label_linebreakmodes.h b/live.viewer/dbox.app/include/label_linebreakmodes.h
new file mode 100644 (file)
index 0000000..2395bfe
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_linebreakmodes_H_
+#define __DEF_test_label_linebreakmodes_H_
+
+#include <Elementary.h>
+
+void label_linebreak_modes_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_linebreakmodes_H__ */
diff --git a/live.viewer/dbox.app/include/label_slide.h b/live.viewer/dbox.app/include/label_slide.h
new file mode 100644 (file)
index 0000000..a8f36e3
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_slide_H_
+#define __DEF_test_label_slide_H_
+
+#include <Elementary.h>
+
+void label_slide_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_slide_H__ */
diff --git a/live.viewer/dbox.app/include/label_textstyles.h b/live.viewer/dbox.app/include/label_textstyles.h
new file mode 100644 (file)
index 0000000..0ccb1ce
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_label_textstyles_H_
+#define __DEF_test_label_textstyles_H_
+
+#include <Elementary.h>
+
+void label_text_styles_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_label_textstyles_H__ */
diff --git a/live.viewer/dbox.app/include/layout.h b/live.viewer/dbox.app/include/layout.h
new file mode 100644 (file)
index 0000000..9157401
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_layout_H_
+#define __DEF_test_layout_H_
+
+#include <Elementary.h>
+
+void layout_cb(void *data, Evas_Object *obj, void *event_info);
+void layout_nocontent_styles_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_layout_H__ */
diff --git a/live.viewer/dbox.app/include/map.h b/live.viewer/dbox.app/include/map.h
new file mode 100644 (file)
index 0000000..b853ecc
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_map_H_
+#define __DEF_test_map_H_
+
+#include <Elementary.h>
+
+void map_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_map_H__ */
diff --git a/live.viewer/dbox.app/include/multibuttonentry.h b/live.viewer/dbox.app/include/multibuttonentry.h
new file mode 100644 (file)
index 0000000..d401e76
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_multibuttonentry_H_
+#define __DEF_test_multibuttonentry_H_
+
+#include <Elementary.h>
+
+void multibuttonentry_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_multibuttonentry_H__ */
diff --git a/live.viewer/dbox.app/include/naviframe.h b/live.viewer/dbox.app/include/naviframe.h
new file mode 100644 (file)
index 0000000..5542dd8
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_naviframe_H_
+#define __DEF_test_naviframe_H_
+
+#include <Elementary.h>
+
+void naviframe_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_naviframe_H_ */
+
diff --git a/live.viewer/dbox.app/include/panes.h b/live.viewer/dbox.app/include/panes.h
new file mode 100644 (file)
index 0000000..bd3851f
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_panes_H_
+#define __DEF_test_panes_H_
+
+#include <Elementary.h>
+
+void panes_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_panes_H__ */
diff --git a/live.viewer/dbox.app/include/popup.h b/live.viewer/dbox.app/include/popup.h
new file mode 100644 (file)
index 0000000..8ad793c
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_popup_H_
+#define __DEF_test_popup_H_
+
+#include <Elementary.h>
+
+void popup_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_popup_H__ */
diff --git a/live.viewer/dbox.app/include/progressbar.h b/live.viewer/dbox.app/include/progressbar.h
new file mode 100644 (file)
index 0000000..eff3913
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_TEST_PROGRESSBAR_H_
+#define __DEF_TEST_PROGRESSBAR_H_
+
+#include <Elementary.h>
+#include <Evas.h>
+
+typedef Evas_Object*(*PROGRESSBAR_CREATE)(Evas_Object *parent);
+
+Ecore_Timer *pb_timer_1;
+Ecore_Timer *pb_timer_2;
+Ecore_Timer *pb_timer_3;
+
+void progressbar_cb(void *data, Evas_Object *obj, void *event_info);
+void progressbar_add(char *style_name, char *container_name,
+                     Evas_Object *layout, Ecore_Timer *timer);
+void progressbar_pulse_add(char *style_name, char *container_name,
+                           Evas_Object *layout);
+void progressbars_create(void *data, Evas_Object *obj, void *event_info,
+                         char *page_name, PROGRESSBAR_CREATE _progressbar_create);
+Evas_Object *scroller_create(Evas_Object *parent);
+Eina_Bool fn_pb_timer(void *data);
+
+#endif /* __DEF_TEST_PROGRESSBAR_H_ */
diff --git a/live.viewer/dbox.app/include/progressbar_custom.h b/live.viewer/dbox.app/include/progressbar_custom.h
new file mode 100644 (file)
index 0000000..1a101ac
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_TEST_PROGRESSBAR_CUSTOM_H_
+#define __DEF_TEST_PROGRESSBAR_CUSTOM_H_
+
+#include <Elementary.h>
+
+void progressbar_default_cb(void *data, Evas_Object *obj, void *event_info);
+void progressbar_custom_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_TEST_PROGRESSBAR_CUSTOM_H_ */
diff --git a/live.viewer/dbox.app/include/radio.h b/live.viewer/dbox.app/include/radio.h
new file mode 100644 (file)
index 0000000..91b45b5
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_radio_H_
+#define __DEF_test_radio_H_
+
+#include <Elementary.h>
+
+void radio_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_button_H__ */
diff --git a/live.viewer/dbox.app/include/searchbar.h b/live.viewer/dbox.app/include/searchbar.h
new file mode 100644 (file)
index 0000000..5474864
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_TEST_SEARCHBAR_H__
+#define __DEF_TEST_SEARCHBAR_H__
+
+#include <Elementary.h>
+
+
+void searchbar_cb(void *data, Evas_Object *obj, void *event_info);
+void searchbar_normal_cb(void *data, Evas_Object *obj, void *event_info);
+void searchbar_external_cb(void *data, Evas_Object *obj, void *event_info);
+void searchbar_no_search_icon_cb(void *data, Evas_Object *obj, void *event_info);
+void searchbar_vi_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_TEST_SEARCHBAR_H__ */
diff --git a/live.viewer/dbox.app/include/segmentcontrol.h b/live.viewer/dbox.app/include/segmentcontrol.h
new file mode 100644 (file)
index 0000000..1a86969
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_segmented_control_H_
+#define __DEF_test_segmented_control_H_
+
+#include <Elementary.h>
+
+void segmented_control_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_segmented_control_H__ */
diff --git a/live.viewer/dbox.app/include/selectioninfo.h b/live.viewer/dbox.app/include/selectioninfo.h
new file mode 100644 (file)
index 0000000..358274d
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_selectioninfo_H_
+#define __DEF_test_selectioninfo_H_
+
+#include <Elementary.h>
+
+void selectioninfo_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_selectioninfo_H__ */
+
diff --git a/live.viewer/dbox.app/include/slider.h b/live.viewer/dbox.app/include/slider.h
new file mode 100644 (file)
index 0000000..43730f3
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_UISlider_H_
+#define __DEF_test_UISlider_H_
+
+#include <Elementary.h>
+
+void slider_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_UISlider_H__ */
diff --git a/live.viewer/dbox.app/include/slider_custom.h b/live.viewer/dbox.app/include/slider_custom.h
new file mode 100644 (file)
index 0000000..c61aca4
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_slider_custom_H_
+#define __DEF_slider_custom_H_
+
+#include <Elementary.h>
+
+void slider_custom_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_slider_custom_H_ */
diff --git a/live.viewer/dbox.app/include/slider_default.h b/live.viewer/dbox.app/include/slider_default.h
new file mode 100644 (file)
index 0000000..fbf5977
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_slider_default_H_
+#define __DEF_test_slider_default_H_
+
+#include <Elementary.h>
+
+void slider_default_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_slider_default_H__ */
diff --git a/live.viewer/dbox.app/include/slider_volume.h b/live.viewer/dbox.app/include/slider_volume.h
new file mode 100644 (file)
index 0000000..6dc3e9d
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_slider_volume_H_
+#define __DEF_test_slider_volume_H_
+
+#include <Elementary.h>
+
+void slider_volume_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_slider_volume_H__ */
diff --git a/live.viewer/dbox.app/include/style_button.h b/live.viewer/dbox.app/include/style_button.h
new file mode 100644 (file)
index 0000000..19fbd11
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_style_button_H_
+#define __DEF_test_style_button_H_
+
+#include <Elementary.h>
+
+void style_button_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_style_buttonH__ */
diff --git a/live.viewer/dbox.app/include/test_fontchange.h b/live.viewer/dbox.app/include/test_fontchange.h
new file mode 100644 (file)
index 0000000..50405db
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_fontchange_H_
+#define __DEF_test_fontchange_H_
+
+#include <Elementary.h>
+
+void test_fontchange_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_fontchange_H_ */
+
diff --git a/live.viewer/dbox.app/include/test_genlist.h b/live.viewer/dbox.app/include/test_genlist.h
new file mode 100644 (file)
index 0000000..f149cba
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_GENLIST_H__
+#define __DEF_GENLIST_H__
+
+#include <Elementary.h>
+
+void genlist_sweep_v01_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_sweep_v02_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_sweep_v03_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_test_all_styles_cb(void *data, Evas_Object *obj, void *event_info);
+void genlist_test_sweep_edit_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_GENLIST_H__ */
+
diff --git a/live.viewer/dbox.app/include/testmode.h b/live.viewer/dbox.app/include/testmode.h
new file mode 100644 (file)
index 0000000..923eb10
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_mode_H_
+#define __DEF_test_mode_H_
+
+#include <Elementary.h>
+
+void testmode_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_mode_H__ */
diff --git a/live.viewer/dbox.app/include/theme.h b/live.viewer/dbox.app/include/theme.h
new file mode 100644 (file)
index 0000000..f52e9b0
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_theme_H_
+#define __DEF_test_theme_H_
+
+#include <Elementary.h>
+
+void theme_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_theme_H__ */
diff --git a/live.viewer/dbox.app/include/tickernoti.h b/live.viewer/dbox.app/include/tickernoti.h
new file mode 100644 (file)
index 0000000..9798337
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_tickernoti_H_
+#define __DEF_test_tickernoti_H_
+
+#include <Elementary.h>
+
+void tickernoti_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_tickernoti_H__ */
+
diff --git a/live.viewer/dbox.app/include/toolbar.h b/live.viewer/dbox.app/include/toolbar.h
new file mode 100644 (file)
index 0000000..fffb42c
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_H_
+#define __DEF_test_controlbar_H_
+
+#include <Elementary.h>
+
+void toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_H__ */
+
diff --git a/live.viewer/dbox.app/include/toolbar_mix.h b/live.viewer/dbox.app/include/toolbar_mix.h
new file mode 100644 (file)
index 0000000..5b5c872
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_mixbar_H_
+#define __DEF_test_controlbar_mixbar_H_
+
+#include <Elementary.h>
+
+void mix_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_mixbar_H__ */
+
diff --git a/live.viewer/dbox.app/include/toolbar_tab.h b/live.viewer/dbox.app/include/toolbar_tab.h
new file mode 100644 (file)
index 0000000..63297bc
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_tabbar_H_
+#define __DEF_test_controlbar_tabbar_H_
+
+#include <Elementary.h>
+
+void tab_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_tabbar_H__ */
+
diff --git a/live.viewer/dbox.app/include/toolbar_tool.h b/live.viewer/dbox.app/include/toolbar_tool.h
new file mode 100644 (file)
index 0000000..b85b966
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_controlbar_toolbar_H_
+#define __DEF_test_controlbar_toolbar_H_
+
+#include <Elementary.h>
+
+void tool_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_controlbar_toolbar_H__ */
+
diff --git a/live.viewer/dbox.app/include/transit.h b/live.viewer/dbox.app/include/transit.h
new file mode 100644 (file)
index 0000000..b0b6689
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_effect_H_
+#define __DEF_test_effect_H_
+
+#include <Elementary.h>
+
+void effect_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_effect_H__ */
diff --git a/live.viewer/dbox.app/include/util.h b/live.viewer/dbox.app/include/util.h
new file mode 100644 (file)
index 0000000..3d2cef2
--- /dev/null
@@ -0,0 +1 @@
+extern int util_win_list_get(int (*win_cb)(int pid, Ecore_X_Window win, const char *cmd, void *data), void *data);
diff --git a/live.viewer/dbox.app/include/vi.h b/live.viewer/dbox.app/include/vi.h
new file mode 100644 (file)
index 0000000..27468ff
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_vi_H_
+#define __DEF_test_vi_H_
+
+#include <Elementary.h>
+
+void vi_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_vi_H__ */
diff --git a/live.viewer/dbox.app/include/video.h b/live.viewer/dbox.app/include/video.h
new file mode 100644 (file)
index 0000000..068a703
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_video_H_
+#define __DEF_test_video_H_
+
+#include <Elementary.h>
+
+void video_cb(void *data, Evas_Object *obj, void *event_info);
+void video_player_cb(void *data, Evas_Object *obj, void *event_info);
+void video_gesture_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_video_H__ */
diff --git a/live.viewer/dbox.app/include/wallpaper.h b/live.viewer/dbox.app/include/wallpaper.h
new file mode 100644 (file)
index 0000000..6fe659a
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 __DEF_test_wallpaper_H_
+#define __DEF_test_wallpaper_H_
+
+#include <Elementary.h>
+
+void wallpaper_theme_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif /* __DEF_test_wallpaper_H__ */
diff --git a/live.viewer/dbox.app/include/window.h b/live.viewer/dbox.app/include/window.h
new file mode 100644 (file)
index 0000000..2157ea5
--- /dev/null
@@ -0,0 +1,5 @@
+extern int window_list_create(Evas_Object *win);
+extern int window_list_update(Evas_Object *win);
+extern int window_list_destroy(void);
+
+/* End of a file */
diff --git a/live.viewer/dbox.app/res/CMakeLists.txt b/live.viewer/dbox.app/res/CMakeLists.txt
new file mode 100644 (file)
index 0000000..908cfe3
--- /dev/null
@@ -0,0 +1,5 @@
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/brick.png DESTINATION ${RESDIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/entry.png DESTINATION ${RESDIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/ocean.png DESTINATION ${RESDIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/app.png DESTINATION "/usr/share/icons/default/small" RENAME "com.samsung.w-add-viewer.clock.png")
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/app.png DESTINATION "/usr/share/icons/default/small" RENAME "com.samsung.w-add-viewer.app.png")
diff --git a/live.viewer/dbox.app/src/access.c b/live.viewer/dbox.app/src/access.c
new file mode 100644 (file)
index 0000000..27b52a2
--- /dev/null
@@ -0,0 +1,571 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "access.h"
+#include "genlist.h"
+
+#define AFTER_MIGRATION 1
+#include <Ecore_X.h>
+/*********************************************************
+ access
+ ********************************************************/
+#define NUM_OF_ITEMS 100
+
+extern char *genlist_demo_names[];
+
+typedef struct _Item_Data
+{
+       int index;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+       return strdup(_("edje button"));
+}
+
+static void _highlighted_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Highlight\n");
+}
+
+static void _unhighlighted_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Unhighlight\n");
+}
+
+static void _read_start_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Read start\n");
+}
+
+static void _read_stop_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Read stop\n");
+}
+
+static void _activated_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Activated\n");
+}
+
+static void _clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("Button Clicked\n");
+}
+
+static Evas_Object *_create_toolbar(Evas_Object *parent)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(parent);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", NULL, NULL);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", NULL, NULL);
+       item[2] = elm_toolbar_item_append(obj, NULL, "Artists list", NULL, NULL);
+       return obj;
+}
+
+static char *
+_gli_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       int index = id->index;
+
+       if (!strcmp(part, "elm.text.2")) index++;
+
+       snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       return strdup(buf);
+}
+
+static Evas_Object *
+_gli_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       return NULL;
+}
+
+static void
+_gli_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+}
+
+static Evas_Object *
+_create_inner_genlist(Evas_Object *parent)
+{
+       Evas_Object * genlist;
+       int index;
+       Elm_Object_Item *item;
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+
+       // Set genlist item class
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       itc->item_style = "1text.1icon";
+       itc->func.text_get = _gli_text_get;
+       itc->func.content_get = _gli_content_get;
+       itc->func.state_get = NULL;
+       itc->func.del = NULL;
+
+       // Append items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,                         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gli_sel,
+                               NULL);
+               id->item = item;
+               elm_object_item_data_set(item,id);
+       }
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+
+       if (!part) return NULL;
+       if (index == 1 && !strcmp(part, "elm.text")) return strdup("Screen reader (TTS)");
+       if (index == 2 && !strcmp(part, "elm.text")) return strdup("Scroll Test");
+       if (index == 3 && !strcmp(part, "elm.text")) return strdup("Overlap Test");
+       if (index == 4 && !strcmp(part, "elm.text")) return strdup("Access Changed Test");
+       if (index == 5 && !strcmp(part, "elm.text")) return strdup("Access Activate Test");
+       return NULL;
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int enable = 0;
+       Evas_Object *icon;
+       int index = (int)data;
+
+       if (!part) return NULL;
+       if (index != 1) return NULL;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               icon = elm_check_add(obj);
+
+#ifdef DESKTOP
+               enable = elm_config_access_get();
+#else
+               if (0 != vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &enable))
+                       printf("Failed to get vconf value\n");
+#endif
+               elm_check_state_set(icon, enable);
+
+               elm_object_style_set(icon, "on&off");
+               evas_object_pass_events_set(icon, 1);
+               evas_object_propagate_events_set(icon, 0);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int enable;
+       Elm_Object_Item *item;
+       Evas_Object *icon;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       icon = elm_object_item_part_content_get(item, "elm.icon");
+       if (!icon) return;
+
+       enable = (int) !elm_check_state_get(icon);
+#ifdef DESKTOP
+       elm_config_access_set(enable);
+       _elm_access_mouse_event_enabled_set(EINA_TRUE);
+#else
+       if (0 != vconf_set_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, enable)) {
+               printf("Faile to set vconf value\n");
+               return;
+       }
+#endif
+       elm_check_state_set(icon, enable);
+}
+
+static void
+_gl_second_sel(void *data, Evas_Object *obj, void * event_info)
+{
+       Evas_Object *navi, *layout, *scroller, *toolbar, *genlist, *btn, *ao;
+
+       Elm_Object_Item *item;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       navi = (Evas_Object *)data;
+
+       scroller = elm_scroller_add(navi);
+
+       layout = elm_layout_add(scroller);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "scroll_test");
+
+       ao = elm_object_part_access_register(layout, "edje_button");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button2");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button3");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button4");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button5");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button6");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       ao = elm_object_part_access_register(layout, "edje_button7");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, "Play");
+       elm_object_part_content_set(layout, "elm.swallow.content", btn);
+       elm_object_focus_custom_chain_append(layout, btn, NULL);
+       evas_object_smart_callback_add(btn, "access,highlighted", _highlighted_cb, btn);
+       evas_object_smart_callback_add(btn, "access,unhighlighted", _unhighlighted_cb, btn);
+       evas_object_smart_callback_add(btn, "access,read,start", _read_start_cb, btn);
+       evas_object_smart_callback_add(btn, "access,read,stop", _read_stop_cb, btn);
+       evas_object_smart_callback_add(btn, "access,activated", _activated_cb, btn);
+       evas_object_smart_callback_add(btn, "clicked", _clicked_cb, btn);
+
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, "button");
+       elm_object_part_content_set(layout, "elm.swallow.content2", btn);
+       elm_object_focus_custom_chain_append(layout, btn, NULL);
+
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, "button");
+       elm_object_part_content_set(layout, "elm.swallow.content3", btn);
+       elm_object_focus_custom_chain_append(layout, btn, NULL);
+
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, "button");
+       elm_object_part_content_set(layout, "elm.swallow.content4", btn);
+       elm_object_focus_custom_chain_append(layout, btn, NULL);
+
+       genlist = _create_inner_genlist(layout);
+       elm_object_part_content_set(layout, "elm.swallow.genlist", genlist);
+       elm_object_focus_custom_chain_append(layout, genlist, NULL);
+
+       toolbar = _create_toolbar(layout);
+       elm_object_part_content_set(layout, "elm.swallow.toolbar", toolbar);
+       elm_object_focus_custom_chain_append(layout, toolbar, NULL);
+
+       elm_object_content_set(scroller, layout);
+
+       elm_naviframe_item_push(navi, _("Scroll Test"), NULL, NULL, scroller, NULL);
+}
+
+static char *
+_overlap_test_access_info_cb(void *data, Evas_Object *obj)
+{
+   if (data) return strdup(data);
+   return NULL;
+}
+
+static void _access_activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item)
+{
+       Eina_Strbuf *strbuf;
+       char *txt = (char *)data;
+
+       strbuf = eina_strbuf_new();
+       eina_strbuf_append_printf(strbuf, "%s rectangle is activated", txt);
+
+       elm_access_say(eina_strbuf_string_get(strbuf));
+       eina_strbuf_free(strbuf);
+}
+
+static Evas_Object *
+_create_layout(Evas_Object *parent)
+{
+       Evas_Object *layout;
+       Evas_Object *to;
+       Evas_Object *red_ao, *green_ao, *blue_ao;
+       Eina_List *custom_chain = NULL;
+
+       // Create layout
+       layout = elm_layout_add(parent);
+
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "overlap_test");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "red");
+       red_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(red_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "red");
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "green");
+       green_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(green_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "green");
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "blue");
+       blue_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(blue_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "blue");
+
+       custom_chain = eina_list_append(custom_chain, red_ao);
+       custom_chain = eina_list_append(custom_chain, green_ao);
+       custom_chain = eina_list_append(custom_chain, blue_ao);
+
+       elm_access_activate_cb_set(red_ao, _access_activate_cb, "red");
+       elm_access_activate_cb_set(green_ao, _access_activate_cb, "green");
+       elm_access_activate_cb_set(blue_ao, _access_activate_cb, "blue");
+
+       elm_object_focus_custom_chain_set(layout, custom_chain);
+
+       return layout;
+}
+
+static Evas_Object *
+_create_fourth_layout(Evas_Object *parent)
+{
+       Evas_Object *layout;
+       Evas_Object *to;
+       Evas_Object *red_ao, *green_ao, *blue_ao;
+
+       // Create layout
+       layout = elm_layout_add(parent);
+
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "overlap_test");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "red");
+       red_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(red_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "red");
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "green");
+       green_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(green_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "green");
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(layout), "blue");
+       blue_ao = elm_access_object_register(to, layout);
+       elm_access_info_cb_set(blue_ao, ELM_ACCESS_INFO, _overlap_test_access_info_cb, "blue");
+
+       elm_access_activate_cb_set(red_ao, _access_activate_cb, "red");
+       elm_access_activate_cb_set(green_ao, _access_activate_cb, "green");
+       elm_access_activate_cb_set(blue_ao, _access_activate_cb, "blue");
+
+       return layout;
+}
+
+static void
+_gl_third_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       Evas_Object *layout;
+
+       layout = _create_layout(data);
+
+       elm_naviframe_item_push(data, _("Overlap Test"), NULL, NULL, layout, NULL);
+}
+
+static void _activate_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *entry;
+
+       if (data) entry = data;
+       else entry = obj;
+
+       elm_entry_input_panel_show(entry);
+}
+
+static Evas_Object *
+_create_fifth_layout(Evas_Object *parent)
+{
+       Evas_Object *layout, *en, *label;
+
+       // Create layout
+       layout = elm_layout_add(parent);
+
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "activate_test");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       label = elm_label_add(parent);
+       elm_object_text_set(label, "Open input panel by 1 finger double tap.");
+       elm_object_part_content_set(layout, "elm.swallow.label", label);
+
+       en = elm_entry_add(parent);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_entry_input_panel_enabled_set(en, EINA_FALSE);
+       elm_object_part_content_set(layout, "elm.swallow.entry", en);
+
+       evas_object_smart_callback_add(label, "access,activate", _activate_cb, en);
+       evas_object_smart_callback_add(en, "access,activate", _activate_cb, NULL);
+
+       return layout;
+}
+
+static void _access_highlight_chain_set(Elm_Object_Item *it)
+{
+       Evas_Object *content;
+       Evas_Object *it_ao;
+       Evas_Object *to, *red_ao, *green_ao, *blue_ao;
+
+       content = elm_object_item_content_get(it);
+
+       it_ao = elm_object_item_access_object_get(it);
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(content), "blue");
+       blue_ao = elm_access_object_get(to);
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(content), "green");
+       green_ao = elm_access_object_get(to);
+
+       to = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(content), "red");
+       red_ao = elm_access_object_get(to);
+
+       elm_access_highlight_next_set(it_ao, ELM_HIGHLIGHT_DIR_NEXT, blue_ao);
+       elm_access_highlight_next_set(blue_ao, ELM_HIGHLIGHT_DIR_NEXT, green_ao);
+       elm_access_highlight_next_set(green_ao, ELM_HIGHLIGHT_DIR_NEXT, red_ao);
+       elm_access_highlight_next_set(red_ao, ELM_HIGHLIGHT_DIR_NEXT, it_ao);
+}
+
+static void _access_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Eina_List *items, *l = NULL;
+       Elm_Object_Item *it;
+
+       if (!elm_config_access_get()) return;
+
+       items = elm_naviframe_items_get(obj);
+       EINA_LIST_FOREACH(items, l, it) {
+               if (it == data) _access_highlight_chain_set(it);
+       }
+}
+
+static void
+_gl_fourth_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       Evas_Object *layout;
+
+       layout = _create_fourth_layout(data);
+
+       item = elm_naviframe_item_push(data, _("Access Changed"), NULL, NULL, layout, NULL);
+       _access_highlight_chain_set(item);
+
+       evas_object_smart_callback_add(data, "access,changed", _access_changed_cb, item);
+}
+
+static void
+_gl_fifth_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item;
+
+       item = (Elm_Object_Item *) event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       Evas_Object *layout;
+
+       layout = _create_fifth_layout(data);
+
+       elm_naviframe_item_push(data, _("Access Activate"), NULL, NULL, layout, NULL);
+}
+
+static Evas_Object *
+_create_genlist(Evas_Object *parent)
+{
+       Evas_Object * genlist;
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+
+       // Set genlist item class
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       itc->item_style = "1text.1icon";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = NULL;
+       itc->func.del = NULL;
+
+       // Append items
+       elm_genlist_item_append(genlist, itc, (void *)1, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       elm_genlist_item_append(genlist, itc, (void *)2, NULL, ELM_GENLIST_ITEM_NONE, _gl_second_sel, parent);
+       elm_genlist_item_append(genlist, itc, (void *)3, NULL, ELM_GENLIST_ITEM_NONE, _gl_third_sel, parent);
+       elm_genlist_item_append(genlist, itc, (void *)4, NULL, ELM_GENLIST_ITEM_NONE, _gl_fourth_sel, parent);
+       elm_genlist_item_append(genlist, itc, (void *)5, NULL, ELM_GENLIST_ITEM_NONE, _gl_fifth_sel, parent);
+
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void access_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad->nf);
+
+       elm_naviframe_item_push(ad->nf, _("Accessibility"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/autoscroll.c b/live.viewer/dbox.app/src/autoscroll.c
new file mode 100644 (file)
index 0000000..431cc14
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "dialoguegroup.h"
+#include <Ecore_X.h>
+
+/*********************************************************
+   AutoScroll
+ ********************************************************/
+
+typedef struct _Autoscroll_Data Autoscroll_Data;
+struct _Autoscroll_Data
+{
+       Evas_Object *outer_box;
+};
+
+/* a sample text string */
+static const char entry_input_text[] = {
+       "Enlightenment is the flagship and original name bearer "
+       "for this project. Once it was just a humble window manager "
+       "for X11 that wanted to do things differently. To do them "
+       "better, but it has expanded. This can be confusing so when"
+       " we refer to Enlightenment, we may mean the project as a "
+       "whole or just the window manager proper. The libraries "
+       "behind Enlightenment are referred to as EFL collectively,"
+       " each with a specific name and purpose. The window manager "
+       "is a lean, fast, modular and very extensible window manager "
+       "for X11 and Linux. It is classed as a desktop shell providing"
+       " the things you need to operate your desktop (or laptop), but"
+       "is not a whole application suite. This covered launching "
+       "applications, managing their windows and doing other system "
+       "tasks like suspending, reboots, managing files etc. "
+};
+
+/* function to create a scroller object */
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static Evas_Object* _create_mutli_scroll_layout(Evas_Object* parent)
+{
+       Evas_Object *en;
+
+       //Layout for Entries.
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "ui_entryfields");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part1", en);
+       elm_entry_entry_set(en, "Enlightenment Foundation Lib (EFL).");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part2", en);
+       elm_entry_entry_set(en, "Elementary is a VERY SIMPLE toolkit. It is not meant for "
+                               "writing extensive desktop applications");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part3", en);
+       elm_entry_entry_set(en, "Elementary is meant to make the programmers work almost "
+                               "brainless but give them lots of flexibility.");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part4", en);
+       elm_entry_entry_set(en, "Enlightenment, the window manager is built on top of "
+                               "building blocks known as EFL (the Enlightenment Foundation Libraries).");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part5", en);
+       elm_entry_entry_set(en, "Enlightenment covers uses from small mobile devices like phones all the "
+                               "way to powerful multi-core desktops (which are the primary "
+                               "development environment).");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part6", en);
+       elm_entry_entry_set(en, "Enlightenment is not just a window manager for Linux/X11 and "
+                               "others, but also a whole suite of libraries to help you create"
+                               " beautiful user interfaces with much less work than doing it "
+                               "the old fashioned way and fighting with traditional toolkits, "
+                               "not to mention a traditional window manager.");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       return layout;
+}
+
+static Evas_Object* _create_mutli_scroll2_layout(Evas_Object* parent)
+{
+       Evas_Object *en;
+
+       //Layout for Entries.
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "ui_entryfields1");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part1", en);
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_entry_entry_set(en,
+                       "Enlightenment is the flagship and original name bearer "
+                       "for this project. Once it was just a humble window manager "
+                       "for X11 that wanted to do things differently. To do them "
+                       "better, but it has expanded. This can be confusing so when"
+                       " we refer to Enlightenment, we may mean the project as a"
+                       " whole or just the window manager proper. The libraries "
+                       "behind Enlightenment are referred to as EFL collectively,"
+                       " each with a specific name and purpose. "
+                       );
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part2", en);
+       elm_entry_entry_set(en, "Enlightenment covers uses from small mobile devices like phones all the "
+                               "way to powerful multi-core desktops (which are the primary "
+                               "development environment).");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       en = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(layout, "en_part3", en);
+       elm_entry_entry_set(en, "Enlightenment Foundation Libraries (EFL).");
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       return layout;
+
+}
+
+static Evas_Object* _create_scroll_entry_layout(Evas_Object* parent)
+{
+       Evas_Object  *en;
+       Evas_Object *bx;
+
+       bx = elm_box_add(parent);
+       evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       en = elm_entry_add(parent);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_entry_entry_set(en,entry_input_text);
+
+       evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(en);
+       elm_box_pack_end(bx, en);
+
+       evas_object_show(bx);
+
+       return bx;
+}
+
+/*
+Function :
+Create an outer layout
+Create a conformant widget
+Create a scroller widget
+Add a inner layout to scroller
+Add scroller to conformant widget
+Add conformant widget to outer layout
+*/
+static void add_layout_to_conformant(void *data, Evas_Object *lay_in, const char *title)
+{
+       Evas_Object *scroller;
+       Evas_Object *outer_layout;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       /* creating a sample outer layout. Applicaitons have to use their own
+        way of creating outer layout */
+       outer_layout = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(outer_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_file_set(outer_layout, ELM_DEMO_EDJ, "autoscroll_conform");
+
+       scroller = _create_scroller(ad->nf);
+       elm_object_content_set(scroller, lay_in);
+       elm_object_part_content_set(outer_layout, "conform_part", scroller);
+       elm_naviframe_item_push(ad->nf, title, NULL, NULL, outer_layout, NULL);
+}
+
+/*
+   Test use case : Adding a scroller with editifields to another scroller
+   and finally added to elm conformant widget for autoscrolling
+*/
+static void _use_case_multi_scroller_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *lay_in;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       lay_in = _create_mutli_scroll_layout(ad->nf);
+       add_layout_to_conformant(data, lay_in, _("Scroller"));
+}
+
+/*
+   Test use case : Adding a scroller with editifields (with a different size to
+   view inner scroller) to another outer scroller
+   and finally added to elm conformant widget for autoscrolling
+*/
+static void _use_case_multi_scroller2_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *lay_in;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       lay_in = _create_mutli_scroll2_layout(ad->nf);
+       add_layout_to_conformant(data, lay_in, _("Scroller in Scroller"));
+}
+
+/*
+   Test use case : Adding scrolled entry to elm conformant widget for auto-scrolling
+*/
+static void _use_case_scroll_entry_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *lay_in;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       lay_in = _create_scroll_entry_layout(ad->nf);
+       add_layout_to_conformant(data, lay_in, _("ScrolledEntry"));
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL)
+         {
+            printf("list item is NULL\n");
+            return;
+         }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+void autoscroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       Evas_Object  *list;
+
+       ecore_imf_init();
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+
+       elm_list_item_append(list, "ScrolledEntry", NULL, NULL,
+                       _use_case_scroll_entry_cb, ad);
+       elm_list_item_append(list, "Scroller", NULL, NULL,
+                       _use_case_multi_scroller_cb, ad);
+       elm_list_item_append(list, "Scroller in Scroller", NULL, NULL,
+                       _use_case_multi_scroller2_cb, ad);
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Autoscroll"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/bubble.c b/live.viewer/dbox.app/src/bubble.c
new file mode 100644 (file)
index 0000000..e7c998b
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "bubble.h"
+
+/*********************************************************
+ bubble
+********************************************************/
+
+static char *g_messages[] = {
+       "Good morning, Princess?",
+       "It's you again. How do you do this?",
+       "This is the princess who fell from the sky into my arms.",
+       "Yes. We keep meeting like this. You just suddenly show up.",
+       "We could make plans to meet.",
+       "No, it's nicer this way. I hope we meet again suddenly.",
+       "Don't you know that it takes so little to make me happy?",
+       "Good morning, Princess!  ",
+       "This is incredible. You owe me an explanation.",
+       "No, you're the one who owes me an explanation. You've really got a crush on me. Where shall we go, Princess?",
+       NULL
+};
+
+static char *g_urls[] = {
+       NULL,
+       ICON_DIR"/Albums_Item/Albums_Item1.jpg",
+       ICON_DIR"/Albums_Item/Albums_Item2.jpg", NULL, NULL, NULL,
+       ICON_DIR"/Albums_Item/Albums_Item3.jpg", NULL,
+       ICON_DIR"/Albums_Item/Albums_Item4.jpg", NULL
+};
+
+static char *g_times[] = {
+       "10:00 AM", "10:01 AM", "10:02 AM", "10:03 AM", "10:04 AM", "10:05 AM",
+       "3:50 PM", "3:51 PM", "3:52 PM", "3:53 PM", NULL
+};
+
+static Ecore_Animator *g_ani = NULL;
+static int g_msgcnt = 0;
+static Evas_Object *g_scroller = NULL;
+
+static Evas_Object *_create_scroller(Evas_Object *parent);
+
+static Eina_Strbuf *_bubble_message_get(int index)
+{
+       Eina_Strbuf *buf = eina_strbuf_new();
+
+       // message
+       if (g_messages[index])
+               eina_strbuf_append(buf, g_messages[index]);
+
+       if (g_urls[index]) {
+               // padding between text and item
+               eina_strbuf_append(buf, "<br><font_size=6><br></font_size>");
+               eina_strbuf_append(buf, "<item size=150x150 vsize=full href=file://");
+               eina_strbuf_append(buf, g_urls[index]);
+               eina_strbuf_append(buf, "></item></align>");
+       }
+
+       switch (index)
+       {
+               case 6:
+                       eina_strbuf_append(buf, "<br><font_size=6><br></font_size>");
+                       eina_strbuf_append(buf, "File01.jpg(20KB)");
+                       break;
+               case 8:
+                       eina_strbuf_append(buf, "<br><font_size=6><br></font_size>");
+                       eina_strbuf_append(buf, "File02.jpg(30KB)");
+                       break;
+               default:
+                       break;
+       }
+
+       return buf;
+}
+
+
+static Eina_Bool _bubble_add(void *data)
+{
+       Evas_Object *box, *layout, *entry;
+       Evas_Object *cicon, *check, *btn1, *pgbar;
+       Eina_Strbuf *buf;
+
+       if (!g_messages[g_msgcnt]) {
+               g_msgcnt = 0;
+               g_ani = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+       box = data;
+
+       /* Create Layout */
+       layout = elm_layout_add(box);
+       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_show(layout);
+
+       if (g_msgcnt % 2)
+               elm_layout_theme_set(layout, "layout", "bubble", "sentmessage/default");
+       else
+               elm_layout_theme_set(layout, "layout", "bubble", "readmessage/default");
+
+       /* Create Entry */
+       entry = elm_entry_add(box);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       if (g_msgcnt % 2)
+               elm_object_style_set(entry, "sentmessage");
+       else
+               elm_object_style_set(entry, "readmessage");
+
+       elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+       elm_entry_editable_set(entry, EINA_FALSE);
+       buf = _bubble_message_get(g_msgcnt);
+       elm_entry_entry_set(entry, eina_strbuf_string_get(buf));
+       eina_strbuf_free(buf);
+       elm_object_part_text_set(entry, "elm.text.time", g_times[g_msgcnt]);
+       evas_object_show(entry);
+
+       switch (g_msgcnt % 9)
+       {
+               case 1:
+                       /* group chat name */
+                       elm_object_signal_emit(entry, "elm,state,groupchat,enabled", "elm");
+                       elm_object_part_text_set(entry, "elm.text.groupchat", "Josh");
+                       break;
+               case 2:
+                       /* caller ID */
+                       cicon = elm_image_add(box);
+                       elm_image_file_set(cicon, ICON_DIR"/genlist/iu.jpg", NULL);
+                       elm_object_signal_emit(entry, "elm,state,callerid,enabled", "elm");
+                       elm_object_part_content_set(entry, "elm.swallow.callerid", cicon);
+
+                       /* status text*/
+                       elm_object_part_text_set(entry, "elm.text.status", "Unread");
+
+                       /* icon */
+                       elm_object_signal_emit(entry, "elm,state,contents,enabled", "elm");
+                       btn1 = elm_button_add(entry);
+                       elm_object_style_set(btn1, "reveal");
+                       elm_object_part_content_set(entry, "elm.swallow.icon1", btn1);
+                       break;
+               case 3:
+                       /* group chat name */
+                       elm_object_signal_emit(entry, "elm,state,groupchat,enabled", "elm");
+                       elm_object_part_text_set(entry, "elm.text.groupchat", "Josh");
+
+                       /* caller ID */
+                       cicon = elm_image_add(box);
+                       elm_image_file_set(cicon, ICON_DIR"/genlist/top.jpg", NULL);
+                       elm_object_signal_emit(entry, "elm,state,callerid,enabled", "elm");
+                       elm_object_part_content_set(entry, "elm.swallow.callerid", cicon);
+
+                       /* status icon*/
+                       elm_object_signal_emit(entry, "elm,state,content,status,enabled", "elm");
+                       pgbar = elm_progressbar_add(box);
+                       elm_object_style_set(pgbar, "list_process_small");
+                       evas_object_size_hint_align_set(pgbar, EVAS_HINT_FILL, 0.5);
+                       evas_object_size_hint_weight_set(pgbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_progressbar_pulse(pgbar, EINA_TRUE);
+                       elm_object_part_content_set(entry, "elm.swallow.status", pgbar);
+                       break;
+               case 4:
+                       /* group chat name */
+                       elm_object_signal_emit(entry, "elm,state,groupchat,enabled", "elm");
+                       elm_object_part_text_set(entry, "elm.text.groupchat", "Ellie");
+
+                       /* status text*/
+                       elm_object_part_text_set(entry, "elm.text.status", "Unread");
+                       break;
+               case 5:
+                       /* caller ID */
+                       cicon = elm_image_add(box);
+                       elm_image_file_set(cicon, ICON_DIR"/genlist/top.jpg", NULL);
+                       elm_object_signal_emit(entry, "elm,state,callerid,enabled", "elm");
+                       elm_object_part_content_set(entry, "elm.swallow.callerid", cicon);
+
+                       /* status text*/
+                       elm_object_part_text_set(entry, "elm.text.status", "Sent");
+                       break;
+               case 6:
+                       /* group chat name */
+                       elm_object_signal_emit(entry, "elm,state,groupchat,enabled", "elm");
+                       elm_object_part_text_set(entry, "elm.text.groupchat", "Ellie");
+
+                       /* caller ID */
+                       cicon = elm_image_add(box);
+                       elm_image_file_set(cicon, ICON_DIR"/genlist/iu.jpg", NULL);
+                       elm_object_signal_emit(entry, "elm,state,callerid,enabled", "elm");
+                       elm_object_part_content_set(entry, "elm.swallow.callerid", cicon);
+                       break;
+               case 7:
+                       /* icon */
+                       elm_object_signal_emit(entry, "elm,state,contents,enabled", "elm");
+                       btn1 = elm_button_add(entry);
+                       elm_object_style_set(btn1, "cancel");
+                       elm_object_part_content_set(entry, "elm.swallow.icon1", btn1);
+                       break;
+               case 8:
+                       /* select icon */
+                       check = elm_check_add(box);
+                       elm_check_state_set(check, EINA_TRUE);
+                       elm_layout_signal_emit(layout, "elm,state,select,enable", "elm");
+                       elm_object_part_content_set(layout, "elm.swallow.select_icon", check);
+                       break;
+               default:
+                       break;
+       }
+
+       elm_object_part_content_set(layout, "elm.icon", entry);
+       elm_box_pack_end(box, layout);
+
+       g_msgcnt++;
+       return ECORE_CALLBACK_RENEW;
+}
+
+static Evas_Object *
+_create_bubbles(Evas_Object *parent)
+{
+       Evas_Object *box, *rect;
+
+       box = elm_box_add(parent);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0);
+       evas_object_show(box);
+
+       /* Add top padding */
+       rect = evas_object_rectangle_add(evas_object_evas_get(box));
+       evas_object_size_hint_min_set(rect, 0, 30*elm_config_scale_get());
+       evas_object_show(rect);
+       elm_box_pack_end(box, rect);
+
+       g_ani = ecore_animator_add(_bubble_add, box);
+
+       return box;
+}
+
+static Evas_Object *
+_create_scroller(Evas_Object *parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (g_ani) ecore_animator_del(g_ani);
+       g_ani = NULL;
+       return EINA_TRUE;
+}
+
+void
+bubble_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       Evas_Object *scroller, *layout_inner;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Bubble"), NULL, NULL, scroller, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+       g_scroller = scroller;
+
+       layout_inner = _create_bubbles(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/button.c b/live.viewer/dbox.app/src/button.c
new file mode 100644 (file)
index 0000000..3f25c5b
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "button.h"
+#include "style_button.h"
+
+/*********************************************************
+  button
+ ********************************************************/
+static Evas_Object *_create_scroller(Evas_Object * parent);
+static Evas_Object *_create_buttons(Evas_Object * parent);
+static void _style_normal_cb(void *data, Evas_Object * obj, void *event_info);
+static void _style_extended_cb(void *data, Evas_Object * obj, void *event_info);
+
+static struct _menu_item _menu_its[] = {
+       {"Normal Styles", _style_normal_cb},
+       {"Extended Styles", _style_extended_cb},
+       {"Custom Style", style_button_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+enum {
+       EXPAND_OPENED_STYLE               = 1001, /* Normal Expand styles */
+       EXPAND_CLOSED_STYLE               = 1002,
+       EXPAND_OPENED_EXTEND_STYLE        = 1003, /* Extended Expand styles */
+       EXPAND_CLOSED_EXTEND_STYLE        = 1004,
+       EXPAND_ICON_OPENED_STYLE          = 1005,
+       EXPAND_ICON_CLOSED_STYLE          = 1006,
+       EXPAND_ICON_OPENED_EXTEND_STYLE   = 1007,
+       EXPAND_ICON_CLOSED_EXTEND_STYLE   = 1008
+}expand_styles;
+
+static int toggle = 0;
+static int toggle1 = 0;
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (!it) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _go_button_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       int param = (int)(long)(data);
+       char buf[PATH_MAX];
+       Evas_Object *btn = obj;
+
+       switch (param) {
+       case EXPAND_OPENED_STYLE:
+       case EXPAND_OPENED_EXTEND_STYLE:
+               if (toggle == 0) {
+                       /* expand button closed style */
+                       if (param == EXPAND_OPENED_STYLE) snprintf(buf, sizeof(buf), "expand/closed");
+                       /* expand button closed extended style */
+                       else if (param == EXPAND_OPENED_EXTEND_STYLE) snprintf(buf, sizeof(buf), "expand/closed/extended");
+
+                       toggle = 1;
+               } else {
+                       /* expand button opened style */
+                       if (param == EXPAND_OPENED_STYLE) snprintf(buf, sizeof(buf), "expand/opened");
+                       /* expand button opened extended style */
+                       else if (param == EXPAND_OPENED_EXTEND_STYLE) snprintf(buf, sizeof(buf), "expand/opened/extended");
+
+                       toggle = 0;
+               }
+               elm_object_style_set(btn, buf);
+               printf("clicked event on Button:%d\n", param);
+               break;
+       case EXPAND_ICON_OPENED_STYLE:
+       case EXPAND_ICON_OPENED_EXTEND_STYLE:
+               if (toggle1 == 0) {
+                       /* icon button closed style*/
+                       if (param == EXPAND_ICON_OPENED_STYLE) snprintf(buf, sizeof(buf), "icon_expand_opened");
+                       /* icon button closed extended style*/
+                       else if (param == EXPAND_ICON_OPENED_EXTEND_STYLE) snprintf(buf, sizeof(buf), "icon_expand_opened/extended");
+
+                       toggle1 = 1;
+               } else {
+                       /* icon button opened style*/
+                       if (param == EXPAND_ICON_OPENED_STYLE) snprintf(buf, sizeof(buf), "icon_expand_closed");
+                       /* icon button opened extended style*/
+                       else if (param == EXPAND_ICON_OPENED_EXTEND_STYLE) snprintf(buf, sizeof(buf), "icon_expand_closed/extended");
+
+                       toggle1 = 0;
+               }
+               elm_object_style_set(btn, buf);
+               printf("clicked event on Button:%d\n", param);
+               break;
+       default:
+               printf("clicked event on Button:%d\n", param);
+               break;
+       }
+}
+
+static void _go_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       int param = (int)(long)(data);
+
+       printf("unpressed event on Button:%d\n", param);
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+       char *ret;
+       int param = (int)(long)(data);
+       Eina_Strbuf *buf;
+
+       buf = eina_strbuf_new();
+       switch (param) {
+       case EXPAND_OPENED_STYLE:
+       case EXPAND_OPENED_EXTEND_STYLE:
+               eina_strbuf_append_printf(buf, "expand style for %d", param);
+               break;
+       case EXPAND_ICON_OPENED_STYLE:
+       case EXPAND_ICON_OPENED_EXTEND_STYLE:
+               eina_strbuf_append_printf(buf, "expand icon style for %d", param);
+               break;
+       default:
+               eina_strbuf_append_printf(buf, "there is no text to read on %d", param);
+               break;
+       }
+
+       ret = eina_strbuf_string_steal(buf);
+       eina_strbuf_free(buf);
+       return ret;
+}
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       int idx = 0;
+
+       if (!ad) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+static Evas_Object *_create_buttons(Evas_Object * parent)
+{
+       Evas_Object *btn;
+       Evas_Object *layout;
+       Evas_Object *ic;
+       char buf[PATH_MAX];
+       toggle = 0;
+       toggle1 = 0;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_reveal", btn);
+       elm_object_style_set(btn, "reveal");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)1);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)1);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)1);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_expand", btn);
+       elm_object_style_set(btn, "expand/opened");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)EXPAND_OPENED_STYLE);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)EXPAND_OPENED_STYLE);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)EXPAND_OPENED_STYLE);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_info", btn);
+       elm_object_style_set(btn, "info");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)3);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)3);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)3);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_rename", btn);
+       elm_object_style_set(btn, "rename");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)4);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)4);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)4);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_call", btn);
+       elm_object_style_set(btn, "call");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)5);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)5);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)5);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_warning", btn);
+       elm_object_style_set(btn, "warning");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)6);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)6);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)6);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_plus", btn);
+       elm_object_style_set(btn, "plus");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)7);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)7);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)7);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_minus", btn);
+       elm_object_style_set(btn, "minus");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)8);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)8);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)8);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_cancel", btn);
+       elm_object_style_set(btn, "cancel");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)9);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)9);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)9);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_send", btn);
+       elm_object_style_set(btn, "send");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)10);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)10);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)10);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_contact", btn);
+       elm_object_style_set(btn, "contact");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)11);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)11);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)11);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_circle", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", ic);
+       elm_object_style_set(btn, "circle/empty");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)12);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)12);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)12);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_icon_plus", btn);
+       elm_object_style_set(btn, "icon_plus");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)13);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)13);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)13);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_icon_minus", btn);
+       elm_object_style_set(btn, "icon_minus");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)14);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)14);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)14);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_icon_expand", btn);
+       elm_object_style_set(btn, "icon_expand_closed");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)EXPAND_ICON_OPENED_STYLE);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)EXPAND_ICON_OPENED_STYLE);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)EXPAND_ICON_OPENED_STYLE);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_style1", btn);
+       elm_object_style_set(btn, "style1");
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_button_call.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", ic);
+       elm_object_text_set(btn, _("style1"));
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)15);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)15);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)15);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_expandable_number", btn);
+       elm_object_style_set(btn, "expandable_number");
+       elm_object_text_set(btn, _("1"));
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)16);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)16);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)16);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_sweep", btn);
+       elm_object_style_set(btn, "sweep");
+       elm_object_text_set(btn, _("sweep"));
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)17);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)17);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)17);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_multibuttonentry", btn);
+       elm_object_style_set(btn, "multibuttonentry");
+       elm_object_text_set(btn, _("MBE"));
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)18);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)18);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)18);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_naviframe_title_text", btn);
+       elm_object_style_set(btn, "naviframe/title_text");
+       elm_object_text_set(btn, _("Create"));
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)19);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)19);
+       elm_access_info_cb_set(btn, ELM_ACCESS_INFO, _access_info_cb, (void *)19);
+
+       return layout;
+}
+
+static Evas_Object *_create_extended_style_buttons(Evas_Object * parent)
+{
+       Evas_Object *btn;
+       Evas_Object *layout;
+       toggle = 0;
+       toggle1 = 0;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/button-extended");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_reveal", btn);
+       elm_object_style_set(btn, "reveal/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)1);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)1);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_expand", btn);
+       elm_object_style_set(btn, "expand/opened/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)EXPAND_OPENED_EXTEND_STYLE);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)EXPAND_OPENED_EXTEND_STYLE);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_info", btn);
+       elm_object_style_set(btn, "info/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)3);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)3);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_rename", btn);
+       elm_object_style_set(btn, "rename/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)4);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)4);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_call", btn);
+       elm_object_style_set(btn, "call/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)5);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)5);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_warning", btn);
+       elm_object_style_set(btn, "warning/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)6);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)6);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_plus", btn);
+       elm_object_style_set(btn, "plus/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)7);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)7);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_minus", btn);
+       elm_object_style_set(btn, "minus/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)8);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)8);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_cancel", btn);
+       elm_object_style_set(btn, "cancel/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)9);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)9);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_send", btn);
+       elm_object_style_set(btn, "send/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)10);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)10);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_icon_plus", btn);
+       elm_object_style_set(btn, "icon_plus/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)11);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)11);
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_icon_minus", btn);
+       elm_object_style_set(btn, "icon_minus/extended");
+       evas_object_smart_callback_add(btn, "clicked", _go_button_clicked_cb, (void *)12);
+       evas_object_smart_callback_add(btn, "unpressed", _go_button_unpressed_cb, (void *)12);
+
+       return layout;
+}
+
+static Evas_Object *_create_scroller(Evas_Object * parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void _style_normal_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Normal Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_buttons(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static void _style_extended_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Extended Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_extended_style_buttons(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+void button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (!ad) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Button"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/center_popup.c b/live.viewer/dbox.app/src/center_popup.c
new file mode 100644 (file)
index 0000000..446d2bc
--- /dev/null
@@ -0,0 +1,2687 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "center_popup.h"
+
+/*********************************************************
+  popup
+ ********************************************************/
+static Evas_Object *popup_global = NULL;
+static Evas_Object *popup_global_2 = NULL;
+static Elm_Genlist_Item_Class itc;
+static Ecore_Timer *pb_timer = NULL;
+static Ecore_Timer *del_timer = NULL;
+static Evas_Object *list = NULL;
+static Eina_Bool rotcb_set = EINA_FALSE;
+static Eina_Bool rotation_cb = EINA_FALSE;
+static int state_index = 0; //selected radio index
+static Evas_Object *gen_popup = NULL;
+
+#define IMAGE_MAX 20
+
+typedef struct _Item_Data
+{
+       int index;
+       Evas_Object *genlist;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static void _on_rotation_changed(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_1line_change(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_2line_change(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_3line_change(void *data, Evas_Object *obj, void *event_info );
+static void _text_rotation_changed(void *data, Evas_Object *obj, void *event_info );
+
+typedef struct _Colorplane_Data Colorplane_Data;
+struct _Colorplane_Data
+{
+       Evas_Object *layout;
+       Evas_Object *colorselector;
+       Elm_Object_Item *it_last;
+       Elm_Object_Item *sel_it;
+       struct appdata *ad;
+       Eina_Bool changed;
+       int r, g, b, a;
+};
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *text;
+       const char *path;
+} Testitem;
+
+typedef struct _grid_data
+{
+       Elm_Object_Item *selected_item;
+       Eina_Bool selected;
+} grid_data;
+
+static char *Items[] = {
+       "Benny Benassi", "Main Item 2", "Main Item 3",
+       "Main Item 4", "Main Item 5", "Main Item 6",
+       "Main Item 7", "Main Item 8"
+};
+static char *Sub_Items[] = {
+       "08282828282", "Sub Item 2", "Sub Item 3",
+       "Sub Item 4", "Sub Item 5", "Sub Item 6",
+       "Sub Item 7", "Sub Item 8"
+};
+
+static void _popup_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_scroll_freeze_get(list)) elm_object_scroll_freeze_pop(list);
+}
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       if (popup_global) {
+               evas_object_del(popup_global);
+               popup_global = NULL;
+       }
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+
+       return EINA_TRUE;
+}
+
+static void _genlist_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_genlist_selected_item_get(obj);
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (!it) return;
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       if (rotation_cb) {
+               evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _text_rotation_changed);
+               rotation_cb = EINA_FALSE;
+       }
+       evas_object_del(obj);
+}
+
+static void _timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       evas_object_del(obj);
+}
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+
+       if (rotcb_set) {
+               evas_object_smart_callback_del(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_changed);
+               rotcb_set = EINA_FALSE;
+       }
+
+       evas_object_del(data);
+}
+
+static void _password_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
+               if (elm_object_focus_get(obj)) {
+                       if (elm_entry_is_empty(obj))
+                               elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+                       else
+                               elm_object_signal_emit(obj, "elm,state,clear,visible", "");
+               }
+       }
+}
+
+static void _password_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
+               if (!elm_entry_is_empty(obj))
+                       elm_object_signal_emit(obj, "elm,state,clear,visible", "");
+               else
+                       elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+       }
+       elm_object_signal_emit(obj, "elm,state,focus,on", "");
+}
+
+static void _password_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear"))
+               elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+       elm_object_signal_emit(obj, "elm,state,focus,off", "");
+}
+
+static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_entry_entry_set(data, "");
+}
+
+static void _password_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout = data;
+       Evas_Object *entry = elm_object_part_content_get(layout, "elm.swallow.content");
+       Eina_Bool state;
+       state = elm_check_state_get(obj);
+
+       if (state)
+               elm_entry_password_set(entry, EINA_FALSE);
+       else
+               elm_entry_password_set(entry, EINA_TRUE);
+}
+
+static void _response_global_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_scroll_freeze_pop(list);
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       evas_object_hide(data);
+}
+
+static void _list_item_click(Evas_Object *obj, int index)
+{
+       printf("Index of the list=%d\n", index);
+       evas_object_del(obj);
+}
+
+static void _test(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *e_n = (Evas_Object *)data;
+       if (!elm_entry_is_empty(obj) && elm_entry_is_empty(e_n)) {
+               elm_object_focus_set(e_n, EINA_TRUE);
+               elm_entry_cursor_end_set(e_n);
+       }
+}
+
+static Eina_Bool _timer_cb(void *data)
+{
+       Evas_Object *popup = (Evas_Object *)data;
+       _timeout_cb(NULL, popup, NULL);
+       del_timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("item selected: %p\n", event_info);
+}
+
+static char * grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.text"))
+               return strdup(ti->text);
+
+       return NULL;
+}
+
+static Evas_Object * grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if(!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_gengrid_sel(void *data, Evas_Object *obj, void *ei)
+{
+       evas_object_smart_callback_del(elm_object_top_widget_get(data), "rotation,changed", _on_rotation_gengrid_1line_change);
+       evas_object_smart_callback_del(elm_object_top_widget_get(data), "rotation,changed", _on_rotation_gengrid_2line_change);
+       evas_object_smart_callback_del(elm_object_top_widget_get(data), "rotation,changed", _on_rotation_gengrid_3line_change);
+       evas_object_del(data);
+}
+
+static void
+_gengrid_sel_mode(void *data, Evas_Object *obj, void *ei)
+{
+       grid_data *gd = data;
+       elm_gengrid_item_selected_set(ei, EINA_FALSE);
+       printf("sel | item:%p, sel_it:%p, sel:%d\n",ei, gd->selected_item, gd->selected);
+       if(gd->selected && gd->selected_item == ei){
+               gd->selected = EINA_FALSE;
+           gd->selected_item = NULL;
+       }
+       else{
+               elm_object_item_signal_emit(ei, "elm,select,enabled", "");
+           gd->selected = EINA_TRUE;
+           gd->selected_item = ei;
+       }
+}
+
+static void
+_gengrid_unsel_mode(void *data, Evas_Object *obj, void *ei)
+{
+       grid_data *gd = data;
+       printf("unsel | item:%p, sel_it:%p, sel:%d\n",ei, gd->selected_item, gd->selected);
+       if(gd->selected_item)
+               elm_object_item_signal_emit(gd->selected_item, "elm,select,disabled", "");
+}
+
+static Evas_Object *
+_create_gengrid(void *data, Evas_Object *popup, int row, int col, void *gdata)
+{
+       Evas_Object *parent = (Evas_Object *)data;
+       Evas_Object *gengrid;
+       Elm_Gengrid_Item_Class *gic;
+       int i, j, n, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX];
+       grid_data *gd = gdata;
+
+       gengrid = elm_gengrid_add(parent);
+       elm_object_style_set(gengrid, "popup");
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_gengrid_align_set(gengrid, 0.5, 0.5);
+
+       double scale = elm_config_scale_get();
+       w = (int)((190 + (4 * 2)) * scale); // Gengrid item width (image area width + left/right padding) from Winset UX Guide
+       h = (int)((150 + (37 * 2)) * scale); // Gengrid item height (image area height + top/bottom padding) from Winset UX Guide
+
+       elm_gengrid_item_size_set(gengrid, w, h);
+       if (gd) {
+               gd->selected = EINA_FALSE;
+               gd->selected_item = NULL;
+               evas_object_smart_callback_add(gengrid, "selected", _gengrid_sel_mode, gd);
+               evas_object_smart_callback_add(gengrid, "unselected", _gengrid_unsel_mode, gd);
+       } else evas_object_smart_callback_add(gengrid, "selected", _gengrid_sel, popup);
+
+       gic = elm_gengrid_item_class_new();
+       gic->item_style = "default";
+       gic->func.text_get = grid_text_get;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       for (j = 0; j < row; j++) {
+               for (i = 0; i < col; i++) {
+                       n = i + (j * IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i + 1);
+                       ti[n].path = eina_stringshare_add(buf);
+
+                       ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected,
+                                       &(ti[i]));
+                       if (n % 4 == 0)
+                               ti[n].text = strdup("yyyjjjyyyABCDEFG");
+                       else if (n % 4 == 1)
+                               ti[n].text = strdup("ABCDEFGBiiijjjhhk");
+                       else if (n % 4 == 2)
+                               ti[n].text = strdup("LMNOPLKDKlkixjjjii");
+                       else
+                       ti[n].text = strdup("I have long name.jpg");
+               }
+       }
+       elm_gengrid_item_class_free(gic);
+
+       elm_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_OFF);
+       evas_object_show(gengrid);
+       return gengrid;
+}
+
+static void _back_text_popup_cb(void *data, Evas_Object *obj, void *event_info )
+{
+       if (rotation_cb) {
+               evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _text_rotation_changed);
+               rotation_cb = EINA_FALSE;
+       }
+}
+
+
+static void _popup_label_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *scroller;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *label;
+       int rotation;
+       char str[1000]= {'\0'};
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_text_popup_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       strcpy(str, "This popup has only text which can be set by two ways, "
+               "if text is small set is via description text. If text is more than a "
+               "limit,create a layout in popup, this layout will have a scroller which "
+               "minimum value will be decided by application from layout and then "
+               "label will have text.Add this label to scroller and scroller is added "
+               "to layout, then set layout as content of popup.This way to be used when "
+               " application has text will does not fit in screen and popup needs to "
+               " be restricted in size after a limit. ");
+
+       if (strlen(str) < 500) {
+               elm_object_text_set(popup, str);
+       }
+       else {
+               layout = elm_layout_add(popup);
+               rotation = elm_win_rotation_get(ad->win_main);
+               if (rotation == 90 || rotation == 270)
+                       elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout_landscape");
+               else
+                       elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout");
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+               label = elm_label_add(popup);
+               elm_object_style_set(label, "popup/default");
+               elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+               elm_object_text_set(label, str);
+               evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+               evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(label);
+
+               scroller = elm_scroller_add(layout);
+               elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+               elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+               evas_object_show(scroller);
+               elm_object_content_set(scroller, label);
+
+               elm_object_part_content_set(layout, "elm.swallow.content", scroller);
+
+               elm_object_content_set(popup, layout);
+               evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _text_rotation_changed, layout);
+               rotation_cb = EINA_TRUE;
+       }
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_info_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_text_popup_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, "This popup has only text which is set via desc set"
+                       " function, (This popup gets hidden when user "
+                       " clicks outside) here timeout of 3 sec is set.");
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       if (!elm_config_access_get())
+       {
+               elm_popup_timeout_set(popup, 3.0);
+               evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       }
+       else
+       {
+               evas_object_smart_callback_add(popup, "access,read,stop", _timeout_cb, NULL);
+       }
+       evas_object_show(popup);
+
+}
+
+static void _popup_center_title_info_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       elm_popup_timeout_set(popup, 3.0);
+       elm_object_text_set(popup,"This Popup has title area and description area "
+               "testing wrapping ABCDE-FGHIJ-KLMNO-PQRST-UVWXYZ (This popup gets "
+               "hidden when user clicks outside and has a timeout of 3 seconds)");
+       evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_2button_cb(void *data, Evas_Object *obj,
+       void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has two buttons OK and Cancel.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_3button_cb(void *data, Evas_Object *obj,
+       void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has two buttons OK, Cancel and Close.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_vertical_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_style_set(popup, "verticalbuttonstyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This popup has content area and two buttons,"
+               " aligned vertically.");
+       elm_layout_signal_emit(popup, "elm,state,2button", "elm");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_vertical_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_style_set(popup, "verticalbuttonstyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This popup has content area and three buttons,"
+               " aligned vertically.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad = (struct appdata *) data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has title area, content area and action"
+               " area set, action area has two buttons OK and Cancel.");
+       elm_object_part_text_set(popup, "title,text", "Title");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       struct appdata *ad = (struct appdata *) data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has one button OK.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_1_button_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global = NULL;
+}
+
+static void _popup_center_title_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *btn1;
+       struct appdata *ad = (struct appdata *) data;
+
+       elm_object_scroll_freeze_push(list);
+       if (popup_global) {
+               evas_object_show(popup_global);
+       } else {
+               popup_global = ea_center_popup_add(ad->nf);
+               evas_object_event_callback_add
+                    (popup_global, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+               ea_object_event_callback_add(popup_global, EA_CALLBACK_BACK,
+                               _popup_center_title_1_button_back_cb, NULL);
+
+               elm_object_part_text_set(popup_global, "title,text", "Title");
+               elm_object_text_set(popup_global, "This Popup has title area,"
+                       " content area and action area,"
+                       " action area has one button OK");
+               btn1 = elm_button_add(popup_global);
+               elm_object_style_set(btn1, "popup");
+               elm_object_text_set(btn1, "OK");
+               elm_object_part_content_set(popup_global, "button1", btn1);
+               evas_object_smart_callback_add(btn1, "clicked", _response_global_cb, popup_global);
+               evas_object_show(popup_global);
+       }
+}
+
+static Eina_Bool _fn_pb_timer(void *data)
+{
+       double value=0.0;
+       Evas_Object *progressbar = (Evas_Object*) data;
+
+       value = elm_progressbar_value_get(progressbar);
+       if (value == 1.0) {
+               _timeout_cb(NULL, popup_global_2, NULL);
+               pb_timer = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+       value = value + 0.01;
+       elm_progressbar_value_set(progressbar, value);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void _popup_center_processing_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *label;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "pop-up dialog box, a child window that blocks user interact to the parent");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_processingview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_object_style_set(progressbar, "process_large");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_content_set(layout, "elm.swallow.text", label);
+
+       elm_object_content_set(popup, layout);
+       elm_popup_timeout_set(popup, 3.0);
+       evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_processing_1button_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+}
+
+static void _popup_center_processing_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_processing_1button_back_cb, NULL);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_processingview_1button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_object_style_set(progressbar, "process_large");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_text_set(layout, "elm.text", "processing ");
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Cancel");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_progressbar_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+}
+
+static void _popup_center_progressbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_progressbar_back_cb, NULL);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_progressview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       pb_timer = ecore_timer_add(0.1, _fn_pb_timer, progressbar);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_text_set(layout, "elm.title", "Text Text");
+       elm_object_part_text_set(layout, "elm.text.left", "Text");
+       elm_object_part_text_set(layout, "elm.text.right", "TextTextTextText");
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Cancel");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_text_progressbar_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+}
+
+static void _popup_center_text_progressbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup,*progressbar;
+       struct appdata *ad;
+       Evas_Object *layout, *label;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_text_progressbar_back_cb, NULL);
+
+       label = elm_label_add(popup);
+       elm_object_style_set(label, "popup/progressview");
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Push the WPS button on your wireless access point");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_text_progressview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       pb_timer = ecore_timer_add(0.1, _fn_pb_timer, progressbar);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
+       elm_object_part_text_set(layout, "elm.text.subtext1", "Left-Text");
+       elm_object_part_text_set(layout, "elm.text.subtext2", "Right-Text");
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Cancel");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *label;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Use packet data must be enabled to access data service. change settings?");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_checkview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(popup);
+       elm_object_style_set(check, "multiline");
+       elm_object_text_set(check, "Don't ask again Don't ask again  Don't ask again  Don't ask again  Don't ask again  Don't ask again  ");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(check);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+       char * text = (char *)data;
+       return strdup(text);
+}
+
+static void _popup_center_check_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *label;
+       Evas_Object *icon;
+       struct appdata *ad;
+       char *text = NULL;
+       char buf[1024];
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_part_text_set(popup, "title,text", "Title");
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Use packet data must be enabled to access data service. change settings?");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       text = (char*)elm_object_text_get(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_checkview_image");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Don't ask again");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(check);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/wood_01.jpg", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_aspect_fixed_set(icon, EINA_FALSE);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.icon", icon);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_access_object_unregister(label);
+
+       Evas_Object * body = (Evas_Object*)edje_object_part_object_get(_EDJ(popup), "access.body");
+       Evas_Object *ao = elm_access_object_register(body, popup);
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, text);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static Evas_Object * item_provider(void *images, Evas_Object *en, const char *item)
+{
+       Evas_Object *obj = NULL;
+       char buf[1024];
+
+       if (!strcmp(item, "itemprovider"))
+       {
+               snprintf(buf, sizeof(buf), "%s/00_button_radio_press1.png", ICON_DIR);
+               obj = evas_object_image_filled_add(evas_object_evas_get(en));
+               evas_object_image_file_set(obj, buf, NULL);
+       }
+
+       return obj;
+}
+
+static void _text_rotation_changed(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout");
+}
+
+static void _on_rotation_changed(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1");
+}
+
+static void _popup_center_check_text_image_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+
+       if (rotcb_set) {
+               evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _on_rotation_changed);
+               rotcb_set = EINA_FALSE;
+       }
+}
+
+static void _popup_center_check_text_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *inner_layout;
+       Evas_Object *scroller;
+       Evas_Object *label1;
+       Evas_Object *label2;
+       Evas_Object *btn;
+       Evas_Object *icon;
+       struct appdata *ad;
+       char buf[1024];
+       int rotation;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_check_text_image_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Smart stay");
+
+       label1 = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(label1, EINA_TRUE);
+       elm_entry_editable_set(label1, EINA_FALSE);
+       elm_object_text_set(label1, "<align=left>Smart stay disables screen timeout if device detects that your face is watching the screen.</align>");
+       evas_object_size_hint_weight_set(label1, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label1);
+
+       label2 = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(label2, EINA_TRUE);
+       elm_entry_editable_set(label2, EINA_FALSE);
+       elm_entry_item_provider_append(label2, item_provider, NULL);
+       elm_object_text_set(label2, "<align=left>Smart stay may not work in these situations.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when front camera fails to detect face.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when using device in the dark.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when front camera is used for the application.</align>");
+       evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label2);
+
+       layout = elm_layout_add(popup);
+       rotation = elm_win_rotation_get(ad->win_main);
+       if (rotation == 90 || rotation == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       inner_layout = elm_layout_add(popup);
+       elm_layout_file_set(inner_layout, ELM_DEMO_EDJ, "popup_smartstay1_internal");
+       evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       scroller = elm_scroller_add(layout);
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+       elm_object_content_set(scroller, inner_layout);
+
+       icon = elm_image_add(inner_layout);
+       snprintf(buf, sizeof(buf), "%s/00_img_smart_stay.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_aspect_fixed_set(icon, EINA_FALSE);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+
+       elm_object_part_content_set(inner_layout, "elm.swallow.content1", label1);
+       elm_object_part_content_set(inner_layout, "elm.swallow.content3", label2);
+       elm_object_part_content_set(inner_layout, "elm.swallow.content2", icon);
+
+       elm_object_part_content_set(layout, "elm.swallow.layout", scroller);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Don't ask again");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_object_content_set(popup, layout);
+       btn = elm_button_add(popup);
+       elm_object_style_set(btn, "popup");
+       elm_object_text_set(btn, "OK");
+       elm_object_part_content_set(popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_changed, layout);
+       rotcb_set = EINA_TRUE;
+}
+
+static void _popup_center_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *icon;
+       char buf[4096];
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_style_set(popup, "content_expand");
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_image");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_video call.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", icon);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_entry_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *btn1;
+
+       ad = (struct appdata *) data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_entryview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       entry = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_object_text_set(entry, "This is a scrolled entry hence has a default size");
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_entry_password_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *entry2;
+       Evas_Object *entry3;
+       Evas_Object *entry4;
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "entrypasswordview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       entry = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_entry_password_set(entry, EINA_TRUE);
+       limit_filter_data.max_byte_count = 0;
+       limit_filter_data.max_char_count = 1;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_object_style_set(entry, "popup");
+       elm_object_part_content_set(layout, "elm.entry1", entry);
+
+       entry2 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry2, EINA_TRUE);
+       elm_entry_password_set(entry2, EINA_TRUE);
+       elm_entry_markup_filter_append(entry2, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_object_style_set(entry2, "popup");
+       elm_object_part_content_set(layout, "elm.entry2", entry2);
+
+       entry3 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry3, EINA_TRUE);
+       elm_entry_password_set(entry3, EINA_TRUE);
+       elm_entry_markup_filter_append(entry3, elm_entry_filter_limit_size,
+               &limit_filter_data);
+       elm_object_style_set(entry3, "popup");
+       elm_object_part_content_set(layout, "elm.entry3", entry3);
+
+       entry4 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry4, EINA_TRUE);
+       elm_entry_password_set(entry4, EINA_TRUE);
+       elm_entry_markup_filter_append(entry4, elm_entry_filter_limit_size,
+               &limit_filter_data);
+       elm_object_style_set(entry4, "popup");
+       elm_object_part_content_set(layout, "elm.entry4", entry4);
+
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       evas_object_smart_callback_add(entry, "changed", _test, entry2);
+       evas_object_smart_callback_add(entry2, "changed", _test, entry3);
+       evas_object_smart_callback_add(entry3, "changed", _test, entry4);
+       evas_object_smart_callback_add(entry4, "changed", _test, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_entry_password_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *check;
+       Evas_Object *button;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "entrypasswordview_2button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(popup, "title,text", "Enter password");
+
+       entry = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_object_style_set(entry, "editfield/password/popup");
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_password_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
+       elm_object_part_text_set(entry, "elm.guide", "editfield/password/popup");
+       evas_object_smart_callback_add(entry, "changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "preedit,changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "focused", _password_focused_cb, NULL);
+       evas_object_smart_callback_add(entry, "unfocused", _password_unfocused_cb, NULL);
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+       button = elm_button_add(layout);
+       elm_object_style_set(button, "search_clear");
+       elm_object_focus_allow_set(button, EINA_FALSE);
+       elm_object_part_content_set(entry, "elm.swallow.clear", button);
+       evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Show Password");
+       elm_object_focus_allow_set(check, EINA_FALSE);
+       evas_object_smart_callback_add(check, "changed", _password_check_cb, layout);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_object_content_set(popup, layout);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "OK");
+       elm_object_part_content_set(popup, "button1", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "Cancel");
+       elm_object_part_content_set(popup, "button2", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+}
+
+static void _popup_entry_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *check;
+       Evas_Object *button;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_signal_emit(popup, "elm,action,center_popup,entry", "");
+
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "entryview_2button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(popup, "title,text", "Enter password");
+
+       entry = ea_editfield_add(layout, EA_EDITFIELD_SEARCHBAR);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
+       elm_object_part_text_set(entry, "elm.guide", "editfield/popup");
+       evas_object_smart_callback_add(entry, "changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "preedit,changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "focused", _password_focused_cb, NULL);
+       evas_object_smart_callback_add(entry, "unfocused", _password_unfocused_cb, NULL);
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+       button = elm_button_add(layout);
+       elm_object_style_set(button, "search_clear");
+       elm_object_focus_allow_set(button, EINA_FALSE);
+       elm_object_part_content_set(entry, "elm.swallow.clear", button);
+       evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Show Password");
+       elm_object_focus_allow_set(check, EINA_FALSE);
+       evas_object_smart_callback_add(check, "changed", _password_check_cb, layout);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_object_content_set(popup, layout);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "OK");
+       elm_object_part_content_set(popup, "button1", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "Cancel");
+       elm_object_part_content_set(popup, "button2", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+}
+
+static void _volume_ver_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       double value;
+       Evas_Object *icon;
+       char buf[4096];
+       static double old_value = 10.0;
+
+       icon = elm_object_part_content_get(obj, "icon");
+       value = elm_slider_value_get(obj);
+
+       if (value < 1.0 && old_value >= 1.0) {
+               snprintf(buf, sizeof(buf), "%s/00_volume_icon_mute.png", ICON_DIR);
+               elm_image_file_set(icon, buf, NULL);
+       }
+       else if (value >= 1.0 && old_value < 1.0){
+               snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+               elm_image_file_set(icon, buf, NULL);
+       }
+       old_value = value;
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       del_timer = ecore_timer_add(3.0, _timer_cb, data);
+}
+
+static void _popup_volumepopup1_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       Evas_Object *setting_icon;
+       Evas_Object *ao;
+       Eina_List *l = NULL;
+       char buf[4096];
+       char buf1[4096];
+
+       popup = ea_center_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumebar");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(popup);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(popup);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       setting_icon = elm_image_add(layout);
+       snprintf(buf1, sizeof(buf1), "%s/00_volume_icon_settings.png", ICON_DIR);
+       elm_image_file_set(setting_icon, buf1, NULL);
+       elm_image_resizable_set(setting_icon, EINA_TRUE, EINA_TRUE);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", vbar);
+       elm_object_part_content_set(layout, "elm.swallow.icon", setting_icon);
+
+       ao = elm_access_object_register(setting_icon, layout);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "sound setting");
+
+       l = eina_list_append(l, vbar);
+       l = eina_list_append(l, ao);
+
+       elm_object_focus_custom_chain_set(layout, l);
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_volumepopup1_text_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *setting_icon;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       Evas_Object *layout1;
+       char buf[4096];
+       char buf1[4096];
+
+       popup = ea_center_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumebar_text");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout1 = elm_layout_add(popup);
+       elm_layout_file_set(layout1, ELM_DEMO_EDJ, "popup_volumebar");
+       evas_object_size_hint_weight_set(layout1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(layout1);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(layout1);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       setting_icon = elm_image_add(layout1);
+       snprintf(buf1, sizeof(buf1), "%s/00_volume_icon_settings.png", ICON_DIR);
+       elm_image_file_set(setting_icon, buf1, NULL);
+       elm_image_resizable_set(setting_icon, EINA_TRUE, EINA_TRUE);
+
+       elm_object_part_content_set(layout1, "elm.swallow.content", vbar);
+       elm_object_part_content_set(layout1, "elm.swallow.icon", setting_icon);
+       elm_object_part_content_set(layout, "elm.swallow.content1", layout1);
+       elm_object_part_text_set(layout, "elm.swallow.text", "High volumes may harm your hearing if you listen for a long time");
+
+       evas_object_show(layout1);
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(vbar, "changed", _volume_ver_change_cb,popup);
+       del_timer = ecore_timer_add(3.0, _timer_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_volumepopup_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+}
+
+static void _popup_volumepopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       char buf[4096];
+
+       popup = ea_center_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_volumepopup_back_cb, NULL);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumestyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(popup);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(popup);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", vbar);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(vbar, "changed", _volume_ver_change_cb,popup);
+       del_timer = ecore_timer_add(3.0, _timer_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has title area, content area and "
+                       "action area set, action area has three buttons OK, Cancel and "
+                       "Close.");
+       elm_object_part_text_set(popup, "title,text", "Title");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       int index = 0;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       if (item) {
+               index = (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n",Items[index]);
+       }
+       _list_item_click(popup, index);
+}
+
+static void _gl_radio_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       if (item) {
+               Item_Data *id = elm_object_item_data_get(item);
+               int index = id->index;
+               Evas_Object *radio = elm_object_item_part_content_get(item, "elm.icon");
+               state_index = index;
+               if (elm_radio_value_get(radio) == index) {
+                       elm_genlist_item_selected_set(item, EINA_FALSE);
+               }
+               elm_radio_value_set(radio, state_index);
+       }
+}
+
+static void
+_radio_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       evas_object_del(gen_popup);
+}
+
+static Evas_Object *
+_gl_radio_content_get(void *data, Evas_Object *obj, const char *part)
+{
+
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *radio;
+       Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
+
+       if (!strcmp(part, "elm.icon")) {
+               radio = elm_radio_add(obj);
+               elm_radio_group_add(radio, radio_main);
+               elm_radio_state_value_set(radio, index);
+               if (index == state_index) elm_radio_value_set(radio, state_index);
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_propagate_events_set(radio, EINA_FALSE);
+               elm_object_signal_callback_add(radio, "elm,action,show,finished", "elm",
+                               _radio_cb, NULL);
+               return radio;
+       }
+       return NULL;
+}
+
+static char *_gl_radio_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = (Item_Data *) data;
+
+       if (!strcmp(part, "elm.text.sub"))
+               return strdup(Sub_Items[id->index]);
+       else
+               return strdup(Items[id->index]);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data;
+
+       if (!strcmp(part, "elm.text.sub"))
+               return strdup(Sub_Items[index]);
+       else
+               return strdup(Items[index]);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       else {
+               return NULL;
+       }
+}
+
+static void _gl_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!event_info) return;
+       int index = (int) elm_object_item_data_get(event_info);
+
+       if (index == 7) {
+               elm_object_item_signal_emit(event_info, "elm,state,bottomline,hide", "");
+       }
+}
+
+static void _popup_center_liststyle_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *btn1;
+       Evas_Object *box;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       itc.item_style = "1text/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       genlist = elm_genlist_add(box);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+       elm_box_pack_end(box, genlist);
+       evas_object_show(genlist);
+       /* The height of popup being adjusted by application here based on app requirement */
+       evas_object_size_hint_min_set(box, 618, 436);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+       evas_object_show(popup);
+}
+
+static void _popup_center_liststyle_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *lst;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+
+       lst = elm_list_add(layout);
+       elm_object_style_set(lst, "popup");
+       evas_object_size_hint_weight_set(lst, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(lst, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(lst, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_list_item_append(lst, Items[index], NULL, NULL, _gl_sel, data);
+       }
+       elm_object_part_content_set(layout, "elm.swallow.content" , lst);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_1linetext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       itc.item_style = "1text/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+
+       Evas_Object *base = (Evas_Object*)edje_object_part_object_get(_EDJ(popup), "access.base");
+       elm_access_object_unregister(base);
+
+       evas_object_show(popup);
+}
+
+static void _popup_2linetext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       itc.item_style = "2text.2/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       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 (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Evas_Object *genlist, *radio_main;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+       gen_popup = ea_center_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (gen_popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(gen_popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(gen_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(gen_popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       genlist = elm_genlist_add(layout);
+       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);
+
+       radio_main = elm_radio_add(genlist);
+       elm_radio_state_value_set(radio_main, 0);
+       elm_radio_value_set(radio_main, 0);
+       evas_object_data_set(genlist, "radio_main", radio_main);
+
+       itc.item_style = "1text.1icon.3/popup";
+       itc.func.text_get = _gl_radio_text_get;
+       itc.func.content_get = _gl_radio_content_get;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       for (index = 0; index < 4; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index  = index;
+               Elm_Object_Item *item = elm_genlist_item_append(genlist, &itc, id, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_radio_sel, NULL);
+               id->item = item;
+               id->genlist = genlist;
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(gen_popup, layout);
+       evas_object_show(gen_popup);
+}
+
+static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf(" \n popup item selected: %s\n", elm_object_item_text_get(event_info));
+}
+
+static void _popup_itemlist_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       unsigned int index;
+       Elm_Object_Item *item;
+       char buf[4096];
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       for (index = 0; index < 7; index++) {
+               snprintf(buf, sizeof(buf), "Item%u", index+1);
+               item = elm_popup_item_append(popup, buf, NULL, _item_selected_cb, NULL);
+               if (index == 1)
+                       elm_object_item_disabled_set(item ,EINA_TRUE);
+               if (index == 6)
+                       elm_object_item_signal_emit(item, "elm,state,bottomline,hide", "");
+       }
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_liststyle_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+
+       itc.item_style = "1text.1icon.2/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       evas_object_smart_callback_add(genlist, "selected", _genlist_click, genlist);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_center_buttonstyle_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn;
+       Evas_Object *ic;
+       Evas_Object *btn1;
+       Evas_Object *layout;
+       char buf[4096];
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "nbpopup_3button_view");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_text_set(layout, "contact_label", "Text Text Text Text Text");
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, _("popup"));
+       elm_object_part_content_set(layout, "btn_default", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_call.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Call"));
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, _("popup"));
+       elm_object_part_content_set(layout, "btn_center", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_message.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Message"));
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, _("popup"));
+       elm_object_part_content_set(layout, "btn_text_only_style1", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_video call.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Video call"));
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_center_buttonstyle_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "nbpopup_2button_view");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_text_set(layout, "contact_label", "Text Text Text Text Text");
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       Evas_Object *btn = elm_button_add(layout);
+       elm_object_style_set(btn,"popup");
+       elm_object_part_content_set(layout, "btn_default", btn);
+       elm_object_text_set(btn, _("Call"));
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn,"popup");
+       elm_object_part_content_set(layout, "btn_center", btn);
+       elm_object_text_set(btn, _("Message"));
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_colorpalette_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r = 0, g = 0, b = 0 ,a = 0;
+       Colorplane_Data *cp = (Colorplane_Data *)data;
+       Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+       cp->sel_it = color_it;
+       elm_colorselector_palette_item_color_get(color_it, &r, &g, &b, &a);
+       elm_colorselector_color_set(cp->colorselector, r, g, b, a);
+}
+
+
+static void _popup_colorplane_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r, g, b, a;
+       Colorplane_Data *cp = (Colorplane_Data*)data;
+       if (!cp->changed) {
+               elm_object_item_signal_emit(cp->it_last, "elm,state,custom,hide", "");
+               cp->changed = EINA_TRUE;
+       }
+       elm_colorselector_color_get(cp->colorselector, &r, &g, &b, &a);
+       cp->r = r;
+       cp->g = g;
+       cp->b = b;
+       cp->a = a;
+       elm_colorselector_palette_item_color_set(cp->it_last, r, g, b, a);
+       if (cp->sel_it != cp->it_last)
+               elm_object_item_signal_emit(cp->it_last, "elm,state,selected", "elm");
+}
+
+static void _popup_colorpalette(Evas_Object *layout, Colorplane_Data *cp)
+{
+       /* add color palette widget */
+       Eina_List *color_list, *last_list;
+
+       cp->colorselector = elm_colorselector_add(layout);
+       elm_object_style_set(cp->colorselector, "colorplane");
+       elm_colorselector_mode_set(cp->colorselector, ELM_COLORSELECTOR_PALETTE_PLANE);
+       evas_object_size_hint_fill_set(cp->colorselector, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(cp->colorselector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "colorpalette", cp->colorselector);
+       evas_object_smart_callback_add(cp->colorselector, "color,item,selected", _popup_colorpalette_cb, cp);
+
+       color_list = elm_colorselector_palette_items_get(cp->colorselector);
+       last_list = eina_list_last(color_list);
+       cp->it_last = eina_list_data_get(last_list);
+       elm_object_item_signal_emit(cp->it_last, "elm,state,custom,show", "");
+       cp->changed = EINA_FALSE;
+       evas_object_smart_callback_add(cp->colorselector, "changed", _popup_colorplane_cb, cp);
+       cp->sel_it = eina_list_nth(color_list, 3);
+       elm_object_item_signal_emit(cp->sel_it, "elm,state,selected", "elm");
+}
+
+static Evas_Object *_popup_create_colorplane(Evas_Object *parent, Colorplane_Data *cp)
+{
+       cp->layout = elm_layout_add(parent);
+       elm_layout_file_set(cp->layout, ELM_DEMO_EDJ, "colorplane_popup");
+       evas_object_size_hint_weight_set(cp->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(cp->layout);
+       _popup_colorpalette(cp->layout, cp);
+       return cp->layout;
+}
+
+static void _popup_colorpicker_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content,*popup,*btn1,*btn2;
+       static Colorplane_Data cp;
+       if (data == NULL) return;
+       struct appdata *ad = data;
+       cp.ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       content = _popup_create_colorplane(popup, &cp);
+       elm_object_content_set(popup, content);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+}
+
+static void _back_rotate_gengrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       grid_data *gd = NULL;
+       if (data) gd = data;
+       if (gd) free(gd);
+       evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _on_rotation_gengrid_1line_change);
+       evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _on_rotation_gengrid_2line_change);
+       evas_object_smart_callback_del(elm_object_top_widget_get(obj), "rotation,changed", _on_rotation_gengrid_3line_change);
+       evas_object_del(obj);
+}
+
+static void _on_rotation_gengrid_1line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+}
+
+static void _popup_gengrid_1line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 1, 3, NULL);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_gengrid_1line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_gengrid_1line_select_mode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+       grid_data *gd;
+    gd = calloc(1, sizeof(grid_data));
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, gd);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 1, 3, gd);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_gengrid_1line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+static void _on_rotation_gengrid_2line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_2line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_2line");
+}
+
+static void _popup_gengrid_2line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_2line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_2line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 2, 3, NULL);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_gengrid_2line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _on_rotation_gengrid_3line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+}
+
+static void _popup_gengrid_3line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 3, 3, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_gengrid_3line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_gengrid_3line_scroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+
+       popup = ea_center_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 6, 3, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(elm_object_top_widget_get(popup), "rotation,changed", _on_rotation_gengrid_3line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+void center_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it;
+       struct appdata *ad = data;
+       if (ad == NULL) return;
+
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+       it = elm_naviframe_item_push(ad->nf, _("Popup"), NULL, NULL, list, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+       elm_list_item_append(list, "popup- text", NULL, NULL,
+                       _popup_center_info_cb, ad);
+       elm_list_item_append(list, "popup- text+1 button", NULL, NULL,
+                       _popup_center_basic_1button_cb, ad);
+       elm_list_item_append(list, "popup- text+2 buttons", NULL, NULL,
+                       _popup_center_basic_2button_cb, ad);
+       elm_list_item_append(list, "popup- text+3 buttons", NULL, NULL,
+                       _popup_center_basic_3button_cb, ad);
+       elm_list_item_append(list, "popup- title+text", NULL, NULL,
+                       _popup_center_title_info_cb, ad);
+       elm_list_item_append(list, "popup- title+text+1 button", NULL, NULL,
+                       _popup_center_title_1button_cb, ad);
+       elm_list_item_append(list, "popup- title+text+2 buttons", NULL, NULL,
+                       _popup_center_title_2button_cb, ad);
+       elm_list_item_append(list, "popup- title+text+3 buttons", NULL, NULL,
+                       _popup_center_title_3button_cb, ad);
+       elm_list_item_append(list, "popup- text+2 vertical buttons", NULL, NULL,
+                       _popup_center_vertical_2button_cb, ad);
+       elm_list_item_append(list, "popup- text+3 vertical buttons", NULL, NULL,
+                       _popup_center_vertical_3button_cb, ad);
+       elm_list_item_append(list, "popup- text+check", NULL, NULL,
+                       _popup_center_check_cb, ad);
+       elm_list_item_append(list, "popup- text+check+image", NULL, NULL,
+                       _popup_center_check_image_cb, ad);
+       elm_list_item_append(list, "popup- text+image+text+check", NULL, NULL,
+                       _popup_center_check_text_image_cb, ad);
+       elm_list_item_append(list, "popup- big-icon", NULL, NULL,
+                       _popup_center_image_cb, ad);
+       elm_list_item_append(list, "popup-list -1btn", NULL, NULL,
+                       _popup_center_liststyle_1button_cb, ad);
+       elm_list_item_append(list, "popup-list -2btns", NULL, NULL,
+                       _popup_center_liststyle_2button_cb, ad);
+       elm_list_item_append(list, "popup-list -3btns", NULL, NULL,
+                       _popup_center_liststyle_3button_cb, ad);
+       elm_list_item_append(list, "popup-buttonstyle-3btns", NULL, NULL,
+                       _popup_center_buttonstyle_3button_cb, ad);
+       elm_list_item_append(list, "popup-buttonstyle-2btns", NULL, NULL,
+                       _popup_center_buttonstyle_2button_cb, ad);
+       elm_list_item_append(list, "popup-volumebar", NULL, NULL,
+                       _popup_volumepopup_cb, ad);
+       elm_list_item_append(list, "popup-volumebar1", NULL, NULL,
+                               _popup_volumepopup1_cb, ad);
+       elm_list_item_append(list, "popup-volumebar1_text", NULL, NULL,
+                       _popup_volumepopup1_text_cb, ad);
+       elm_list_item_append(list, "popup-center-progressbar", NULL, NULL,
+                       _popup_center_progressbar_cb, ad);
+       elm_list_item_append(list, "popup-center-processing", NULL, NULL,
+                       _popup_center_processing_cb, ad);
+       elm_list_item_append(list, "popup-center-processing_1button", NULL, NULL,
+                       _popup_center_processing_1button_cb, ad);
+       elm_list_item_append(list, "popup-entry", NULL, NULL,
+                       _popup_entry_cb, ad);
+       elm_list_item_append(list, "popup-entry-password", NULL, NULL,
+                       _popup_entry_password_cb, ad);
+       elm_list_item_append(list, "popup-entry-password-2-button", NULL, NULL,
+                       _popup_entry_password_2button_cb, ad);
+       elm_list_item_append(list, "popup-entry-2-button", NULL, NULL,
+                       _popup_entry_2button_cb, ad);
+       elm_list_item_append(list, "popup-center_text-progressbar", NULL, NULL,
+                       _popup_center_text_progressbar_cb, ad);
+       elm_list_item_append(list, "popup-1 line", NULL, NULL,
+                       _popup_1linetext_cb, ad);
+       elm_list_item_append(list, "popup-2 line", NULL, NULL,
+                       _popup_2linetext_cb, ad);
+       elm_list_item_append(list, "popup-radio", NULL, NULL,
+                       _popup_radio_cb, ad);
+       elm_list_item_append(list, "popup-item list", NULL, NULL,
+                       _popup_itemlist_cb, ad);
+       elm_list_item_append(list, "popup-color picker", NULL, NULL,
+                       _popup_colorpicker_cb, ad);
+       elm_list_item_append(list, "popup-item 1line grid", NULL, NULL,
+                       _popup_gengrid_1line_cb, ad);
+       elm_list_item_append(list, "popup-item 2line grid", NULL, NULL,
+                       _popup_gengrid_2line_cb, ad);
+       elm_list_item_append(list, "popup-item 3line grid", NULL, NULL,
+                       _popup_gengrid_3line_cb, ad);
+       elm_list_item_append(list, "popup-item 3line scroll grid", NULL, NULL,
+                       _popup_gengrid_3line_scroll_cb, ad);
+       elm_list_item_append(list, "popup-item 1line grid select mode", NULL, NULL,
+                       _popup_gengrid_1line_select_mode_cb, ad);
+       elm_list_item_append(list, "popup- label+scroller", NULL, NULL,
+                       _popup_label_cb, ad);
+       elm_list_go(list);
+}
diff --git a/live.viewer/dbox.app/src/check.c b/live.viewer/dbox.app/src/check.c
new file mode 100644 (file)
index 0000000..0234ffc
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "check.h"
+
+/*********************************************************
+ check
+ ********************************************************/
+static Evas_Object *_create_scroller(Evas_Object *parent);
+static Evas_Object *_create_checks(Evas_Object *parent);
+static Evas_Object *_create_extended_style_checks(Evas_Object *parent);
+static void _style_check_cb(void *data, Evas_Object * obj, void *event_info);
+static void _extended_style_check_cb(void *data, Evas_Object * obj, void *event_info);
+
+
+static struct _menu_item _menu_its[] = {
+       {"Normal Styles", _style_check_cb},
+       {"Extended Styles", _extended_style_check_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _go_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int param = (int)(long)(data);
+
+       Eina_Bool state = elm_check_state_get(obj);
+
+       printf("Check %d:%d\n", param, state);
+}
+
+static Evas_Object *_create_extended_style_checks(Evas_Object *parent)
+{
+       Evas_Object *check;
+
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/check-extended");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_TRUE);
+       elm_object_part_content_set(layout, "check1", check);
+       elm_object_style_set(check, "default/extended");
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)1);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_FALSE);
+       elm_object_part_content_set(layout, "check2", check);
+       elm_object_style_set(check, "favorite/extended");
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)2);
+
+       return layout;
+}
+
+static Evas_Object *_create_checks(Evas_Object *parent)
+{
+       Evas_Object *check;
+
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/check");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_TRUE);
+       elm_object_part_content_set(layout, "check1", check);
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)1);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_FALSE);
+       elm_object_part_content_set(layout, "check2", check);
+       elm_object_style_set(check, "favorite");
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)2);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_FALSE);
+       elm_object_part_content_set(layout, "check3", check);
+       elm_object_style_set(check, "on&off");
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)3);
+
+       check = elm_check_add(layout);
+       elm_check_state_set(check, EINA_TRUE);
+       elm_object_part_content_set(layout, "check4", check);
+       elm_object_style_set(check, "favorite_small");
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, (void *)4);
+
+       return layout;
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void _extended_style_check_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Extended Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_extended_style_checks(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+
+
+static void _style_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Normal styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_checks(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+void check_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Check"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/colorclass.c b/live.viewer/dbox.app/src/colorclass.c
new file mode 100644 (file)
index 0000000..a69f7af
--- /dev/null
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "colorclass.h"
+
+struct ccdata {
+       struct appdata *ad;
+       char *name;
+       Evas_Object *rect;
+       Evas_Object *box;
+       int r, g, b, a;
+};
+
+static void _button_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       struct ccdata *cd = (struct ccdata *)data;
+
+       elm_config_color_overlay_set(cd->name, cd->r, cd->g, cd->b, cd->a, 0, 0, 0, 0, 0, 0, 0, 0);
+       elm_config_color_overlay_apply();
+       elm_config_all_flush();
+       elm_config_save();
+
+       elm_naviframe_item_pop(cd->ad->nf);
+       free(cd->name);
+       free(cd);
+}
+
+static void _slider_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       struct ccdata *cd = (struct ccdata *)data;
+       char *color = evas_object_data_get(obj, "color");
+       Evas_Object *lb = evas_object_data_get(obj, "label");
+       char buf[256] = {0,};
+       int value;
+
+       value = (int)elm_slider_value_get(obj);
+       if (!strcmp(color, "red"))
+       {
+               cd->r = value;
+               sprintf(buf, "<color=#FF0000> R: %d</color>", value);
+       }
+       else if (!strcmp(color, "green"))
+       {
+               cd->g = value;
+               sprintf(buf, "<color=#00FF00> G: %d</color>", value);
+       }
+       else if (!strcmp(color, "blue"))
+       {
+               cd->b = value;
+               sprintf(buf, "<color=#0000FF> B: %d</color>", value);
+       }
+       else if (!strcmp(color, "alpha"))
+       {
+               cd->a = value;
+               sprintf(buf, "<color=#FFFFFF> A: %d</color>", value);
+       }
+       elm_object_text_set(lb, buf);
+       evas_object_color_set(cd->rect, cd->r, cd->g, cd->b, cd->a);
+}
+
+void _color_class_changed(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       int r, g, b, a;
+       edje_color_class_get(source, &r, &g, &b, &a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+       printf("[%s][%d] name: %s, color: %d, %d, %d, %d\n", __FUNCTION__, __LINE__, source, r, g, b, a);
+}
+
+static void _create_color_slider(struct ccdata *cd, const char *color)
+{
+       Evas_Object *sl, *lb;
+       char buf[256] = {0,};
+
+       if (!strcmp(color, "red"))
+               sprintf(buf, "<color=#FF0000> R: %d</color>", cd->r);
+       else if (!strcmp(color, "green"))
+               sprintf(buf, "<color=#00FF00> G: %d</color>", cd->g);
+       else if (!strcmp(color, "blue"))
+               sprintf(buf, "<color=#0000FF> B: %d</color>", cd->b);
+       else if (!strcmp(color, "alpha"))
+               sprintf(buf, "<color=#FFFFFF> A: %d</color>", cd->a);
+
+       lb = elm_label_add(cd->box);
+       elm_object_text_set(lb, buf);
+       evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(cd->box, lb);
+       evas_object_show(lb);
+
+       sl = elm_slider_add(cd->box);
+       elm_slider_indicator_show_set(sl, EINA_FALSE);
+       evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+       evas_object_data_set(sl, "color", color);
+       evas_object_data_set(sl, "label", lb);
+       elm_slider_min_max_set(sl, 0, 255);
+       evas_object_smart_callback_add(sl, "changed", _slider_changed, cd);
+       elm_box_pack_end(cd->box, sl);
+       evas_object_show(sl);
+
+       if (!strcmp(color, "red"))
+               elm_slider_value_set(sl, cd->r);
+       else if (!strcmp(color, "green"))
+               elm_slider_value_set(sl, cd->g);
+       else if (!strcmp(color, "blue"))
+               elm_slider_value_set(sl, cd->b);
+       else if (!strcmp(color, "alpha"))
+               elm_slider_value_set(sl, cd->a);
+}
+
+static Evas_Object *_create_sliders(struct ccdata *cd)
+{
+       Evas_Object *box, *sc, *lb, *rect;
+
+       sc = elm_scroller_add(cd->ad->nf);
+       elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(sc);
+
+       box = elm_box_add(sc);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_content_set(sc, box);
+       evas_object_show(box);
+       cd->box = box;
+
+       lb = elm_label_add(box);
+       elm_object_text_set(lb, " Current Color");
+       evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, lb);
+       evas_object_show(lb);
+
+       // set an edje signal and get the current color using elm_layout object 
+       elm_layout_signal_callback_add(lb, "color_class,set", "", _color_class_changed, NULL);
+       edje_object_color_class_get(elm_layout_edje_get(lb), cd->name,
+                       &cd->r, &cd->g, &cd->b, &cd->a, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+
+       rect = evas_object_rectangle_add(evas_object_evas_get(box));
+       evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_min_set(rect, 0, 150);
+       evas_object_color_set(rect, cd->r, cd->g, cd->b, cd->a);
+       elm_box_pack_end(box, rect);
+       evas_object_show(rect);
+       cd->rect = rect;
+
+       _create_color_slider(cd, "red");
+       _create_color_slider(cd, "green");
+       _create_color_slider(cd, "blue");
+       _create_color_slider(cd, "alpha");
+
+       return sc;
+}
+
+static void _item_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+        Elm_Object_Item *navi_it;
+       struct appdata *ad = (struct appdata *)data;
+       struct ccdata *cd = NULL;
+       Evas_Object *ly, *tb;
+       char *text;
+
+       if (ad == NULL) return;
+
+       cd = calloc(1, sizeof(struct ccdata));
+       if (!cd) return;
+
+       text = strdup(elm_object_item_text_get(it));
+       if (!text)
+       {
+               free(cd);
+               return;
+       }
+
+       cd->ad = ad;
+       cd->name = strdup(strtok(text, " :"));
+
+       ly = _create_sliders(cd);
+       navi_it = elm_naviframe_item_push(ad->nf, cd->name, NULL, NULL, ly, NULL);
+
+       tb = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(tb, EINA_TRUE);
+       elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(tb, NULL, "Set", _button_clicked, cd);
+       elm_object_item_part_content_set(navi_it, "toolbar", tb);
+
+       free(text);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+       Eina_List *cl, *l;
+       Elm_Color_Class *cc;
+       char buf[128];
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       cl = elm_config_color_classes_list_get();
+       EINA_LIST_FOREACH(cl, l, cc)
+       {
+               snprintf(buf, 128, "%s : %s", cc->name, cc->desc);
+               elm_list_item_append(li, buf, NULL, NULL,
+                               _item_clicked, ad);
+       }
+       elm_config_color_classes_list_free(cl);
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void colorclass_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Color Class"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/colorselector.c b/live.viewer/dbox.app/src/colorselector.c
new file mode 100644 (file)
index 0000000..15be37e
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "colorselector.h"
+
+/*********************************************************
+ ColorSelector
+ ********************************************************/
+
+static struct _menu_item menu_its[] = {
+       { "Colorselector Palette", colorselector_palette_cb },
+       { "Colorselector Components", colorselector_components_cb },
+       { "Colorselector Plane", colorselector_plane_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if(ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while (menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+
+void colorselector_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("ColorSelector"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/colorselector_components.c b/live.viewer/dbox.app/src/colorselector_components.c
new file mode 100644 (file)
index 0000000..ef48d03
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "colorselector.h"
+
+/*********************************************************
+       colorselector - components
+ ********************************************************/
+
+static void _colorselector_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r, g, b, a;
+       Evas_Object* rect = (Evas_Object*)data;
+       elm_colorselector_color_get(obj, &r, &g, &b, &a);
+       evas_object_color_set(rect, r, g, b, a);
+}
+
+static Evas_Object *_create_colorselector(Evas_Object* parent)
+{
+       Evas_Object *layout, *rect, *colorselector, *layoutp;
+       layoutp = elm_layout_add(parent);
+       elm_layout_theme_set(layoutp, "layout", "dialogue", "1icon/no_padding");
+       evas_object_size_hint_weight_set(layoutp, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layoutp, EVAS_HINT_FILL, 0.0);
+       evas_object_show(layoutp);
+
+       // make base layout
+       layout = elm_layout_add(layoutp);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "colorselector");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+       elm_object_part_content_set(layoutp, "elm.icon", layout);
+
+
+       rect = elm_layout_add(layoutp);
+       elm_layout_file_set(rect, ELM_DEMO_EDJ, "item/colorpalette");
+       evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_content_set(layout, "rect", rect);
+       evas_object_color_set(rect, 231, 28, 28, 255);
+
+       // add a color picker widget
+       colorselector = elm_colorselector_add(parent);
+       elm_colorselector_mode_set(colorselector, ELM_COLORSELECTOR_COMPONENTS);
+       elm_colorselector_color_set(colorselector, 255, 255, 0, 255);
+       evas_object_size_hint_fill_set(colorselector, EVAS_HINT_FILL, 0);
+       evas_object_size_hint_weight_set(colorselector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "colorselector", colorselector);
+       evas_object_smart_callback_add(colorselector, "changed", _colorselector_cb, rect);
+
+       return layoutp;
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void colorselector_components_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout, *scroller;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Colorselector components"), NULL, NULL, scroller, NULL);
+       layout = _create_colorselector(ad->nf);
+       elm_object_content_set(scroller, layout);
+}
diff --git a/live.viewer/dbox.app/src/colorselector_palette.c b/live.viewer/dbox.app/src/colorselector_palette.c
new file mode 100644 (file)
index 0000000..49872ef
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "colorselector.h"
+
+/*********************************************************
+       colorselector - palette
+ ********************************************************/
+
+struct appdata *gad = NULL;
+typedef struct _Colorpalette_Data Colorpalette_Data;
+struct _Colorpalette_Data
+{
+       Evas_Object *layout;
+       Evas_Object *rect;
+       Evas_Object *colorpalette;
+};
+static void _rotate_colorpalette_cb(void *data, Evas_Object *obj, void *event_info );
+
+static void _colorpalette_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r = 0, g = 0, b = 0 ,a = 0;
+       Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+       elm_colorselector_palette_item_color_get(color_it, &r, &g, &b, &a);
+       evas_object_color_set((Evas_Object *) data, r, g, b , a);
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       evas_object_smart_callback_del(data, "rotation,changed", _rotate_colorpalette_cb);
+       return EINA_TRUE;
+}
+
+static void _colorpalette(Evas_Object *layout, Colorpalette_Data *cp)
+{
+       /* add color palette widget */
+       int rotation;
+       cp->colorpalette = elm_colorselector_add(layout);
+       elm_colorselector_palette_name_set(cp->colorpalette, "painting");
+       elm_colorselector_mode_set(cp->colorpalette, ELM_COLORSELECTOR_PALETTE);
+       evas_object_size_hint_fill_set(cp->colorpalette, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(cp->colorpalette, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "colorpalette", cp->colorpalette);
+       evas_object_smart_callback_add(cp->colorpalette, "color,item,selected", _colorpalette_cb, cp->rect);
+       rotation = elm_win_rotation_get(gad->win_main);
+       if (abs(rotation) == 90 || rotation == 270) {
+               elm_object_style_set(cp->colorpalette, "landscape");
+               elm_object_signal_emit(layout, "landscape", "");
+       }
+       else
+               elm_object_signal_emit(layout, "portrait", "");
+       //Needs to be called as recent changes in layout causes signals not to be processed immediately
+       edje_object_message_signal_process(elm_layout_edje_get(layout));
+       elm_colorselector_palette_color_add(cp->colorpalette, 231, 28, 28, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 215, 182, 30, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 171, 176, 41, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 53, 164, 72, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 73, 165, 157, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 34, 129, 157, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 37, 58, 119, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 128, 58, 177, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 194, 81, 182, 255);
+       elm_colorselector_palette_color_add(cp->colorpalette, 189, 21, 92, 255);
+}
+
+static void _rotate_colorpalette_cb(void *data, Evas_Object *obj, void *event_info )
+{
+       Colorpalette_Data *cp = (Colorpalette_Data*)data;
+       evas_object_del(cp->colorpalette);
+       _colorpalette(cp->layout, cp);
+}
+
+static Evas_Object *_create_colorpalette(Evas_Object *scroller)
+{
+       static Colorpalette_Data cp;
+
+       Evas_Object *box = elm_box_add(scroller);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0);
+       evas_object_show(box);
+
+       Evas_Object *layout = elm_layout_add(box);
+       elm_layout_theme_set(layout, "layout", "dialogue", "1icon/no_padding");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
+       elm_object_signal_emit(layout, "elm,state,top", "");
+       elm_box_pack_end(box, layout);
+       evas_object_show(layout);
+
+       /* make base layout for a rectangle and a colorpalette */
+       cp.layout = elm_layout_add(layout);
+       elm_layout_file_set(cp.layout, ELM_DEMO_EDJ, "colorpalette/rect");
+       evas_object_size_hint_weight_set(cp.layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(cp.layout);
+       elm_object_part_content_set(layout, "elm.icon", cp.layout);
+
+       /* add color rectangle */
+       cp.rect = elm_layout_add(box);
+       elm_layout_file_set(cp.rect, ELM_DEMO_EDJ, "item/colorpalette");
+       evas_object_size_hint_weight_set(cp.rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp.rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_content_set(cp.layout, "rect", cp.rect);
+       evas_object_color_set(cp.rect, 231, 28, 28, 255);
+
+
+       Evas_Object *layout1 = elm_layout_add(box);
+       elm_layout_theme_set(layout1, "layout", "dialogue", "1icon/no_padding");
+       evas_object_size_hint_weight_set(layout1, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout1, EVAS_HINT_FILL, 0.0);
+       elm_box_pack_end(box, layout1);
+       elm_object_signal_emit(layout1, "elm,state,bottom", "");
+       evas_object_show(layout1);
+
+       /* make base layout for a rectangle and a colorpalette */
+       cp.layout = elm_layout_add(layout1);
+       elm_layout_file_set(cp.layout, ELM_DEMO_EDJ, "colorpalette");
+       evas_object_size_hint_weight_set(cp.layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp.layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(cp.layout);
+       elm_object_part_content_set(layout1, "elm.icon", cp.layout);
+
+       _colorpalette(cp.layout, &cp);
+       evas_object_smart_callback_add(gad->win_main, "rotation,changed", _rotate_colorpalette_cb, &cp);
+
+       return box;
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_object_style_set(scroller, "dialogue");
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void colorselector_palette_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *box, *scroller;
+       Elm_Object_Item *it;
+       struct appdata *ad = (struct appdata *) data;
+       if(ad == NULL) return;
+       gad = ad;
+       scroller = _create_scroller(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Colorselector palette"), NULL, NULL, scroller, NULL);
+       box = _create_colorpalette(scroller);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, ad->win_main);
+       elm_object_content_set(scroller, box);
+}
diff --git a/live.viewer/dbox.app/src/colorselector_plane.c b/live.viewer/dbox.app/src/colorselector_plane.c
new file mode 100644 (file)
index 0000000..fa0fcd7
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "colorselector.h"
+
+
+/*********************************************************
+       colorselector - plane
+ ********************************************************/
+
+typedef struct _Colorplane_Data Colorplane_Data;
+struct _Colorplane_Data
+{
+       Evas_Object *layout;
+       Evas_Object *rect;
+       Evas_Object *colorselector;
+       Elm_Object_Item *it_last;
+       Elm_Object_Item *sel_it;
+       struct appdata *ad;
+       Eina_Bool changed;
+       int r, g, b, a;
+};
+
+static void _colorpalette_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r = 0, g = 0, b = 0 ,a = 0;
+       Colorplane_Data *cp = (Colorplane_Data *)data;
+       Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+       cp->sel_it = color_it;
+       elm_colorselector_palette_item_color_get(color_it, &r, &g, &b, &a);
+       evas_object_color_set(cp->rect, r, g, b , a);
+       elm_colorselector_color_set(cp->colorselector, r, g, b, a);
+}
+
+static void _colorplane_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r, g, b, a;
+       Colorplane_Data *cp = (Colorplane_Data*)data;
+       Evas_Object* rect = cp->rect;
+       if (!cp->changed) {
+               elm_object_item_signal_emit(cp->it_last, "elm,state,custom,hide", "");
+               cp->changed = EINA_TRUE;
+       }
+       elm_colorselector_color_get(cp->colorselector, &r, &g, &b, &a);
+       cp->r = r;
+       cp->g = g;
+       cp->b = b;
+       cp->a = a;
+       evas_object_color_set(rect, r, g, b, a);
+       elm_colorselector_palette_item_color_set(cp->it_last, r, g, b, a);
+       if (cp->sel_it != cp->it_last)
+               elm_object_item_signal_emit(cp->it_last, "elm,state,selected", "elm");
+}
+
+static void _colorpalette(Evas_Object *layout, Colorplane_Data *cp)
+{
+       /* add color palette widget */
+       Eina_List *color_list, *last_list;
+
+       cp->colorselector = elm_colorselector_add(layout);
+       elm_object_style_set(cp->colorselector, "colorplane");
+       elm_colorselector_mode_set(cp->colorselector, ELM_COLORSELECTOR_PALETTE_PLANE);
+       evas_object_size_hint_fill_set(cp->colorselector, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(cp->colorselector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "colorpalette", cp->colorselector);
+       evas_object_smart_callback_add(cp->colorselector, "color,item,selected", _colorpalette_cb, cp);
+       color_list = elm_colorselector_palette_items_get(cp->colorselector);
+       last_list = eina_list_last(color_list);
+       cp->it_last = eina_list_data_get(last_list);
+       elm_object_item_signal_emit(cp->it_last, "elm,state,custom,show", "");
+       cp->changed = EINA_FALSE;
+       evas_object_smart_callback_add(cp->colorselector, "changed", _colorplane_cb, cp);
+       cp->sel_it = eina_list_nth(color_list, 3);
+       elm_object_item_signal_emit(cp->sel_it, "elm,state,selected", "elm");
+}
+
+static Evas_Object *_create_colorplane(Evas_Object *scroller, Colorplane_Data *cp)
+{
+       Evas_Object *box = elm_box_add(scroller);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0);
+       evas_object_show(box);
+
+       Evas_Object *layout = elm_layout_add(box);
+       elm_layout_theme_set(layout, "layout", "dialogue", "1icon");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, 0.0);
+       elm_object_signal_emit(layout, "elm,state,top", "");
+       elm_box_pack_end(box, layout);
+       evas_object_show(layout);
+
+       /* make base layout for a rectangle*/
+       Evas_Object *layout1 = elm_layout_add(layout);
+       elm_layout_file_set(layout1, ELM_DEMO_EDJ, "colorplane/rect");
+       evas_object_size_hint_weight_set(layout1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(layout1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(layout1);
+       elm_object_part_content_set(layout, "elm.icon", layout1);
+
+       /* add color rectangle */
+       cp->rect = elm_layout_add(box);
+       elm_layout_file_set(cp->rect, ELM_DEMO_EDJ, "item/colorpalette");
+       evas_object_size_hint_weight_set(cp->rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp->rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_content_set(layout1, "rect", cp->rect);
+
+       Evas_Object *layout2 = elm_layout_add(box);
+       elm_layout_theme_set(layout2, "layout", "dialogue", "1icon");
+       evas_object_size_hint_weight_set(layout2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout2, EVAS_HINT_FILL, 0.0);
+       elm_box_pack_end(box, layout2);
+       elm_object_signal_emit(layout2, "elm,state,bottom", "");
+       evas_object_show(layout2);
+
+       /* make base layout for a colorpalette and colorplane*/
+       cp->layout = elm_layout_add(layout2);
+       elm_layout_file_set(cp->layout, ELM_DEMO_EDJ, "colorplane");
+       evas_object_size_hint_weight_set(cp->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(cp->layout);
+       elm_object_part_content_set(layout2, "elm.icon", cp->layout);
+
+       _colorpalette(cp->layout, cp);
+       evas_object_color_set(cp->rect, 255, 59, 91, 255);
+
+       return box;
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_object_style_set(scroller, "dialogue");
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void colorselector_plane_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *box, *scroller;
+       static Colorplane_Data cp;
+
+       if (data == NULL) return;
+       cp.ad = (struct appdata *) data;
+       scroller = _create_scroller(cp.ad->nf);
+       elm_naviframe_item_push(cp.ad->nf, _("Colorselector plane"), NULL, NULL, scroller, NULL);
+       box = _create_colorplane(scroller, &cp);
+       elm_object_content_set(scroller, box);
+}
diff --git a/live.viewer/dbox.app/src/config.c b/live.viewer/dbox.app/src/config.c
new file mode 100644 (file)
index 0000000..bc6bc31
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "config.h"
+#include "config_scrolling.h"
+#include "config_abort.h"
+#include "config_mirror.h"
+
+/*********************************************************
+  config
+ ********************************************************/
+static struct _menu_item _menu_its[] = {
+       //{ "Theme", NULL},
+       //{ "Fonts", NULL},
+       { "Scrolling", config_scrolling_cb},
+       { "Abort on errors", config_abort_cb},
+       { "UI mirroring", config_mirror_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+
+void config_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Config"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/config_abort.c b/live.viewer/dbox.app/src/config_abort.c
new file mode 100644 (file)
index 0000000..4a2c638
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "config_abort.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/reboot.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <errno.h>
+
+#define SCRIPT_NAME "/etc/profile.d/efl_abort.sh"
+#define SCRIPT_CONTENT                 \
+       "export ECORE_ERROR_ABORT=1\n"  \
+       "export EINA_LOG_ABORT=1\n"     \
+       "export ELM_ERROR_ABORT=1\n"    \
+       "export EVAS_DEBUG_ABORT=1\n"
+
+static Eina_Bool
+update_script(Eina_Bool enable)
+{
+       FILE *fd = NULL;
+       int ret;
+
+       ret = mount(NULL, "/", NULL, MS_MGC_VAL|MS_REMOUNT, NULL);
+       if (ret < 0) {
+               fprintf(stderr, "fail to update booting mode (%d)", errno);
+               return EINA_FALSE;
+       }
+
+       if (!enable) {
+               ret = access(SCRIPT_NAME, F_OK);
+               if (ret < 0)
+                       return EINA_TRUE;
+
+               ret = remove(SCRIPT_NAME);
+               if (ret < 0) {
+                       fprintf(stderr, "fail to remove script file (%d)\n", errno);
+                       return EINA_FALSE;
+               }
+               return EINA_TRUE;
+       }
+
+       fd = fopen(SCRIPT_NAME, "w");
+       if (!fd) return EINA_FALSE;
+
+       if (fwrite(SCRIPT_CONTENT, strlen(SCRIPT_CONTENT), 1, fd) != 1) {
+               fprintf(stderr, "fail to write file (%d)\n", errno);
+               fclose(fd);
+               return EINA_FALSE;
+       }
+
+       fflush(fd);
+       fclose(fd);
+
+       chmod(SCRIPT_NAME, ACCESSPERMS);
+
+       return EINA_TRUE;
+}
+
+static void
+_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       sync();
+
+       reboot(RB_AUTOBOOT);
+
+       evas_object_del(data);
+}
+
+static void
+show_popup(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *popup;
+       Evas_Object *btn;
+
+       popup = elm_popup_add(ad->nf);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, "Target will be rebooted to take an effect");
+       elm_object_part_text_set(popup, "title, text", "Title");
+
+       btn = elm_button_add(popup);
+       elm_object_text_set(btn, "OK");
+       elm_object_part_content_set(popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void
+_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Eina_Bool enabled = elm_check_state_get(obj);
+
+       if (!update_script(enabled)) {
+               elm_check_state_set(obj, !enabled);
+               return;
+       }
+
+       show_popup(ad);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!part) return NULL;
+       if (!strcmp(part, "elm.text")) return strdup("Abort on errors");
+
+       return NULL;
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       Eina_Bool enabled = EINA_FALSE;
+
+       if (!part) return NULL;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               icon = elm_check_add(obj);
+
+               if (getenv("ELM_ERROR_ABORT")) enabled = EINA_TRUE;
+
+               elm_check_state_set(icon, enabled);
+               elm_object_style_set(icon, "on&off");
+
+               evas_object_pass_events_set(icon, 1);
+               evas_object_propagate_events_set(icon, 0);
+               evas_object_smart_callback_add(icon, "changed", _check_clicked_cb, data);
+
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Elm_Object_Item *item;
+       Evas_Object *icon;
+       Eina_Bool enabled;
+
+       item = (Elm_Object_Item *)event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       icon = elm_object_item_part_content_get(item, "elm.icon");
+       if (!icon) return;
+
+       enabled = !elm_check_state_get(icon);
+
+       if (!update_script(enabled)) return;
+
+       elm_check_state_set(icon, enabled);
+
+       show_popup(ad);
+}
+
+static Evas_Object *
+_create_genlist(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *genlist;
+       Elm_Genlist_Item_Class *itc;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       // Set genlist item class
+       itc = elm_genlist_item_class_new();
+       itc->item_style = "1text.1icon";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = NULL;
+       itc->func.del = NULL;
+
+       // Append items
+       elm_genlist_item_append(genlist, itc, ad, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, ad);
+
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void config_abort_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad);
+
+       elm_naviframe_item_push(ad->nf, _("Abort on errors"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/config_mirror.c b/live.viewer/dbox.app/src/config_mirror.c
new file mode 100644 (file)
index 0000000..c07ffa5
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "config_mirror.h"
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/reboot.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <errno.h>
+
+
+static void
+_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Eina_Bool enabled = elm_check_state_get(obj);
+
+       elm_config_mirrored_set(enabled);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!part) return NULL;
+       if (!strcmp(part, "elm.text")) return strdup("UI Mirroring");
+
+       return NULL;
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       Eina_Bool enabled = EINA_FALSE;
+
+       if (!part) return NULL;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               icon = elm_check_add(obj);
+
+               enabled = elm_config_mirrored_get();
+
+               elm_check_state_set(icon, enabled);
+               elm_object_style_set(icon, "on&off");
+
+               evas_object_pass_events_set(icon, 1);
+               evas_object_propagate_events_set(icon, 0);
+               evas_object_smart_callback_add(icon, "changed", _check_clicked_cb, data);
+
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item;
+       Evas_Object *icon;
+       Eina_Bool enabled;
+
+       item = (Elm_Object_Item *)event_info;
+       if (!item) return;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       icon = elm_object_item_part_content_get(item, "elm.icon");
+       if (!icon) return;
+
+       enabled = !elm_check_state_get(icon);
+
+       elm_check_state_set(icon, enabled);
+}
+
+static Evas_Object *
+_create_genlist(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *genlist;
+       Elm_Genlist_Item_Class *itc;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       // Set genlist item class
+       itc = elm_genlist_item_class_new();
+       itc->item_style = "1text.1icon";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = NULL;
+       itc->func.del = NULL;
+
+       // Append items
+       elm_genlist_item_append(genlist, itc, ad, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, ad);
+
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void config_mirror_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad);
+
+       elm_naviframe_item_push(ad->nf, _("UI Mirroring"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/config_scrolling.c b/live.viewer/dbox.app/src/config_scrolling.c
new file mode 100644 (file)
index 0000000..c8a8834
--- /dev/null
@@ -0,0 +1,480 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "config_scrolling.h"
+#include <math.h>
+
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+
+/*********************************************************
+  config scrolling
+ ********************************************************/
+
+#define NUM_OF_ITEMS 44
+
+static char *slider_itemlist[] = {
+     "Thumb scroll threshold",
+     "Thumb scroll hold threshold",
+     "Thumb scroll momentum threshold",
+     "Thumb scroll friction",
+     "Thumb scroll min friction",
+     "Thumb scroll friction standard",
+     "Thumb scroll border friction",
+     "Thumb scroll sensitivity friction",
+     "Thumb scroll acceleration threshold",
+     "Thumb scroll acceleration time limit",
+     "Thumb scroll acceleration weight",
+     NULL
+};
+
+static char *guide_itemlist[] = {
+     "This is the minimum pixels for moving the scroller",
+     "This is the minimum pixels for moving the scroller on hold",
+     "This is the minimum speed for auto scrolling",
+     "Scroll animation time",
+     "Scroll animation minimum time",
+     "Standard velocity of the scroller",
+     "This is the lag between actual mouse cursor dragging movement and scroller's view movement",
+     "Sensitivity of toucing to scroll",
+     "The minimum speed of mouse cursor movement which will accelerate",
+     "The time limit for accelerating velocity",
+     "The weight for acceleration",
+     NULL
+};
+static void
+_thumbscroll_threshold_change(void *data __UNUSED__,
+                              Evas_Object *obj,
+                              void *event_info __UNUSED__)
+{
+   double tst = elm_config_scroll_thumbscroll_threshold_get();
+   double val = elm_slider_value_get(obj);
+   unsigned int v;
+   if (tst == val) return;
+   v = floor(val + 0.5);
+   elm_config_scroll_thumbscroll_threshold_set(v);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_hold_threshold_change(void *data __UNUSED__,
+                                   Evas_Object *obj,
+                                   void *event_info __UNUSED__)
+{
+   double tst = elm_config_scroll_thumbscroll_hold_threshold_get();
+   double val = elm_slider_value_get(obj);
+   unsigned int v;
+   if (tst == val) return;
+   v = floor(val + 0.5);
+   elm_config_scroll_thumbscroll_hold_threshold_set(v);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_momentum_threshold_change(void *data __UNUSED__,
+                                       Evas_Object *obj,
+                                       void *event_info __UNUSED__)
+{
+   double tsmt = elm_config_scroll_thumbscroll_momentum_threshold_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tsmt == val) return;
+   elm_config_scroll_thumbscroll_momentum_threshold_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_friction_change(void *data __UNUSED__,
+                             Evas_Object *obj,
+                             void *event_info __UNUSED__)
+{
+   double tsf = elm_config_scroll_thumbscroll_friction_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tsf == val) return;
+   elm_config_scroll_thumbscroll_friction_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_min_friction_change(void *data __UNUSED__,
+                                 Evas_Object *obj,
+                                 void *event_info __UNUSED__)
+{
+   double tsmf = elm_config_scroll_thumbscroll_min_friction_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tsmf == val) return;
+   elm_config_scroll_thumbscroll_min_friction_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_friction_standard_change(void *data __UNUSED__,
+                                      Evas_Object *obj,
+                                      void *event_info __UNUSED__)
+{
+   double tsfs = elm_config_scroll_thumbscroll_friction_standard_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tsfs == val) return;
+   elm_config_scroll_thumbscroll_friction_standard_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_border_friction_change(void *data __UNUSED__,
+                                    Evas_Object *obj,
+                                    void *event_info __UNUSED__)
+{
+   double tsbf = elm_config_scroll_thumbscroll_border_friction_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tsbf == val) return;
+   elm_config_scroll_thumbscroll_border_friction_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+static void
+_thumbscroll_sensitivity_friction_change(void *data __UNUSED__,
+                                         Evas_Object *obj,
+                                         void *event_info __UNUSED__)
+{
+   double tssf = elm_config_scroll_thumbscroll_sensitivity_friction_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tssf == val) return;
+   elm_config_scroll_thumbscroll_sensitivity_friction_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_acceleration_threshold_change(void *data __UNUSED__,
+                                         Evas_Object *obj,
+                                         void *event_info __UNUSED__)
+{
+   double tssf = elm_config_scroll_thumbscroll_acceleration_threshold_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tssf == val) return;
+   elm_config_scroll_thumbscroll_acceleration_threshold_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_acceleration_time_limit_change(void *data __UNUSED__,
+                                         Evas_Object *obj,
+                                         void *event_info __UNUSED__)
+{
+   double tssf = elm_config_scroll_thumbscroll_acceleration_time_limit_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tssf == val) return;
+   elm_config_scroll_thumbscroll_acceleration_time_limit_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void
+_thumbscroll_acceleration_weight_change(void *data __UNUSED__,
+                                         Evas_Object *obj,
+                                         void *event_info __UNUSED__)
+{
+   double tssf = elm_config_scroll_thumbscroll_acceleration_weight_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tssf == val) return;
+   elm_config_scroll_thumbscroll_acceleration_weight_set(val);
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static void _reset_button_cb(void *data __UNUSED__,
+                             Evas_Object *obj __UNUSED__,
+                             void *event_info __UNUSED__)
+{
+   const char *pdir;
+   pdir = elm_config_profile_dir_get("mobile", EINA_TRUE);
+   if(!pdir)
+     return;
+
+   ecore_file_recursive_rm(pdir);
+   elm_config_profile_dir_free(pdir);
+
+   elm_config_reload();
+   elm_config_all_flush();
+   elm_config_save();
+   change_config_owner();
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+   int index = ((int)(long)data) / 4;
+   return strdup(slider_itemlist[index]);
+}
+
+static char *_gl_guide_text_get(void *data, Evas_Object *obj, const char *part)
+{
+   int index = ((int)(long)data) / 4;
+   return strdup(guide_itemlist[index]);
+}
+
+static void _parse_negative_zero(char *str)
+{
+   char *ptr, *str_temp;
+
+   ptr = strstr(str, "-0");
+   if (ptr) {
+        str_temp = ptr++;
+        while (*ptr++) {
+             if (*ptr == '0' || *ptr == '.')
+               continue;
+             else if (*ptr >='1' && *ptr <='9')
+               break;
+             else {
+                  while (*str_temp) {
+                       *str_temp = *(str_temp+1);
+                       str_temp++;
+                  }
+                  break;
+             }
+        }
+   }
+}
+
+static char* _indicator_format(double val)
+{
+   char *indicator = malloc(sizeof(char) * 64);
+   if (!indicator) return NULL;
+   snprintf(indicator, 64, "%1.0f", val);
+
+   // Check and remove -0 state
+   _parse_negative_zero(indicator);
+
+   return indicator;
+}
+
+static char* _indicator_format_point(double val)
+{
+   char *indicator = malloc(sizeof(char) * 64);
+   if (!indicator) return NULL;
+   snprintf(indicator, 64, "%1.1f", val);
+
+   // Check and remove -0 state
+   _parse_negative_zero(indicator);
+
+   return indicator;
+}
+
+static void _indicator_free(char *str)
+{
+   free(str);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   Evas_Object *slider;
+   int index = ((int)(long)data);
+
+   slider = elm_slider_add(obj);
+   elm_slider_indicator_show_set(slider, EINA_TRUE);
+   evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+   elm_slider_indicator_format_set(slider, "%1.0f");
+
+   if (index == 1) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format, _indicator_free);
+        elm_slider_min_max_set(slider, 8, 500);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_threshold_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_threshold_change,
+                                       NULL);
+   } else if (index == 5) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format, _indicator_free);
+        elm_slider_min_max_set(slider, 4, 500);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_hold_threshold_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_hold_threshold_change,
+                                       NULL);
+   } else if (index == 9) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 10.0, 200.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_momentum_threshold_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_momentum_threshold_change,
+                                       NULL);
+   } else if (index == 13) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 0.1, 15.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_friction_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_friction_change,
+                                       NULL);
+   } else if (index == 17) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 0.1, 15.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_min_friction_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_min_friction_change,
+                                       NULL);
+   } else if (index == 21) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 10.0, 5000.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_friction_standard_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_friction_standard_change,
+                                       NULL);
+   } else if (index == 25) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 0.0, 1.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_border_friction_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_border_friction_change,
+                                       NULL);
+   } else if (index == 29) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 0.1, 1.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_sensitivity_friction_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_sensitivity_friction_change,
+                                       NULL);
+   } else if (index == 33) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 10.0, 5000.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_acceleration_threshold_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_acceleration_threshold_change,
+                                       NULL);
+   } else if (index == 37) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 0.0, 15.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_acceleration_time_limit_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_acceleration_time_limit_change,
+                                       NULL);
+   } else if (index == 41) {
+        elm_slider_indicator_format_function_set(slider, _indicator_format_point, _indicator_free);
+        elm_slider_min_max_set(slider, 1.0, 10.0);
+        elm_slider_value_set(slider, elm_config_scroll_thumbscroll_acceleration_weight_get());
+        evas_object_smart_callback_add(slider, "slider,drag,stop", _thumbscroll_acceleration_weight_change,
+                                       NULL);
+   }
+   return slider;
+}
+
+static Evas_Object* _create_genlist(Evas_Object* parent)
+{
+   Evas_Object *genlist;
+   Elm_Object_Item *gl_item = NULL;
+   Elm_Genlist_Item_Class *itc_name, *itc_slider, *itc_guide, *itc_sep;
+   int index;
+
+   genlist = elm_genlist_add(parent);
+   elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+   itc_name = elm_genlist_item_class_new();
+   itc_slider = elm_genlist_item_class_new();
+   itc_guide = elm_genlist_item_class_new();
+   itc_sep = elm_genlist_item_class_new();
+
+   itc_name->item_style = "dialogue/grouptitle";
+   itc_name->func.text_get = _gl_text_get;
+   itc_name->func.content_get = NULL;
+   itc_name->func.state_get = NULL;
+   itc_name->func.del = NULL;
+
+   itc_slider->item_style = "dialogue/1icon";
+   itc_slider->func.text_get = NULL;
+   itc_slider->func.content_get = _gl_content_get;
+   itc_slider->func.state_get = NULL;
+   itc_slider->func.del = NULL;
+
+   itc_guide->item_style = "multiline/1text";
+   itc_guide->func.text_get = _gl_guide_text_get;
+   itc_guide->func.content_get = NULL;
+   itc_guide->func.state_get = NULL;
+   itc_guide->func.del = NULL;
+
+   itc_sep->item_style = "dialogue/separator";
+   itc_sep->func.text_get = NULL;
+   itc_sep->func.content_get = NULL;
+   itc_sep->func.state_get = NULL;
+   itc_sep->func.del = NULL;
+
+   evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, 0.0);
+   evas_object_show(genlist);
+
+   for (index = 0; index < NUM_OF_ITEMS; index++) {
+        switch(index % 4) {
+           case 0:
+              gl_item = elm_genlist_item_append(genlist, itc_name, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+              elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+              break;
+           case 1:
+              gl_item = elm_genlist_item_append(genlist, itc_slider, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+              elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+              break;
+           case 2:
+              gl_item = elm_genlist_item_append(genlist, itc_guide, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+              elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+              break;
+           case 3:
+              gl_item = elm_genlist_item_append(genlist, itc_sep, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+              elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+              break;
+        }
+   }
+   elm_genlist_item_class_unref(itc_name);
+   elm_genlist_item_class_unref(itc_slider);
+   elm_genlist_item_class_unref(itc_guide);
+   elm_genlist_item_class_unref(itc_sep);
+   return genlist;
+}
+
+void config_scrolling_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *genlist, *button, *icon;
+   Elm_Object_Item *navi_it;
+   struct appdata *ad = (struct appdata *) data;
+   if (ad == NULL) return;
+
+   genlist = _create_genlist(ad->nf);
+   navi_it = elm_naviframe_item_push(ad->nf, _("Scrolling"), NULL, NULL, genlist, NULL);
+
+   button = elm_button_add(ad->nf);
+   elm_object_style_set(button, "naviframe/title_icon");
+   icon = elm_image_add(ad->nf);
+   elm_image_file_set(icon, ICON_DIR"/reset.png", NULL);
+   evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   elm_object_part_content_set(button, "icon", icon);
+   elm_object_item_part_content_set(navi_it, "title_right_btn", button);
+   evas_object_smart_callback_add(button, "clicked", _reset_button_cb, genlist);
+}
+
diff --git a/live.viewer/dbox.app/src/ctxpopup.c b/live.viewer/dbox.app/src/ctxpopup.c
new file mode 100644 (file)
index 0000000..245c30d
--- /dev/null
@@ -0,0 +1,1131 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "ctxpopup.h"
+
+/*********************************************************
+ contextpopup
+ ********************************************************/
+static Evas_Coord touch_x;
+static Evas_Coord touch_y;
+static Evas_Object* ctxpopup = NULL;
+struct appdata *ad;
+typedef struct _Ctxpopup_Data
+{
+       Evas_Object *ctx;
+       Evas_Object *btn;
+} Ctxpopup_Data;
+Ctxpopup_Data ctx_data;
+
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+       ecore_event_handler_del(data);
+
+       return EINA_TRUE;
+}
+
+static void _move_ctxpopup(Evas_Object *ctxpopup, Evas_Object *btn)
+{
+   Evas_Coord x, y, w , h;
+   evas_object_geometry_get(btn, &x, &y, &w, &h);
+   evas_object_move(ctxpopup, x + (w / 2), y + (h /2));
+}
+
+static void _move_more_ctxpopup(Evas_Object *ctx)
+{
+       Evas_Coord w, h;
+       int pos = -1;
+
+       elm_win_screen_size_get(ad->win_main, NULL, NULL, &w, &h);
+       pos = elm_win_rotation_get(ad->win_main);
+
+       switch (pos) {
+               case 0:
+               case 180:
+                       evas_object_move(ctx, 0, h);
+                       break;
+               case 90:
+                       evas_object_move(ctx, 0, w);
+                       break;
+               case 270:
+                       evas_object_move(ctx, h, w);
+                       break;
+       }
+}
+
+static void _dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_smart_callback_del(ctxpopup,"dismissed", _dismissed_cb);
+       evas_object_del(ctxpopup);
+       ctxpopup = NULL;
+}
+
+static void _dismissed_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       obj = NULL;
+}
+
+static void _resize_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _move_more_ctxpopup(data);
+}
+
+static void _rotate_more_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ctx = (Evas_Object *)data;
+       _move_more_ctxpopup(ctx);
+}
+
+static void _delete_more_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *navi = (Evas_Object *)data;
+       Evas_Object *ctx = obj;
+
+       evas_object_event_callback_del_full(navi, EVAS_CALLBACK_RESIZE, _resize_more_ctxpopup_cb, ctx);
+       evas_object_smart_callback_del_full(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_more_ctxpopup_cb, ctx);
+       evas_object_smart_callback_del(ctx, "dismissed", _dismissed_more_ctxpopup_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL, _delete_more_ctxpopup_cb, navi);
+}
+
+static void _dismissed_rotate_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(ctx_data.ctx);
+       ctx_data.ctx = NULL;
+       ctxpopup = NULL;
+}
+static void _resize_rotate_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _move_ctxpopup(ctx_data.ctx, ctx_data.btn);
+}
+
+static void _rotate_ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _move_ctxpopup(ctx_data.ctx, ctx_data.btn);
+}
+
+static void _delete_rotate_ctxpopup_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *navi = (Evas_Object *)data;
+       Evas_Object *ctx = ctx_data.ctx;
+
+       evas_object_event_callback_del(navi, EVAS_CALLBACK_RESIZE, _resize_rotate_ctxpopup_cb);
+       evas_object_smart_callback_del(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_ctxpopup_cb);
+       evas_object_smart_callback_del(ctx, "dismissed", _dismissed_rotate_ctxpopup_cb);
+       ea_object_event_callback_del(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb);
+       ea_object_event_callback_del(ctxpopup, EA_CALLBACK_MORE, ea_ctxpopup_back_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL, _delete_rotate_ctxpopup_cb, navi);
+}
+
+static void _on_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Coord x, y, w, h;
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+       printf("[%s : %d] obj=%p x=%d y=%d w=%d h=%d\n", __func__, __LINE__, obj, x, y, w,h);
+}
+
+static void _ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info);
+       if(label) fprintf(stderr, "text(%s) is clicked\n", label);
+
+       Evas_Object *icon = elm_object_item_content_get((Elm_Object_Item *) event_info);
+       if(icon) fprintf(stderr, "icon is clicked\n");
+}
+
+/*********************************************************
+Text Only
+ ********************************************************/
+static void _create_ctxpopup_text_only(void *data, Evas_Object *obj, void *event_info)
+{
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup,"dismissed", _dismissed_cb, NULL);
+
+       elm_ctxpopup_item_append(ctxpopup, _("Message"), NULL, _ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Email"), NULL, _ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Facebook"), NULL, _ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Bluetooth"), NULL, _ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Flickr"), NULL, _ctxpopup_cb, ctxpopup);
+
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Text Only End
+ ********************************************************/
+
+
+/*********************************************************
+3 Icons
+ ********************************************************/
+static void _create_ctxpopup_3icon( void *data, Evas_Object *obj, void *event_info )
+{
+       char buf[255];
+       Evas_Object* icon;
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup,"dismissed", _dismissed_cb, NULL);
+       elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
+
+       //Icon 1
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_call.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, NULL, icon, _ctxpopup_cb, ctxpopup);
+
+       //Icon 2
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_message.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, NULL, icon, _ctxpopup_cb, ctxpopup);
+
+       //Icon 3
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_video call.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, NULL, icon, _ctxpopup_cb, ctxpopup);
+
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+3 Icons End
+ ********************************************************/
+
+/*********************************************************
+Icon + Text
+ ********************************************************/
+static void _create_ctxpopup_icon_text(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object* icon;
+       char buf[256];
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon1.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.naver.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.telebox.net"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.samsung.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon4.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.yahoo.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon3.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.facebook.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       _move_ctxpopup(ctxpopup, obj);
+
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Icon + Text End
+ ********************************************************/
+/*********************************************************
+Ctxpop_on_roatation
+ ********************************************************/
+
+static void _create_ctxpopup_on_rotation(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object* icon;
+       char buf[256];
+       ctx_data.btn = obj;
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ctx_data.ctx = ctxpopup;
+       elm_ctxpopup_auto_hide_disabled_set(ctxpopup, EINA_TRUE);
+
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_MORE, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_rotate_ctxpopup_cb, NULL);
+       evas_object_event_callback_add(ctxpopup, EVAS_CALLBACK_DEL, _delete_rotate_ctxpopup_cb, ad->nf);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_RESIZE, _resize_rotate_ctxpopup_cb, NULL);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctxpopup), "rotation,changed", _rotate_ctxpopup_cb, NULL);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon1.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.naver.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.telebox.net"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.samsung.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon4.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.yahoo.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/icon3.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("http://m.facebook.com"), icon, _ctxpopup_cb, ctxpopup);
+
+       _move_ctxpopup(ctxpopup, obj);
+
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Ctxpop_on_roatation_ends
+ ********************************************************/
+/*********************************************************
+CopyPaste Sample
+ ********************************************************/
+
+const char *
+_elm_theme_current_get(const char *theme_search_order)
+{
+   const char *ret;
+   const char *p;
+
+   if (!theme_search_order)
+     return NULL;
+
+   for (p = theme_search_order;; p++)
+     {
+        if ((*p == ':') || (!*p))
+          {
+             if (p > theme_search_order)
+               {
+                  char *n = malloc(p - theme_search_order + 1);
+                  if (!n)
+                    return NULL;
+
+                  strncpy(n, theme_search_order, p - theme_search_order);
+                  n[p - theme_search_order] = 0;
+                  ret = eina_stringshare_add(n);
+                  free(n);
+                  break;
+               }
+          }
+     }
+
+   return ret;
+}
+
+static void _create_ctxpopup_copypaste_sample(void *data, Evas_Object *obj, void *event_info)
+{
+       char buf[255];
+       char *theme;
+       Evas_Object *icon;
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       theme = elm_theme_list_item_path_get(_elm_theme_current_get(elm_theme_get(NULL)), NULL);
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/select/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Select"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/select_all/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Select All"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/copy/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Copy"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/cut/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Cut"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/paste/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Paste"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/clipboard/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Clipboard"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/translate/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Translate"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/share/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Share"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/search/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Search"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "elm/copypaste/find/default");
+       elm_image_file_set(icon, theme, buf);
+       elm_ctxpopup_item_append(ctxpopup, _("Find"), icon, _ctxpopup_cb, ctxpopup);
+
+       elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
+       elm_object_style_set(ctxpopup, "copypaste");
+       _move_ctxpopup(ctxpopup, obj);
+
+       evas_object_show(ctxpopup);
+       if (theme) free(theme);
+}
+/*********************************************************
+CopyPaste Sample End
+ ********************************************************/
+
+/*********************************************************
+ Buttons Style
+ ********************************************************/
+static Evas_Object *_create_buttons(Evas_Object *parent)
+{
+       Evas_Object *table;
+       Evas_Object *btn;
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "ctxpopup_buttons_nbeat");
+
+       table = elm_table_add(layout);
+       elm_table_padding_set(table, 10, 10);
+
+       //cm
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "cm");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 0, 0, 1, 1);
+
+       //m
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "m");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 1, 0, 1, 1);
+
+       //km
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "km");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 2, 0, 1, 1);
+
+       //inches
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "inches");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 0, 1, 1, 1);
+
+       //gallons
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "gallons(us)");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 1, 1, 1, 1);
+
+       //inches
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "inches³");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 2, 1, 1, 1);
+
+       //inches
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "hectares");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 0, 2, 1, 1);
+
+       //gallons
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "yards");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 1, 2, 1, 1);
+
+       //inches
+       btn = elm_button_add(table);
+       elm_object_text_set(btn, "miles");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(btn);
+       elm_table_pack(table, btn, 2, 2, 1, 1);
+
+       elm_object_part_content_set(layout, "elm.swallow.table", table);
+
+       return layout;
+
+}
+
+static void _create_ctxpopup_buttons_style(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *buttons;
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       buttons = _create_buttons(ad->nf);
+       evas_object_show(buttons);
+       elm_object_content_set(ctxpopup, buttons);
+
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+ Buttons Style End
+ ********************************************************/
+
+/*********************************************************
+Imageeditor adjust
+ ********************************************************/
+static void _create_ctxpopup_imageeditor_adjust_style(void *data, Evas_Object *obj, void *event_info)
+{
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       elm_object_style_set(ctxpopup, "elm_demo_tizen/imageeditor");
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       elm_ctxpopup_item_append(ctxpopup, _("option ment text"), NULL,_ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("option ment text"), NULL,_ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("option ment text"), NULL,_ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("option ment text text text"), NULL,_ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("option ment text"), NULL,_ctxpopup_cb, ctxpopup);
+
+       elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_LEFT,
+                                                                                                                       ELM_CTXPOPUP_DIRECTION_RIGHT,
+                                                                                                                       ELM_CTXPOPUP_DIRECTION_DOWN,
+                                                                                                                       ELM_CTXPOPUP_DIRECTION_UP);
+       elm_object_scroll_freeze_push(ctxpopup);
+       _move_ctxpopup(ctxpopup, obj);
+
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Imageeditor adjust End
+ ********************************************************/
+/*********************************************************
+Camera Shooting mode
+ ********************************************************/
+static void _camera_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       elm_radio_value_set(data, (int) evas_object_data_get(data, "idx"));
+}
+
+static Evas_Object *_create_camera_shooting_item(Evas_Object *parent, char *icon_path, char *label)
+{
+       Evas_Object *layout;
+       Evas_Object *icon;
+
+       //layout
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "camera/radio_icon_text_item");
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL,  EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND,  EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       //icon
+       icon = elm_image_add(layout);
+       elm_image_file_set(icon, icon_path, NULL);
+       evas_object_show(icon);
+       elm_object_part_content_set(layout, "elm.swallow.icon", icon);
+
+       //text
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text", label);
+
+       return layout;
+}
+
+static Evas_Object *_create_camera_shooting_content(Evas_Object *parent)
+{
+       Evas_Object *layout;
+       Evas_Object *box;
+       Evas_Object *item;
+       Evas_Object *radio;
+       Evas_Object *group;
+       Eina_List *l = NULL;
+       Evas_Object *ao;
+
+       //Layout
+       layout = elm_layout_add(ctxpopup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "camera/layout");
+       evas_object_show(layout);
+
+       //Box
+       box = elm_box_add(layout);
+
+       //Items : Single
+       item = _create_camera_shooting_item(box, ICON_DIR"/11_camera_shootingmode_single.png", "Single");
+       ao = elm_access_object_register(item, box);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "Single");
+       l = eina_list_append(l, ao);
+
+       //radio
+       group = radio = elm_radio_add(item);
+       elm_object_style_set(radio, "elm_demo_tizen/camera");
+       elm_radio_state_value_set(radio, 0);
+       evas_object_data_set(radio, "idx", (void *)(0));
+       evas_object_show(radio);
+       elm_object_part_content_set(item, "elm.swallow.radio", radio);
+       evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _camera_cb, radio);
+       elm_box_pack_end(box, item);
+
+       //Items : Beauty
+       item = _create_camera_shooting_item(box, ICON_DIR"/11_camera_shootingmode_beauty.png", "Beauty");
+       ao = elm_access_object_register(item, box);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "Beauty");
+       l = eina_list_append(l, ao);
+
+       //radio
+       radio = elm_radio_add(item);
+       elm_object_style_set(radio, "elm_demo_tizen/camera");
+       elm_radio_state_value_set(radio, 1);
+       evas_object_data_set(radio, "idx", (void *)(1));
+       elm_radio_group_add(radio, group);
+       evas_object_show(radio);
+       elm_object_part_content_set(item, "elm.swallow.radio", radio);
+       evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _camera_cb, radio);
+       elm_box_pack_end(box, item);
+
+       //Items : Smile shot
+       item = _create_camera_shooting_item(box, ICON_DIR"/11_camera_shootingmode_smileshot.png", "Smile shot");
+       ao = elm_access_object_register(item, box);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "Smile Shot");
+       l = eina_list_append(l, ao);
+
+       //radio
+       radio = elm_radio_add(item);
+       elm_object_style_set(radio, "elm_demo_tizen/camera");
+       elm_radio_state_value_set(radio, 2);
+       evas_object_data_set(radio, "idx", (void *)(2));
+       elm_radio_group_add(radio, group);
+       evas_object_show(radio);
+       elm_object_part_content_set(item, "elm.swallow.radio", radio);
+       evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _camera_cb, radio);
+       elm_box_pack_end(box, item);
+
+       //Items : Continuous
+       item = _create_camera_shooting_item(box, ICON_DIR"/11_camera_shootingmode_continuous.png", "Continuous");
+       ao = elm_access_object_register(item, box);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "Continuous");
+       l = eina_list_append(l, ao);
+
+       //radio
+       radio = elm_radio_add(item);
+       elm_object_style_set(radio, "elm_demo_tizen/camera");
+       elm_radio_state_value_set(radio, 3);
+       evas_object_data_set(radio, "idx", (void *)(3));
+       elm_radio_group_add(radio, group);
+       evas_object_show(radio);
+       elm_object_part_content_set(item, "elm.swallow.radio", radio);
+       evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _camera_cb, radio);
+       elm_box_pack_end(box, item);
+
+       //Items : Panorama
+       item = _create_camera_shooting_item(box, ICON_DIR"/11_camera_shootingmode_panorama.png", "Panorama");
+       ao = elm_access_object_register(item, box);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "Panorama");
+       l = eina_list_append(l, ao);
+
+       //radio
+       radio = elm_radio_add(item);
+       elm_object_style_set(radio, "elm_demo_tizen/camera");
+       elm_radio_state_value_set(radio, 4);
+       evas_object_data_set(radio, "idx", (void *)(4));
+       elm_radio_group_add(radio, group);
+       evas_object_show(radio);
+       elm_object_part_content_set(item, "elm.swallow.radio", radio);
+       evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _camera_cb, radio);
+       elm_box_pack_end(box, item);
+
+       elm_object_part_content_set(layout, "elm.swallow.box", box);
+
+       elm_object_focus_custom_chain_set(box, l);
+
+       return layout;
+}
+
+static void _create_ctxpopup_camera_shooting_style(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content;
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       elm_object_style_set(ctxpopup, "elm_demo_tizen/camera");
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       content = _create_camera_shooting_content(ctxpopup);
+       elm_object_content_set(ctxpopup, content);
+
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Camera Shooting mode End
+ ********************************************************/
+
+/*********************************************************
+Icon + Text (More button style)
+ ********************************************************/
+static void _create_ctxpopup_more_button_style(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object* icon;
+       char buf[256];
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       elm_object_style_set(ctxpopup, "more/default");
+       evas_object_smart_callback_add(ctxpopup, "dismissed", _dismissed_cb, NULL);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("Add contact"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("Favorites"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_playlist.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("Search"), icon, _ctxpopup_cb, ctxpopup);
+
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_dialer.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, _("Dialer"), icon, _ctxpopup_cb, ctxpopup);
+
+       elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+       _move_ctxpopup(ctxpopup, obj);
+
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+Icon + Text (More button style) End
+ ********************************************************/
+
+/*********************************************************
+2 Text & 2 Icons
+ ********************************************************/
+static void _create_ctxpopup_2text_2icon( void *data, Evas_Object *obj, void *event_info )
+{
+       char buf[255];
+       Evas_Object* icon;
+
+       if(ctxpopup) {
+               evas_object_del(ctxpopup);
+               ctxpopup = NULL;
+       }
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctxpopup,"dismissed", _dismissed_cb, NULL);
+       elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
+
+       elm_ctxpopup_item_append(ctxpopup, _("Function"), NULL, _ctxpopup_cb, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Text"), NULL, _ctxpopup_cb, ctxpopup);
+
+       //Icon 1
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_call.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, NULL, icon, _ctxpopup_cb, ctxpopup);
+
+       //Icon 2
+       icon = elm_image_add(ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_message.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ctxpopup, NULL, icon, _ctxpopup_cb, ctxpopup);
+
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}
+/*********************************************************
+2 Text & 2 Icons End
+ ********************************************************/
+/*********************************************************
+Icon + Text (More button style : Naviframe Toolbar)
+ ********************************************************/
+static void _create_ctxpopup_more_button_2_style(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *icon, *more_ctxpopup = NULL;
+       Evas_Object *it_obj;
+       Elm_Object_Item *it;
+       char buf[256];
+
+       more_ctxpopup = elm_ctxpopup_add(ad->nf);
+       ea_object_event_callback_add(more_ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       ea_object_event_callback_add(more_ctxpopup, EA_CALLBACK_MORE, ea_ctxpopup_back_cb, NULL);
+       elm_object_style_set(more_ctxpopup, "more/default");
+       elm_ctxpopup_auto_hide_disabled_set(more_ctxpopup, EINA_TRUE);
+       evas_object_smart_callback_add(more_ctxpopup, "dismissed", _dismissed_more_ctxpopup_cb, NULL);
+       evas_object_event_callback_add(more_ctxpopup, EVAS_CALLBACK_DEL, _delete_more_ctxpopup_cb, ad->nf);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_RESIZE, _resize_more_ctxpopup_cb, more_ctxpopup);
+       evas_object_smart_callback_add(elm_object_top_widget_get(more_ctxpopup), "rotation,changed", _rotate_more_ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       it = elm_ctxpopup_item_append(more_ctxpopup, _("Add contact"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       it_obj = elm_object_item_track(it);
+       evas_object_event_callback_add(it_obj, EVAS_CALLBACK_MOVE, _on_move, NULL);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Favorites"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_playlist.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Search"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_dialer.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Dialer"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Add contact"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Favorites"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_playlist.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Search"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_dialer.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Dialer"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Add contact"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Favorites"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_playlist.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Search"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_dialer.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Dialer"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       elm_ctxpopup_direction_priority_set(more_ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       _move_more_ctxpopup(more_ctxpopup);
+       evas_object_show(more_ctxpopup);
+}
+/*********************************************************
+Icon + Text (More button style : Naviframe Toolbar) End
+ ********************************************************/
+ /*********************************************************
+Split Window
+ ********************************************************/
+static void _create_ctxpopup_split_window_style(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *icon, *more_ctxpopup = NULL;
+       char buf[256];
+
+       more_ctxpopup = ea_menu_popup_add(ad->nf);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Add contact"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Favorites"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_playlist.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Search"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_dialer.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Dialer"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_contacts.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Add contact"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_logs.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Phone calls"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       icon = elm_image_add(more_ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/00_controlbar_icon_favorites.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(more_ctxpopup, _("Favorites"), icon, _ctxpopup_cb, more_ctxpopup);
+
+       elm_ctxpopup_direction_priority_set(more_ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       ea_menu_popup_move(more_ctxpopup);
+       evas_object_show(more_ctxpopup);
+}
+/*********************************************************
+Split Window End
+ ********************************************************/
+static Eina_Bool _mousedown_cb(void *data, int type, void *event)
+{
+       Ecore_Event_Mouse_Button *ev = event;
+       touch_x = ev->x;
+       touch_y = ev->y;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void ctxpopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout;
+       Evas_Object *btn;
+       Ecore_Event_Handler* event;
+       Evas_Object *scroller;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata*) data;
+       if (ad == NULL) return;
+
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+       event = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _mousedown_cb, NULL);
+
+       //scroller
+       scroller = elm_scroller_add(ad->nf);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+
+       //layout
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "ctxpopup_layout");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       navi_it = elm_naviframe_item_push(ad->nf, _("CtxPopup"), NULL, NULL, scroller, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, event);
+
+       elm_object_content_set(scroller, layout);
+
+       //create more button
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/more/default");
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_more_button_2_style, ad);
+       elm_object_item_part_content_set(navi_it, "toolbar_more_btn", btn);
+
+       //Icon + Text
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Icon + Text") );
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_icon_text, ad);
+       elm_object_part_content_set(layout, "btn1", btn);
+
+       //Text Only
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Text Only"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_text_only, ad);
+       elm_object_part_content_set(layout, "btn2", btn);
+
+       //Copy & Paste
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("CopyPaste"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_copypaste_sample, ad);
+       elm_object_part_content_set(layout, "btn3", btn);
+
+       //3 Icons
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("3 Icons") );
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_3icon, ad);
+       elm_object_part_content_set(layout, "btn4", btn);
+
+       //Buttons
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Buttons"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_buttons_style, ad);
+       elm_object_part_content_set(layout, "btn5", btn);
+
+       //Camera Shooting Mode
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Camera Shooting"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_camera_shooting_style, ad);
+       elm_object_part_content_set(layout, "btn6", btn);
+
+       //Rotation
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Rotation"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_on_rotation, ad);
+       elm_object_part_content_set(layout, "btn7", btn);
+       //Image editor adjust
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Image Option"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_imageeditor_adjust_style, ad);
+       elm_object_part_content_set(layout, "btn8", btn);
+
+       //More button
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("More..."));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_more_button_style, ad);
+       elm_object_part_content_set(layout, "btn9", btn);
+
+       //2 Text & 2 Icons Horizontal
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("2Text&2Icons"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_2text_2icon, ad);
+       elm_object_part_content_set(layout, "btn10", btn);
+
+       //Split Window
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Split Window"));
+       evas_object_smart_callback_add(btn, "clicked", _create_ctxpopup_split_window_style, ad);
+       elm_object_part_content_set(layout, "btn11", btn);
+}
diff --git a/live.viewer/dbox.app/src/datetime.c b/live.viewer/dbox.app/src/datetime.c
new file mode 100644 (file)
index 0000000..ac16ac2
--- /dev/null
@@ -0,0 +1,791 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "datetime.h"
+#include <langinfo.h>
+
+static void _datetime_cb(void *data, Evas_Object *obj, void *event_info);
+static void _datepicker_cb(void *data, Evas_Object * obj, void *event_info);
+static void _timepicker_cb(void *data, Evas_Object * obj, void *event_info);
+static void _pickerpopup_cb(void *data, Evas_Object * obj, void *event_info);
+static void _custom_picker_normal_popup_cb(void *data, Evas_Object * obj, void *event_info);
+static void _custom_picker_center_popup_cb(void *data, Evas_Object * obj, void *event_info);
+static void _edit_start_cb(void *data, Evas_Object *obj, void *event_info);
+static void _edit_end_cb(void *data, Evas_Object *obj, void *event_info);
+static void _picker_back_cb(void *data, Evas_Object *obj, void *event_info);
+
+static Evas_Object *datetime_date_picker_layout = NULL;
+static Evas_Object *datetime_time_picker_layout = NULL;
+
+static Evas_Object *date_picker_layout = NULL;
+static Evas_Object *time_picker_layout = NULL;
+
+static Evas_Object *datetime_popup = NULL;
+static Evas_Object *date_popup = NULL;
+static Evas_Object *time_popup = NULL;
+static Evas_Object *win = NULL;
+static Evas_Object *naviframe = NULL;
+static Evas_Object *is_normal_popup = EINA_TRUE;
+
+static struct _menu_item _menu_its[] = {
+       {"Datetime Styles", _datetime_cb},
+       {"Datepicker Styles", _datepicker_cb},
+       {"Timepicker Styles", _timepicker_cb},
+       {"Datetime Picker popup Styles", _pickerpopup_cb},
+       {"Datetime Custom Normal Popup Styles", _custom_picker_normal_popup_cb},
+       {"Datetime Custom Center Popup Styles", _custom_picker_center_popup_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static void _edit_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ea_object_event_callback_add(obj, EA_CALLBACK_BACK, _picker_back_cb, NULL);
+}
+
+static void _edit_end_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ea_object_event_callback_del(obj, EA_CALLBACK_BACK, _picker_back_cb);
+}
+
+static inline void _picker_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(obj, "picker,hide", "");
+}
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (!it) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("Datetime value is changed\n");
+}
+
+static void _set_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("Set clicked\n");
+}
+
+#ifndef DESKTOP
+static char *
+_datetime_format_get()
+{
+       char *dt_fmt, *region_fmt, *lang = NULL;
+       char buf[256] = {0,};
+       int time_val = 0, is_hour24 = 0, ret;
+
+       lang = getenv("LANGUAGE");
+       setenv("LANGUAGE", "en_US", 1);
+
+       region_fmt = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       ret = vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &time_val);
+       if (ret < 0)
+               is_hour24 = 0;
+       else if( time_val == VCONFKEY_TIME_FORMAT_12 || time_val == VCONFKEY_TIME_FORMAT_24)
+               is_hour24 = time_val - 1;
+
+       if (is_hour24)
+               snprintf(buf, sizeof(buf), "%s_DTFMT_24HR", region_fmt);
+       else
+               snprintf(buf, sizeof(buf), "%s_DTFMT_12HR", region_fmt);
+
+       dt_fmt = dgettext("dt_fmt", buf);
+
+       if(!lang || !strcmp(lang, ""))
+               unsetenv("LANGUAGE");
+       else
+               setenv("LANGUAGE", lang, 1);
+
+       return strdup(dt_fmt);
+}
+
+static void
+_vconf_datetime_format_changed_cb(keynode_t *node, void *data)
+{
+       Evas_Object *datetime = (Evas_Object *) data;
+       char *dt_fmt = _datetime_format_get();
+       elm_datetime_format_set(datetime, dt_fmt);
+       free(dt_fmt);
+}
+#endif
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+#ifndef DESKTOP
+       vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT, _vconf_datetime_format_changed_cb);
+       vconf_ignore_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_datetime_format_changed_cb);
+#endif
+       return EINA_TRUE;
+}
+
+static Evas_Object *_create_datetime_styles(Evas_Object * parent)
+{
+       Evas_Object *layout, *datetime;
+       time_t t;
+       struct tm time1;
+       char *dt_fmt;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_styles");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d/%b/%Y %I:%M %p");
+       elm_object_part_content_set(layout, "picker1", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%b/%d/%Y %H:%M");
+       elm_object_part_content_set(layout, "picker2", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d/%b/%Y %I:%M %p");
+       elm_object_part_content_set(layout, "picker3", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+       elm_object_signal_emit(datetime, "weekday,show", "");
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%b/%d/%Y %H:%M");
+       elm_object_part_content_set(layout, "picker4", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+       elm_object_signal_emit(datetime, "weekday,show", "");
+
+       datetime = elm_datetime_add(layout);
+       elm_object_part_content_set(layout, "picker5", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+#ifndef DESKTOP
+       dt_fmt = _datetime_format_get();
+       elm_datetime_format_set(datetime, dt_fmt);
+       free(dt_fmt);
+       vconf_notify_key_changed(VCONFKEY_REGIONFORMAT, _vconf_datetime_format_changed_cb, datetime);
+       vconf_notify_key_changed(VCONFKEY_REGIONFORMAT_TIME1224, _vconf_datetime_format_changed_cb, datetime);
+#endif
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%Y/%b/%d %I:%M %p");
+       t = time(NULL);
+       localtime_r(&t, &time1);
+       // set the min time limit as "2000 May 10th 02:30 PM"
+       time1.tm_year = 100;
+       time1.tm_mon = 4;
+       time1.tm_mday = 10;
+       time1.tm_hour = 14;
+       time1.tm_min = 30;
+       elm_datetime_value_min_set(datetime, &time1);
+       // date can be input only in between 10 to 20
+       elm_datetime_field_limit_set(datetime, ELM_DATETIME_DATE, 10, 20);
+       // minutes can be input only in between 20 and 40
+       elm_datetime_field_limit_set(datetime, ELM_DATETIME_MINUTE, 20, 40);
+       elm_object_part_content_set(layout, "picker6", datetime);
+       evas_object_smart_callback_add(datetime, "changed", _changed_cb, datetime);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _set_clicked_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       return layout;
+}
+
+static void _datetime_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       Elm_Object_Item *it;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Datetime Styles"), NULL, NULL, scroller, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+
+       layout_inner = _create_datetime_styles(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static Evas_Object *_create_datepicker_styles(Evas_Object * parent)
+{
+       Evas_Object *layout, *datetime;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datepicker_styles");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d/%b/%Y");
+       elm_object_part_content_set(layout, "picker1", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+       elm_object_signal_emit(datetime, "weekday,show", "");
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%b/%d/%Y");
+       elm_object_part_content_set(layout, "picker2", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%Y/%d/%b");
+       elm_object_part_content_set(layout, "picker3", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d,%b,%Y");
+       elm_object_part_content_set(layout, "picker4", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d-%b-%Y");
+       elm_object_part_content_set(layout, "picker5", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%d %b %Y");
+       elm_object_part_content_set(layout, "picker6", datetime);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _set_clicked_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       return layout;
+}
+
+static void _datepicker_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Datepicker Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_datepicker_styles(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static Evas_Object *_create_timepicker_styles(Evas_Object * parent)
+{
+       Evas_Object *layout, *datetime;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/timepicker_styles");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%I:%M %p");
+       elm_object_part_content_set(layout, "picker1", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%H:%M");
+       elm_object_part_content_set(layout, "picker2", datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_datetime_format_set(datetime, "%p %I:%M");
+       elm_object_part_content_set(layout, "picker3", datetime);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _set_clicked_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       return layout;
+}
+
+static void _timepicker_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Timepicker Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_timepicker_styles(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static void _launch_datepicker_popup(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *datetime;
+
+       datetime = (Evas_Object *)data;
+       if (!datetime) return;
+
+       elm_object_signal_emit(datetime, "datepicker,show", "");
+}
+
+static void _launch_timepicker_popup(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *datetime;
+
+       datetime = (Evas_Object *)data;
+       if (!datetime) return;
+
+       elm_object_signal_emit(datetime, "timepicker,show", "");
+}
+
+static Evas_Object *_create_pickerpopup_styles(Evas_Object * parent)
+{
+       Evas_Object *layout, *btn, *datetime;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_pickerpopup_styles");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+       elm_datetime_format_set(datetime, "%d/ %b/ %Y");
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "style1/auto_expand");
+       elm_object_text_set(btn, "Launch Datepicker popup");
+       elm_object_part_content_set(layout, "picker1", btn);
+       evas_object_show(datetime);
+       evas_object_smart_callback_add(btn, "clicked", _launch_datepicker_popup, datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+       elm_datetime_format_set(datetime, "%I:%M %p");
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "style1/auto_expand");
+       elm_object_text_set(btn, "Launch Timepicker 12hr popup");
+       elm_object_part_content_set(layout, "picker2", btn);
+       evas_object_show(datetime);
+       evas_object_smart_callback_add(btn, "clicked", _launch_timepicker_popup, datetime);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+       elm_datetime_format_set(datetime, "%H:%M");
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "style1/auto_expand");
+       elm_object_text_set(btn, "Launch Timepicker 24hr popup");
+       elm_object_part_content_set(layout, "picker3", btn);
+       evas_object_show(datetime);
+       evas_object_smart_callback_add(btn, "clicked", _launch_timepicker_popup, datetime);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _set_clicked_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,start", _edit_start_cb, NULL);
+       evas_object_smart_callback_add(datetime, "edit,end", _edit_end_cb, NULL);
+
+       return layout;
+}
+
+static void _pickerpopup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Datetime Picker popup Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_pickerpopup_styles(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+/* Custom Datetime picker Popup implementation Starts*/
+static void _custom_picker_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ea_object_event_callback_del(obj, EA_CALLBACK_BACK, _custom_picker_back_cb);
+       if (obj == datetime_popup) {
+               evas_object_del(datetime_popup);
+               datetime_popup = NULL;
+       }
+       else if (obj == date_popup) {
+               evas_object_del(date_popup);
+               date_popup = NULL;
+       }
+       else if (obj == time_popup) {
+               evas_object_del(time_popup);
+               time_popup = NULL;
+       }
+}
+
+static void _win_rotation_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       int rotation = -1;
+       Evas_Object *layout;
+       Evas_Object *window = obj;
+       if (datetime_popup) {
+               layout = elm_object_content_get(datetime_popup);
+               rotation = elm_win_rotation_get(window);
+               if (layout) {
+                       if (rotation == 90 || rotation == 270)
+                               elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_layout_landscape");
+                       else
+                               elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_layout");
+               }
+       }
+}
+
+static void _datetime_picker_value_set_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       char *date, *time;
+       char buf[1024];
+       Evas_Object* btn = data;
+       date = elm_object_text_get(elm_object_part_content_get(obj, "date.btn"));
+       time = elm_object_text_get(elm_object_part_content_get(obj, "time.btn"));
+       snprintf(buf, sizeof(buf), "%s  %s", date, time);
+       elm_object_text_set(btn, buf);
+}
+
+static void _date_picker_value_set_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       char *date;
+       Evas_Object* btn = data;
+       date = elm_object_text_get(elm_object_part_content_get(obj, "date.btn"));
+       elm_object_text_set(btn, date);
+}
+
+static void _time_picker_value_set_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       char *time;
+       Evas_Object* btn = data;
+       time = elm_object_text_get(elm_object_part_content_get(obj, "time.btn"));
+       elm_object_text_set(btn, time);
+}
+
+static void _datetime_date_picker_popup_layout_get(void *data, Evas_Object *obj, void *event_info)
+{
+       datetime_date_picker_layout = (Evas_Object*)event_info;
+}
+
+static void _datetime_time_picker_popup_layout_get(void *data, Evas_Object *obj, void *event_info)
+{
+       datetime_time_picker_layout = (Evas_Object*)event_info;
+}
+
+static void _datepicker_popup_layout_get(void *data, Evas_Object *obj, void *event_info)
+{
+       date_picker_layout = (Evas_Object*)event_info;
+}
+
+static void _timepicker_popup_layout_get(void *data, Evas_Object *obj, void *event_info)
+{
+       time_picker_layout = (Evas_Object*)event_info;
+}
+
+static void
+_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (data == datetime_popup) {
+               evas_object_del(datetime_popup);
+               datetime_popup = NULL;
+       }
+       else if (data == date_popup) {
+               evas_object_del(date_popup);
+               date_popup = NULL;
+       }
+       else if (data == time_popup) {
+               evas_object_del(time_popup);
+               time_popup = NULL;
+       }
+}
+
+static void
+_popup_set_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_smart_callback_call(data, "custom,picker,value,set", NULL);
+       if (datetime_popup) {
+               evas_object_del(datetime_popup);
+               datetime_popup = NULL;
+       }
+
+       if (date_popup) {
+               evas_object_del(date_popup);
+               date_popup = NULL;
+       }
+
+       if (time_popup) {
+               evas_object_del(time_popup);
+               time_popup = NULL;
+       }
+}
+
+static Evas_Object* _custom_datetime_picker_popup_add(Evas_Object* parent, Evas_Object* datetime)
+{
+       Evas_Object *popup = NULL;
+       Evas_Object *set_btn, *cancel_btn;
+       if (is_normal_popup)
+               popup = elm_popup_add(parent);
+       else
+               popup = ea_center_popup_add(parent);
+       cancel_btn = elm_button_add(popup);
+       elm_object_style_set(cancel_btn, "popup");
+       elm_object_text_set(cancel_btn, "Cancel");
+       elm_object_part_content_set(popup, "button1", cancel_btn);
+       evas_object_smart_callback_add(cancel_btn, "clicked", _popup_cancel_btn_clicked_cb, popup);
+
+       set_btn = elm_button_add(popup);
+       elm_object_style_set(set_btn, "popup");
+       elm_object_text_set(set_btn,"Set");
+       elm_object_part_content_set(popup, "button2", set_btn);
+       evas_object_smart_callback_add(set_btn, "clicked", _popup_set_btn_clicked_cb, datetime);
+       return popup;
+}
+
+static void _launch_custom_datetimepicker_popup(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *layout, *scroller, *layout1, *datetime;
+       datetime = (Evas_Object *)data;
+       int rotation = -1;
+
+       datetime_popup = _custom_datetime_picker_popup_add(naviframe, datetime);
+       if (is_normal_popup)
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", NULL);
+       else
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", ea_center_popup_win_get(datetime_popup));
+
+       evas_object_smart_callback_call(data, "datetime,picker,layout,create", NULL);
+       elm_object_part_text_set(datetime_popup, "title,text", "DateTime");
+
+       layout1 = elm_layout_add(datetime_popup);
+       rotation = elm_win_rotation_get(win);
+       if (rotation == 90 || rotation == 270)
+               elm_layout_file_set(layout1, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_layout_landscape");
+       else
+               elm_layout_file_set(layout1, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_layout");
+       evas_object_size_hint_weight_set(layout1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       scroller = elm_scroller_add(layout1);
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       layout = elm_layout_add(datetime_popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_pickerpopup_layout");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "datepicker", datetime_date_picker_layout);
+       elm_object_part_content_set(layout, "timepicker", datetime_time_picker_layout);
+       evas_object_show(layout);
+       elm_object_content_set(scroller, layout);
+
+       elm_object_part_content_set(layout1, "scroller", scroller);
+       elm_object_content_set(datetime_popup, layout1);
+       evas_object_show(datetime_popup);
+
+       ea_object_event_callback_add(datetime_popup, EA_CALLBACK_BACK, _custom_picker_back_cb, NULL);
+}
+
+static void _launch_custom_date_picker_popup(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *datetime;
+
+       datetime = (Evas_Object *)data;
+       date_popup = _custom_datetime_picker_popup_add(naviframe, datetime);
+       if (is_normal_popup)
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", NULL);
+       else
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", ea_center_popup_win_get(date_popup));
+
+       evas_object_smart_callback_call(data, "datetime,picker,layout,create", NULL);
+       elm_object_part_text_set(date_popup, "title,text", "Date");
+       elm_object_content_set(date_popup, date_picker_layout);
+
+       evas_object_show(date_popup);
+       ea_object_event_callback_add(date_popup, EA_CALLBACK_BACK, _custom_picker_back_cb, NULL);
+}
+
+static void _launch_custom_time_picker_popup(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *datetime;
+
+       datetime = (Evas_Object *)data;
+       time_popup = _custom_datetime_picker_popup_add(naviframe, datetime);
+
+       if (is_normal_popup)
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", NULL);
+       else
+               evas_object_smart_callback_call(datetime, "custom,picker,win,get", ea_center_popup_win_get(time_popup));
+
+       evas_object_smart_callback_call(data, "datetime,picker,layout,create", NULL);
+       elm_object_part_text_set(time_popup, "title,text", "Time");
+       elm_object_content_set(time_popup, time_picker_layout);
+
+       evas_object_show(time_popup);
+       ea_object_event_callback_add(time_popup, EA_CALLBACK_BACK, _custom_picker_back_cb, NULL);
+}
+
+static Evas_Object *_create_custom_pickerpopup_styles(struct appdata *ad)
+{
+       Evas_Object *layout, *btn1, *btn2, *btn3, *datetime;
+       struct tm set_time;
+       char *date;
+       char *time;
+       char buf[1024];
+       win = ad->win_main;
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/datetime_custom_pickerpopup_styles");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+
+       btn1 = elm_button_add(layout);
+       elm_object_style_set(btn1, "style1/auto_expand");
+       elm_object_part_content_set(layout, "picker1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _launch_custom_datetimepicker_popup, datetime);
+
+       evas_object_smart_callback_add(datetime, "picker,date,layout,get", _datetime_date_picker_popup_layout_get, NULL);
+       evas_object_smart_callback_add(datetime, "picker,time,layout,get", _datetime_time_picker_popup_layout_get, NULL);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _datetime_picker_value_set_cb, btn1);
+
+       elm_datetime_format_set(datetime, "%d/%b/%Y %I:%M %p");
+       evas_object_show(datetime);
+
+       date = elm_object_text_get(elm_object_part_content_get(datetime, "date.btn"));
+       time = elm_object_text_get(elm_object_part_content_get(datetime, "time.btn"));
+       snprintf(buf, sizeof(buf), "%s  %s", date, time);
+       elm_object_text_set(btn1, buf);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+
+       btn2 = elm_button_add(layout);
+       elm_object_style_set(btn2, "style1/auto_expand");
+       elm_object_part_content_set(layout, "picker2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _launch_custom_date_picker_popup, datetime);
+
+       evas_object_smart_callback_add(datetime, "picker,date,layout,get", _datepicker_popup_layout_get, NULL);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _date_picker_value_set_cb, btn2);
+
+       elm_datetime_format_set(datetime, "%d/%b/%Y");
+       evas_object_show(datetime);
+
+
+       date = elm_object_text_get(elm_object_part_content_get(datetime, "date.btn"));
+       elm_object_text_set(btn2, date);
+
+       datetime = elm_datetime_add(layout);
+       elm_object_style_set(datetime, "pickerstyle");
+
+       btn3 = elm_button_add(layout);
+       elm_object_style_set(btn3, "style1/auto_expand");
+       elm_object_part_content_set(layout, "picker3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _launch_custom_time_picker_popup, datetime);
+
+       evas_object_smart_callback_add(datetime, "picker,time,layout,get", _timepicker_popup_layout_get, NULL);
+       evas_object_smart_callback_add(datetime, "picker,value,set", _time_picker_value_set_cb, btn3);
+
+       elm_datetime_format_set(datetime, "%I:%M %p");
+       evas_object_show(datetime);
+
+
+       time = elm_object_text_get(elm_object_part_content_get(datetime, "time.btn"));
+       elm_object_text_set(btn3, time);
+       evas_object_smart_callback_add(win, "rotation,changed", _win_rotation_changed, NULL);
+       return layout;
+}
+
+static void _custom_picker_normal_popup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+       is_normal_popup = EINA_TRUE;
+       naviframe = ad->nf;
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Datetime Custom Picker Normal popup Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_custom_pickerpopup_styles(ad);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static void _custom_picker_center_popup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+
+       struct appdata *ad = (struct appdata *)data;
+       if (!ad) return;
+       is_normal_popup = EINA_FALSE;
+       naviframe = ad->nf;
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Datetime Custom Picker Center popup Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_custom_pickerpopup_styles(ad);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       int idx = 0;
+
+       if (!ad) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+void datetime_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (!ad) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Datetime"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/dialoguegroup.c b/live.viewer/dbox.app/src/dialoguegroup.c
new file mode 100644 (file)
index 0000000..2225559
--- /dev/null
@@ -0,0 +1,516 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "dialoguegroup.h"
+
+#define HIGHLIGHT_TIMER 0.1
+#define UNHIGHLIGHT_TIMER 0.01
+static Ecore_Timer *highlight_timer;
+static Eina_List *unhighlight_lists;
+static Eina_Bool key_down = EINA_FALSE;
+
+/*********************************************************
+  DialogueGroup
+ ********************************************************/
+static void dialogue_group_1(void *data, Evas_Object * obj, void *event_info);
+static void _clicked(void *data);
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (it == NULL) return;
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static struct _menu_item _menu_its[] = {
+       {"Dialogue Group - 1", dialogue_group_1},
+       //{"Dialogue Group - 2", dialogue_group_2},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static Eina_Bool _unhighlight_timer(void *data)
+{
+       Evas_Object *layout;
+       highlight_timer = NULL;
+       EINA_LIST_FREE(unhighlight_lists, layout) {
+               elm_object_signal_emit(layout, "elm,state,unselected", "elm");
+       }
+       if (data) _clicked(data);
+       return EINA_FALSE;
+}
+
+static Eina_Bool _highlight_timer(void *data)
+{
+       highlight_timer = NULL;
+       Evas_Object *layout = (Evas_Object *)data;
+       elm_object_signal_emit(layout, "elm,state,selected", "elm");
+       return EINA_FALSE;
+}
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       /* change the background to default and free expand data*/
+       if (highlight_timer) ecore_timer_del(highlight_timer);
+       highlight_timer = NULL;
+       unhighlight_lists = eina_list_free(unhighlight_lists);
+       return EINA_TRUE;
+}
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+///////////////////////// Codes for making Editfield : START
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+    const char *txt = NULL;
+       txt = elm_object_part_text_get(data, "elm.text");
+       if (!txt) return NULL;
+
+       return strdup(_(txt));
+}
+
+static char *_access_main_sub_info_cb(void *data, Evas_Object *obj)
+{
+       Eina_Strbuf *buf;
+    const char *txt = NULL;
+    char *ret = NULL;
+
+       buf = eina_strbuf_new();
+
+       txt = elm_object_part_text_get(data, "elm.text.1");
+       eina_strbuf_append(buf, _(txt));
+
+       txt = elm_object_part_text_get(data, "elm.text.2");
+       eina_strbuf_append_printf(buf, ", %s", _(txt));
+
+       ret = eina_strbuf_string_steal(buf);
+       eina_strbuf_free(buf);
+       return ret;
+}
+
+static void _access_activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item)
+{
+       Eina_Bool state;
+
+       state = elm_check_state_get(data);
+       elm_check_state_set(data, !state);
+}
+
+static Evas_Object *_singleline_editfield_add(Evas_Object *parent) // For single lined editfield without top title.
+{
+       Evas_Object *layout, *entry;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "dialogue/editfield", "default"); // Default editfield layout style without top title.
+
+       entry = ea_editfield_add(parent, EA_EDITFIELD_SCROLL_SINGLELINE);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_EDIT");
+       elm_object_part_content_set(layout, "elm.icon.entry", entry);
+
+       return layout;
+}
+
+static Evas_Object *_singleline_editfield_with_title_add(Evas_Object *parent) // For single lined editfield with top title.
+{
+       Evas_Object *layout, *entry, *ao;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "dialogue/editfield/title", "default"); // Editfield Style with top title.
+
+       entry = ea_editfield_add(parent, EA_EDITFIELD_SCROLL_SINGLELINE);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_EDIT");
+       elm_object_part_content_set(layout, "elm.icon.entry", entry);
+
+       // Access for layout
+       ao = elm_object_part_access_register(layout, "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+       elm_object_focus_custom_chain_append(layout, entry, NULL);
+
+       return layout;
+}
+
+static Evas_Object *_multiline_editfield_with_title_add(Evas_Object *parent) // For multi lined editfield with top title.
+{
+       Evas_Object *layout, *entry, *ao;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "dialogue/editfield/title", "default"); // Default editfield layout style without top title.
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       entry = ea_editfield_add(parent, EA_EDITFIELD_MULTILINE);
+       ea_editfield_clear_button_disabled_set(entry, EINA_TRUE);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_EDIT");
+       elm_object_part_content_set(layout, "elm.icon.entry", entry);
+
+       // Access for layout
+       ao = elm_object_part_access_register(layout, "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+       elm_object_focus_custom_chain_append(layout, entry, NULL);
+
+       return layout;
+}
+///////////////////////// Codes for making Editfield : END
+static Evas_Object *_gl_minus_btn_get(Evas_Object *obj)
+{
+       Evas_Object * icon = elm_button_add(obj);
+       elm_object_style_set(icon, "icon_minus");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static void _clicked(void *data)
+{
+       printf("\n clicked event \n");
+}
+
+static void _up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout = (Evas_Object *) data;
+       Evas_Event_Mouse_Up *ev = (Evas_Event_Mouse_Up *)event_info;
+       if (highlight_timer) {
+               ecore_timer_del(highlight_timer);
+               elm_object_signal_emit(layout, "elm,state,selected", "elm");
+       }
+       if (ev && !(ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)) {
+               highlight_timer = ecore_timer_add(UNHIGHLIGHT_TIMER, _unhighlight_timer, data);
+               unhighlight_lists = eina_list_append(unhighlight_lists, layout);
+       }
+}
+
+static void _move(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       /*when move event is called user intends to scroll hence unhighlight*/
+       Evas_Event_Mouse_Move *ev = (Evas_Event_Mouse_Move *)event_info;
+       Evas_Object *layout = (Evas_Object *) data;
+       if (ev && ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) {
+               if (highlight_timer) {
+                       ecore_timer_del(highlight_timer);
+                       highlight_timer = NULL;
+               }
+               elm_object_signal_emit(layout, "elm,state,unselected", "elm");
+               return;
+       }
+}
+
+static void _down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       /*send select signal on mouse down to highlight layout*/
+       Evas_Object *layout = (Evas_Object *) data;
+       Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info;
+       if (ev && ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD)
+               return;
+       if (highlight_timer) ecore_timer_del(highlight_timer);
+       highlight_timer = ecore_timer_add(HIGHLIGHT_TIMER, _highlight_timer, layout);
+}
+
+static void _key_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Key_Down *ev = event_info;
+       if (!ev) return;
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
+
+       if ((!strcmp(ev->keyname, "Return")) ||
+                       (!strcmp(ev->keyname, "KP_Enter")) ||
+                       (!strcmp(ev->keyname, "space")))
+       {
+               if (!key_down && obj)
+               {
+                       printf("item_highlighted\n");
+                       key_down = EINA_TRUE;
+                       Evas_Object *layout = (Evas_Object *)obj;
+                       elm_object_signal_emit(layout, "elm,state,selected", "elm");
+               }
+               printf("Layout(%p) is downed\n", obj);
+       }
+}
+
+static void _key_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Key_Up *ev = event_info;
+       if (!ev) return;
+       if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
+
+       printf("Layout(%p) is uped \n", data);
+       if ((!strcmp(ev->keyname, "Return")) ||
+                       (!strcmp(ev->keyname, "KP_Enter")) ||
+                       (!strcmp(ev->keyname, "space")))
+       {
+               if (key_down && data)
+               {
+                       printf("item_highlighted\n");
+                       key_down = EINA_FALSE;
+                       Evas_Object *layout = (Evas_Object *)data;
+                       highlight_timer = ecore_timer_add(UNHIGHLIGHT_TIMER, _unhighlight_timer, layout);
+                       unhighlight_lists = eina_list_append(unhighlight_lists, layout);
+               }
+       }
+}
+
+static void dialogue_group_1(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *ao;
+       Evas_Object *box;
+       Evas_Object *scroller;
+       Evas_Object *layout[12];
+       Evas_Object *check[3];
+       Elm_Object_Item *navi_it;
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_object_style_set(scroller, "dialogue");
+
+       box = elm_box_add(scroller);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.0);
+       elm_object_content_set(scroller, box);
+       evas_object_show(box);
+
+       layout[0] = elm_layout_add(box);
+       elm_layout_theme_set(layout[0], "layout", "dialogue", "separator");
+       evas_object_size_hint_weight_set(layout[0], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[0], EVAS_HINT_FILL, 0.0);
+       elm_box_pack_end(box, layout[0]);
+       evas_object_show(layout[0]);
+
+       layout[1] = elm_layout_add(box);
+       elm_layout_theme_set(layout[1], "layout", "dialogue", "1text");
+       evas_object_size_hint_weight_set(layout[1], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[1], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[1], "elm.text", "List");
+       elm_box_pack_end(box, layout[1]);
+       evas_object_show(layout[1]);
+       evas_object_event_callback_add(layout[1], EVAS_CALLBACK_MOUSE_DOWN, _down, layout[1]);
+       evas_object_event_callback_add(layout[1], EVAS_CALLBACK_MOUSE_MOVE, _move, layout[1]);
+       evas_object_event_callback_add(layout[1], EVAS_CALLBACK_MOUSE_UP, _up, layout[1]);
+       elm_object_signal_emit(layout[1], "elm,state,top", "");
+
+       evas_object_event_callback_add(layout[1], EVAS_CALLBACK_KEY_DOWN, _key_down, NULL);
+       evas_object_event_callback_add(layout[1], EVAS_CALLBACK_KEY_UP, _key_up, layout[1]);
+
+       ao = elm_object_part_access_register(layout[1], "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[1]);
+
+       layout[2] = elm_layout_add(box);
+       elm_layout_theme_set(layout[2], "layout", "dialogue", "1text.1icon");
+       evas_object_size_hint_weight_set(layout[2], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[2], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[2], "elm.text", "List");
+       elm_box_pack_end(box, layout[2]);
+       evas_object_show(layout[2]);
+       evas_object_event_callback_add(layout[2], EVAS_CALLBACK_MOUSE_DOWN, _down, layout[2]);
+       evas_object_event_callback_add(layout[2], EVAS_CALLBACK_MOUSE_MOVE, _move, layout[2]);
+       evas_object_event_callback_add(layout[2], EVAS_CALLBACK_MOUSE_UP, _up, layout[2]);
+       check[0] = elm_check_add(layout[2]);
+       elm_object_style_set(check[0], "on&off");
+       elm_object_part_content_set(layout[2], "elm.icon", check[0]);
+       evas_object_propagate_events_set(check[0], EINA_FALSE);
+       elm_object_signal_emit(layout[2], "elm,state,bottom", "");
+
+       evas_object_event_callback_add(layout[2], EVAS_CALLBACK_KEY_DOWN, _key_down, NULL);
+       evas_object_event_callback_add(layout[2], EVAS_CALLBACK_KEY_UP, _key_up, layout[2]);
+
+       ao = elm_object_part_access_register(layout[2], "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[2]);
+       elm_access_activate_cb_set(ao, _access_activate_cb, check[0]);
+
+       layout[3] = elm_layout_add(box);
+       elm_layout_theme_set(layout[3], "layout", "dialogue", "title");
+       evas_object_size_hint_weight_set(layout[3], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[3], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[3], "elm.text", "Title");
+       elm_box_pack_end(box, layout[3]);
+       evas_object_show(layout[3]);
+
+       ao = elm_access_object_register(layout[3], layout[3]);
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[3]);
+       elm_object_focus_custom_chain_append(layout[3], ao, NULL);
+
+       layout[4] = elm_layout_add(box);
+       elm_layout_theme_set(layout[4], "layout", "dialogue", "1text.1icon.2");
+       evas_object_size_hint_weight_set(layout[4], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[4], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[4], "elm.text", "List");
+       elm_box_pack_end(box, layout[4]);
+       evas_object_show(layout[4]);
+       evas_object_event_callback_add(layout[4], EVAS_CALLBACK_MOUSE_DOWN, _down, layout[4]);
+       evas_object_event_callback_add(layout[4], EVAS_CALLBACK_MOUSE_MOVE, _move, layout[4]);
+       evas_object_event_callback_add(layout[4], EVAS_CALLBACK_MOUSE_UP, _up, layout[4]);
+       check[1] = elm_check_add(layout[4]);
+       elm_object_part_content_set(layout[4], "elm.icon", check[1]);
+       elm_object_signal_emit(layout[4], "elm,state,top", "");
+
+       evas_object_event_callback_add(layout[4], EVAS_CALLBACK_KEY_DOWN, _key_down, NULL);
+       evas_object_event_callback_add(layout[4], EVAS_CALLBACK_KEY_UP, _key_up, layout[4]);
+
+       ao = elm_object_part_access_register(layout[4], "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[4]);
+       elm_access_activate_cb_set(ao, _access_activate_cb, check[1]);
+
+       layout[5] = elm_layout_add(box);
+       elm_layout_theme_set(layout[5], "layout", "dialogue", "1text.1icon.2");
+       evas_object_size_hint_weight_set(layout[5], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[5], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[5], "elm.text", "List-Disabled");
+       elm_box_pack_end(box, layout[5]);
+       evas_object_show(layout[5]);
+       check[2] = elm_check_add(layout[5]);
+       elm_object_part_content_set(layout[5], "elm.icon", check[2]);
+       /*Disable Item as shown below and do not connect any Mouse events, when
+        * enabling is required send "elm,state,enabled" signal and connect to mouse
+        * events
+        */
+       elm_object_disabled_set(check[2], EINA_TRUE);
+       elm_object_signal_emit(layout[5], "elm,state,disabled", "elm");
+       elm_object_signal_emit(layout[5], "elm,state,center", "");
+
+       ao = elm_object_part_access_register(layout[5], "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[5]);
+       elm_object_focus_custom_chain_append(layout[5], ao, NULL);
+
+       layout[6] = elm_layout_add(box);
+       elm_layout_theme_set(layout[6], "layout", "dialogue", "1icon");
+       evas_object_size_hint_weight_set(layout[6], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[6], EVAS_HINT_FILL, 0.0);
+       elm_box_pack_end(box, layout[6]);
+       evas_object_show(layout[6]);
+       Evas_Object *slider = elm_slider_add(layout[6]);
+       elm_slider_indicator_show_set(slider, EINA_TRUE);
+       elm_slider_min_max_set(slider, 0, 9);
+       elm_slider_indicator_format_set(slider, "%1.0f");
+       elm_slider_value_set(slider, 7);
+       elm_object_part_content_set(layout[6], "elm.icon", slider);
+       elm_object_signal_emit(layout[6], "elm,state,center", "");
+
+       layout[7] = elm_layout_add(box);
+       elm_layout_theme_set(layout[7], "layout", "dialogue", "2text.3");
+       evas_object_size_hint_weight_set(layout[7], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[7], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[7], "elm.text.1", "Maintext");
+       elm_object_part_text_set(layout[7], "elm.text.2", "Subtext");
+       evas_object_event_callback_add(layout[7], EVAS_CALLBACK_MOUSE_DOWN, _down, layout[7]);
+       evas_object_event_callback_add(layout[7], EVAS_CALLBACK_MOUSE_MOVE, _move, layout[7]);
+       evas_object_event_callback_add(layout[7], EVAS_CALLBACK_MOUSE_UP, _up, layout[7]);
+       elm_object_part_content_set(layout[7], "elm.icon.edit", _gl_minus_btn_get(layout[7]));
+       elm_box_pack_end(box, layout[7]);
+       evas_object_show(layout[7]);
+       elm_object_signal_emit(layout[7], "elm,state,bottom", "");
+       elm_object_signal_emit(layout[7], "elm,state,edit,enabled", "");
+
+       evas_object_event_callback_add(layout[7], EVAS_CALLBACK_KEY_DOWN, _key_down, NULL);
+       evas_object_event_callback_add(layout[7], EVAS_CALLBACK_KEY_UP, _key_up, layout[7]);
+
+       ao = elm_object_part_access_register(layout[7], "bg_dialogue");
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_main_sub_info_cb, layout[7]);
+
+       layout[8] = elm_layout_add(box);
+       elm_layout_theme_set(layout[8], "layout", "dialogue", "title");
+       evas_object_size_hint_weight_set(layout[8], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[8], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[8], "elm.text", "Title");
+       elm_box_pack_end(box, layout[8]);
+       evas_object_show(layout[8]);
+
+       ao = elm_access_object_register(layout[8], layout[8]);
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout[8]);
+       elm_object_focus_custom_chain_append(layout[8], ao, NULL);
+
+       layout[9] = _singleline_editfield_with_title_add(box);
+       evas_object_size_hint_weight_set(layout[9], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[9], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[9], "elm.text", _("Title Area"));
+       elm_box_pack_end(box, layout[9]);
+       evas_object_show(layout[9]);
+       elm_object_signal_emit(layout[9], "elm,state,top", "");
+
+       layout[10] = _multiline_editfield_with_title_add(box);
+       evas_object_size_hint_weight_set(layout[10], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[10], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[10], "elm.text", _("Title Area"));
+       elm_box_pack_end(box, layout[10]);
+       evas_object_show(layout[10]);
+       elm_object_signal_emit(layout[10], "elm,state,center", "");
+
+       layout[11] = _singleline_editfield_add(box);
+       evas_object_size_hint_weight_set(layout[11], EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(layout[11], EVAS_HINT_FILL, 0.0);
+       elm_object_part_text_set(layout[11], "elm.text", _("Title Area"));
+       elm_box_pack_end(box, layout[11]);
+       evas_object_show(layout[11]);
+       elm_object_signal_emit(layout[11], "elm,state,bottom", "");
+
+       elm_object_focus_allow_set(layout[1], EINA_TRUE);
+       elm_object_focus_allow_set(layout[2], EINA_TRUE);
+       elm_object_focus_allow_set(layout[4], EINA_TRUE);
+       elm_object_focus_allow_set(layout[6], EINA_TRUE);
+       elm_object_focus_allow_set(layout[7], EINA_TRUE);
+       elm_object_focus_allow_set(layout[9], EINA_TRUE);
+       elm_object_focus_allow_set(layout[10], EINA_TRUE);
+       elm_object_focus_allow_set(layout[11], EINA_TRUE);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("Dialoguegroup-1"), NULL, NULL, scroller, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+void dialoguegroup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("DialogueGroup"), NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/dnd.c b/live.viewer/dbox.app/src/dnd.c
new file mode 100644 (file)
index 0000000..fc39de9
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "dnd.h"
+#include "dnd_layout_genlist.h"
+#include "dnd_genlist_gengrid.h"
+#include "dnd_gengrid_box.h"
+
+static struct _menu_item menu_its[] = {
+       { "Layout-Genlist", dnd_layout_genlist_cb },
+       { "Genlist-Gengrid (Multi-Select)", dnd_genlist_gengrid_cb },
+       { "Gengrid-Box", dnd_gengrid_box_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu_its[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void dnd_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Drag&Drop"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/dnd_gengrid_box.c b/live.viewer/dbox.app/src/dnd_gengrid_box.c
new file mode 100644 (file)
index 0000000..c8df269
--- /dev/null
@@ -0,0 +1,434 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define SWALLOW "box_swallow"
+
+#define ANIM_TIME 0.3
+#define DRAG_TIMEOUT 0.5
+
+Evas_Object *gengrid, *layout, *box;
+Elm_Gengrid_Item_Class *ggic;
+Ecore_Timer *tm;
+
+typedef struct _Item_Data
+{
+       const char *path;
+       int highlighted;
+       Elm_Object_Item *item;
+       Eina_Bool checked;
+       Eina_Bool stared;
+} Item_Data;
+
+static void
+_del(void *data, Evas_Object *obj)
+{
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char *
+_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       return strdup(id->path);
+}
+
+static Evas_Object *
+_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, id->path, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////// for dnd :: START /////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////// FOR GENGRID //////////////////////////////////
+static Eina_Bool
+_gg_drop_cb(void *data, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *sel, int xposret, int yposret)
+{
+       if (!sel->data) return EINA_FALSE;
+
+       int len = sel->len; /* Should check & use length of returned data */
+       char *path = NULL;
+       if (len)
+               path = malloc(len + 1);
+       if (!path) return EINA_FALSE;
+       strncpy(path, sel->data, len);
+       path[len] = '\0';
+       char *f = strstr(path, "file://");
+       if (!f)
+               f = path;
+       else
+               f = f + 7;
+       if (f)
+       {
+               char *nl = strstr(f, "\n");
+               if (nl)
+                       *nl = '\0';
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->path = eina_stringshare_add(f);
+               if (it)
+                       it = elm_gengrid_item_insert_after(obj, ggic, id, it, NULL, NULL);
+               else
+                       it = elm_gengrid_item_append(obj, ggic, id, NULL, NULL);
+               id->item = it;
+       }
+       free(path);
+
+       return EINA_TRUE;
+}
+
+static Elm_Object_Item *
+_gg_item_get_cb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, Evas_Coord *yposret)
+{
+       /* This function returns pointer to item under (x,y) coords */
+       Elm_Object_Item *item;
+       item = elm_gengrid_at_xy_item_get(obj, x, y, xposret, yposret);
+       return item;
+}
+
+static Evas_Object *
+_gg_create_icon(void *data, Evas_Object *win, int *xoff, int *yoff)
+{
+       Evas_Object *icon = NULL;
+       Evas_Object *o = elm_object_item_part_content_get(data, "elm.swallow.icon");
+
+       if (o)
+       {
+               int xm, ym, w = 150, h = 150;
+               const char *f, *g;
+               elm_image_file_get(o, &f, &g);
+               evas_pointer_canvas_xy_get(evas_object_evas_get(o), &xm, &ym);
+
+               icon = elm_icon_add(win);
+               elm_image_file_set(icon, f, g);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               if (xoff) *xoff = xm - w/2;
+               if (yoff) *yoff = ym - h/2;
+               evas_object_resize(icon, w, h);
+       }
+
+       return icon;
+}
+
+static void
+_gg_drag_done(void *data, Evas_Object *obj, Eina_Bool accepted)
+{
+       printf("%s %d data=<%p> doaccept=<%d>\n",
+                       __func__, __LINE__, data, accepted);
+
+       if (data)
+               eina_list_free(data);
+}
+
+static const char *
+_gg_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)
+{
+       const char *drag_data = NULL;
+
+       /* Drag only current pressed item */
+       if (it)
+       {
+               const char *t = NULL;
+
+               Item_Data *id = elm_object_item_data_get(it);
+               if (id)
+               {
+                       t = id->path;
+                       /* Compose string to send */
+                       drag_data = malloc(strlen(t) + 9);
+               }
+               if (!drag_data) return NULL;
+               strcpy((char *)drag_data, "file://");
+               strcat((char *)drag_data, t);
+               strcat((char *)drag_data, "\n");
+               printf("%s %d: sending: <%s>\n", __func__, __LINE__, drag_data);
+       }
+
+       return drag_data;
+}
+
+static Eina_Bool
+_gg_dnd_default_anim_data_get_cb(Evas_Object *obj, Elm_Object_Item *it, Elm_Drag_User_Info *info)
+{
+       /* This called before starting to drag, mouse-down was on it */
+       info->format = ELM_SEL_FORMAT_IMAGE;
+       info->icons = NULL;
+       info->createicon = _gg_create_icon;
+       info->createdata = it;
+       info->dragdone = _gg_drag_done;
+
+       /* Now, collect data to send for drop from current pressed item */
+       info->data = _gg_get_drag_data(obj, it, (Eina_List **)&info->donecbdata);
+       info->acceptdata = info->donecbdata;
+
+       if (info->data)
+               return EINA_TRUE;
+       else
+               return EINA_FALSE;
+}
+
+//////////////////// FOR BOX   //////////////////////////////////
+static Evas_Object *
+_box_item_createicon(void *data, Evas_Object *win, int *xoff, int *yoff)
+{
+       Evas_Object *icon = NULL;
+       Evas_Object *obj = data;
+
+       if (obj)
+       {
+               const char *f, *g;
+               elm_image_file_get(obj, &f, &g);
+               icon = elm_image_add(win);
+               elm_image_file_set(icon, f, g);
+               Evas_Coord x, y, w = 150, h = 150;
+               evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
+               if (xoff) *xoff = x - w/2;
+               if (yoff) *yoff = y - h/2;
+               evas_object_resize(icon, w, h);
+       }
+
+       return icon;
+}
+
+static Eina_Bool
+_box_item_long_press_cb(void *data)
+{
+       Evas_Object *obj = data;
+
+       tm = NULL;
+       if (obj)
+       {
+               const char *f;
+               char dd[PATH_MAX];
+
+               elm_image_file_get(obj, &f, NULL);
+               snprintf(dd, sizeof(dd), "file://%s\n", f);
+               printf("%s %d: sending <%s>\n", __func__, __LINE__, dd);
+
+               /* Start dragging */
+               elm_drag_start(obj, ELM_SEL_FORMAT_IMAGE,
+                               dd, ELM_XDND_ACTION_COPY,
+                               _box_item_createicon, obj,
+                               NULL, NULL,
+                               NULL, NULL,
+                               NULL, NULL);
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_box_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       if (tm)
+               ecore_timer_del(tm);
+       tm = ecore_timer_add(DRAG_TIMEOUT, _box_item_long_press_cb, obj);
+}
+
+static void
+_box_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       if (tm)
+       {
+               ecore_timer_del(tm);
+               tm = NULL;
+       }
+}
+
+static Eina_Bool
+_box_drop_cb(void *data, Evas_Object *obj, Elm_Selection_Data *sel)
+{
+       Evas_Object *box = data;
+       char *path = NULL;
+       if (!sel || !sel->data) return EINA_FALSE;
+
+       /* Should check & use length of returned data */
+       int len = sel->len;
+       if (len)
+               path = malloc(len + 1);
+       if (!path) return EINA_FALSE;
+       strncpy(path, sel->data, len);
+       path[len] = '\0';
+
+       char *f = strstr(path, "file://");
+       if (!f)
+               f = path;
+       else
+               f = f + 7;
+       if (f)
+       {
+               char *nl = strstr(f, "\n");
+               if (nl)
+                       *nl = '\0';
+               /* remove items */
+               Eina_List *children = elm_box_children_get(box);
+               if (eina_list_count(children) >= 4)
+                       elm_box_clear(box);
+               eina_list_free(children);
+
+               /* add dropped item */
+               Evas_Object *item = elm_image_add(layout);
+               elm_image_file_set(item, f, NULL);
+               evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_min_set(item, 150, 150);
+               evas_object_size_hint_max_set(item, 150, 150);
+               evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _box_item_mouse_down_cb, box);
+               evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_UP, _box_item_mouse_up_cb, box);
+               evas_object_show(item);
+               elm_box_pack_end(box, item);
+       }
+       free(path);
+
+       return EINA_TRUE;
+}
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////// for dnd :: END /////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+static void
+_create_gengrid(void *data)
+{
+       struct appdata *ad = data;
+       Elm_Object_Item *item;
+       char buf[PATH_MAX];
+       int idx;
+
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_gengrid_item_size_set(gengrid, elm_config_scale_get() * 150, elm_config_scale_get() * 150);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+       elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       elm_gengrid_multi_select_set(gengrid, EINA_FALSE);
+
+       elm_drop_item_container_add(gengrid, ELM_SEL_FORMAT_IMAGE, _gg_item_get_cb,
+                       NULL, NULL, NULL, NULL, NULL, NULL, _gg_drop_cb, NULL);
+       elm_drag_item_container_add(gengrid, ANIM_TIME, DRAG_TIMEOUT,
+                       _gg_item_get_cb, _gg_dnd_default_anim_data_get_cb);
+
+       ggic = elm_gengrid_item_class_new();
+       ggic->item_style = "default";
+       ggic->func.text_get = _text_get;
+       ggic->func.content_get = _content_get;
+       ggic->func.del = _del;
+
+       for (idx = 0; idx < 20; idx++)
+       {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, idx + 1);
+               id->path = eina_stringshare_add(buf);
+               item = elm_gengrid_item_append(
+                               gengrid,
+                               ggic,
+                               id,
+                               NULL,
+                               NULL);
+               id->item = item;
+       }
+
+       evas_object_show(gengrid);
+}
+
+static void
+_create_box(void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *item;
+       char buf[PATH_MAX];
+       int idx;
+
+       tm = NULL;
+       layout = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "dnd/box_layout");
+
+       box = elm_box_add(ad->nf);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_object_part_content_set(layout, SWALLOW, box);
+
+       /* Add items to box */
+       for (idx = 0; idx < 1; idx ++)
+       {
+               item = elm_image_add(layout);
+               snprintf(buf, sizeof(buf), "%s/grid_image/5%d_raw.jpg", ICON_DIR, idx + 1);
+               elm_image_file_set(item, buf, NULL);
+               evas_object_size_hint_weight_set(item, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(item, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_min_set(item, 150, 150);
+               evas_object_size_hint_max_set(item, 150, 150);
+               evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_DOWN, _box_item_mouse_down_cb, box);
+               evas_object_event_callback_add(item, EVAS_CALLBACK_MOUSE_UP, _box_item_mouse_up_cb, box);
+               evas_object_show(item);
+               elm_box_pack_end(box, item);
+       }
+       evas_object_show(layout);
+
+       /* We should use layout as drop target */
+       elm_drop_target_add(layout, ELM_SEL_FORMAT_IMAGE,
+                       NULL, NULL, NULL, NULL, NULL, NULL, _box_drop_cb, box);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       ////// for dnd :: START /////////////
+       elm_drag_item_container_del(gengrid);
+       elm_drop_item_container_del(gengrid);
+       elm_drop_target_del(layout, ELM_SEL_FORMAT_IMAGE,
+                       NULL, NULL, NULL, NULL, NULL, NULL, _box_drop_cb, box);
+       //
+
+       elm_gengrid_item_class_free(ggic);
+
+       return EINA_TRUE;
+}
+
+void
+dnd_gengrid_box_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+       Evas_Object *box_main;
+
+       ad = (struct appdata *)data;
+
+       box_main = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       _create_gengrid(ad);
+       elm_box_pack_end(box_main, gengrid);
+
+       _create_box(ad);
+       elm_box_pack_end(box_main, layout);
+
+       evas_object_show(box_main);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("DND: Gengrid Box"), NULL, NULL, box_main, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/dnd_genlist_gengrid.c b/live.viewer/dbox.app/src/dnd_genlist_gengrid.c
new file mode 100644 (file)
index 0000000..450a8c6
--- /dev/null
@@ -0,0 +1,602 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+//////// for dnd :: START ///////
+#define DRAG_TIMEOUT 0.3
+#define ANIM_TIME 0.5
+//
+#define TIMER_VAL 0.1
+
+static Evas_Object *genlist, *gengrid, *box;
+static Elm_Genlist_Item_Class *glic;
+static Elm_Gengrid_Item_Class *ggic;
+
+typedef struct _Item_Data
+{
+       const char *path;
+       int highlighted;
+       Elm_Object_Item *item;
+       Eina_Bool checked;
+       Eina_Bool stared;
+} Item_Data;
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static int
+_item_ptr_cmp(const void *d1, const void *d2)
+{
+       return (d1 - d2);
+}
+
+static void
+_del(void *data, Evas_Object *obj)
+{
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char *
+_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       return strdup(id->path);
+}
+
+static Evas_Object *
+_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, id->path, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static void
+_sel(void *data, Evas_Object *obj, void *ei)
+{
+       // Do something when an item is selected.
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////// for dnd :: START /////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////// FOR GENLIST DRAGGING   //////////////////////////////////
+static Elm_Object_Item *
+_gl_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret)
+{
+       /* This function returns pointer to item under (x,y) coords */
+       printf("<%s> <%d> obj=<%p>\n", __func__, __LINE__, obj);
+       Elm_Object_Item *gli;
+       gli = elm_genlist_at_xy_item_get(obj, x, y, yposret);
+       if (gli)
+               printf("over <%s>, gli=<%p> yposret %i\n",
+                               elm_object_item_part_text_get(gli, "elm.text"), gli, *yposret);
+       else
+               printf("over none, yposret %i\n", *yposret);
+       return gli;
+}
+
+static Evas_Object *
+_gl_createicon(void *data, Evas_Object *win, Evas_Coord *xoff, Evas_Coord *yoff)
+{
+       printf("<%s> <%d>\n", __func__, __LINE__);
+       Evas_Object *icon = NULL;
+       Evas_Object *o = elm_object_item_part_content_get(data, "elm.icon");
+
+       if (o)
+       {
+               int xm, ym, w = 150, h = 150;
+               const char *f;
+               const char *g;
+               elm_image_file_get(o, &f, &g);
+               evas_pointer_canvas_xy_get(evas_object_evas_get(o), &xm, &ym);
+               if (xoff) *xoff = xm - (w/2);
+               if (yoff) *yoff = ym - (h/2);
+               icon = elm_icon_add(win);
+               elm_image_file_set(icon, f, g);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               if (xoff && yoff) evas_object_move(icon, *xoff, *yoff);
+               evas_object_resize(icon, w, h);
+       }
+
+       return icon;
+}
+static Eina_Bool
+_gl_timercb(void *data)
+{
+       if (!data) return ECORE_CALLBACK_CANCEL;
+
+       Eina_List  *items = elm_genlist_selected_items_get(data);
+       Eina_List *l;
+       Elm_Object_Item *it;
+       EINA_LIST_FOREACH(items, l, it)
+       {
+               elm_genlist_item_selected_set(it, EINA_FALSE);
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gl_dragdone(void *data, Evas_Object *obj, Eina_Bool doaccept)
+{
+       printf("<%s> <%d> data=<%p> doaccept=<%d>\n",
+                       __func__, __LINE__, data, doaccept);
+
+       if (data)
+               eina_list_free(data);
+
+       /* Unselect selected items */
+       ecore_timer_add(TIMER_VAL, _gl_timercb, obj);
+}
+
+static const char *
+_gl_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)
+{
+       /* Construct a string of dragged info, user frees returned string */
+       const char *drag_data = NULL;
+       printf("<%s> <%d>\n", __func__, __LINE__);
+
+       *items = eina_list_clone(elm_genlist_selected_items_get(obj));
+       if (it)
+       { /* Add the item mouse is over to the list if NOT selected */
+               void *p = eina_list_search_unsorted(*items, _item_ptr_cmp, it);
+               if (!p)
+                       *items = eina_list_append(*items, it);
+       }
+
+       if (*items)
+       { /* Now we can actually compose string to send and start dragging */
+               Eina_List *l;
+               unsigned  int len = 0;
+
+               EINA_LIST_FOREACH(*items, l, it)
+               {
+                       Item_Data *id = elm_object_item_data_get(it);
+                       if (id)
+                       {
+                               const char *path = id->path;
+                               printf("<%s> <%d> item: <%s>\n", __func__, __LINE__, path);
+                               if (path)
+                                       len += strlen(path);
+                       }
+               }
+
+               drag_data = malloc(len + eina_list_count(*items) + 8);
+               strcpy((char *)drag_data, "file://");
+
+               EINA_LIST_FOREACH(*items, l, it)
+               {
+                       Item_Data *id = elm_object_item_data_get(it);
+                       if (id)
+                       {
+                               const char *path = id->path;
+                               if (path)
+                               {
+                                       strcat((char *)drag_data, path);
+                                       strcat((char *)drag_data, "\n");
+                                       printf("%s %d: %s\n",__func__, __LINE__, path);
+                               }
+                       }
+               }
+               printf("<%s> <%d> Sending <%s> len: %d\n", __func__, __LINE__, drag_data, strlen(drag_data));
+       }
+
+       return drag_data;
+}
+
+static Eina_Bool
+_gl_dnd_default_anim_data_getcb(Evas_Object *obj, Elm_Object_Item *it, Elm_Drag_User_Info *info)
+{
+       /* This called before starting to drag, mouse-down was on it */
+       info->format = ELM_SEL_FORMAT_IMAGE;
+       info->createicon = _gl_createicon;
+       info->createdata = it;
+       info->icons = NULL;
+       info->dragdone = _gl_dragdone;
+
+       /* Now, collect data to send for drop from ALL selected items */
+       /* Save list pointer to remove items after drop and free list on done */
+       info->data = _gl_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);
+       printf("%s - data = %s\n", __FUNCTION__, info->data);
+       info->acceptdata = info->donecbdata;
+
+       if (info->data)
+               return EINA_TRUE;
+       else
+               return EINA_FALSE;
+}
+
+//////////////////// FOR GENGLIST DROPPING  //////////////////////////////////
+static Eina_Bool
+_gl_dropcb(void *data, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *ev, int xposret, int yposret)
+{
+       if (!ev->data)
+               return EINA_FALSE;
+
+       char *p = ev->data;
+       printf("<%s> <%d>: items: <%s>\n", __func__, __LINE__, p);
+       const char *s = strstr(p, "file://");
+       if (s) p = p + 7;
+       if (!p) return EINA_TRUE;
+
+       char *p2 = strchr(p, '\n');
+       while(p2)
+       {
+               *p2 = '\0';
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->path = strdup(p);
+               switch(yposret)
+               {
+                       case -1: /* Dropped on top-part of the it item */
+                               elm_genlist_item_insert_before(obj,
+                                               glic, id, NULL, it,
+                                               ELM_GENLIST_ITEM_NONE,
+                                               NULL, NULL);
+                               break;
+                       case 0: /* Dropped on center of the it item */
+                       case 1: /* Dropped on botton-part of the it item */
+                               if (!it) it = elm_genlist_last_item_get(obj);
+                               if (it)
+                               {
+                                       it = elm_genlist_item_insert_after(obj,
+                                                       glic, id, NULL, it,
+                                                       ELM_GENLIST_ITEM_NONE,
+                                                       NULL, NULL);
+                               }
+                               else
+                               {
+                                       it = elm_genlist_item_append(obj,
+                                                       glic, id, NULL,
+                                                       ELM_GENLIST_ITEM_NONE,
+                                                       NULL, NULL);
+                               }
+                               break;
+                       default:
+                               free(id);
+                               return EINA_FALSE;
+               }
+               p = p2 + 1;
+               p2 = strchr(p, '\n');
+       }
+
+       return EINA_TRUE;
+}
+
+//////////////////// FOR GENGRID DRAGGING  //////////////////////////////////
+static Elm_Object_Item *
+_gg_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret)
+{
+       /* This function returns pointer to item under (x,y) coords */
+       printf("<%s> <%d> obj=<%p>\n", __func__, __LINE__, obj);
+       Elm_Object_Item *item;
+       item = elm_gengrid_at_xy_item_get(obj, x, y, xposret, yposret);
+       if (item)
+       {
+               Item_Data *id = elm_object_item_data_get(item);
+               printf("over <%s>, item=<%p> xposret %i yposret %i\n",
+                               id->path, item, *xposret, *yposret);
+       }
+       else
+               printf("over none, xposret %i yposret %i\n", *xposret, *yposret);
+       return item;
+}
+
+static Evas_Object *
+_gg_createicon(void *data, Evas_Object *win, Evas_Coord *xoff, Evas_Coord *yoff)
+{
+       printf("<%s> <%d>\n", __func__, __LINE__);
+       Evas_Object *icon = NULL;
+       Evas_Object *o = elm_object_item_part_content_get(data, "elm.swallow.icon");
+
+       if (o)
+       {
+               int xm, ym, w = 150, h = 150;
+               const char *f;
+               const char *g;
+               elm_image_file_get(o, &f, &g);
+               evas_pointer_canvas_xy_get(evas_object_evas_get(o), &xm, &ym);
+               if (xoff) *xoff = xm - (w/2);
+               if (yoff) *yoff = ym - (h/2);
+               icon = elm_icon_add(win);
+               elm_image_file_set(icon, f, g);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               if (xoff && yoff) evas_object_move(icon, *xoff, *yoff);
+               evas_object_resize(icon, w, h);
+       }
+
+       return icon;
+}
+
+static Eina_Bool
+_gg_timercb(void *data)
+{
+       if (!data) return ECORE_CALLBACK_CANCEL;
+
+       Eina_List  *items = (Eina_List *)elm_gengrid_selected_items_get(data);
+       Eina_List *l;
+       Elm_Object_Item *it;
+       EINA_LIST_FOREACH(items, l, it)
+       {
+               elm_gengrid_item_selected_set(it, EINA_FALSE);
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_gg_dragdone(void *data, Evas_Object *obj, Eina_Bool doaccept)
+{
+       printf("<%s> <%d> data=<%p> doaccept=<%d>\n",
+                       __func__, __LINE__, data, doaccept);
+
+       if (data)
+               eina_list_free(data);
+
+       /* Unselect selected items */
+       ecore_timer_add(TIMER_VAL, _gg_timercb, obj);
+}
+
+static const char*
+_gg_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)
+{
+       printf("<%s> <%d>\n", __func__, __LINE__);
+       /* Construct a string of dragged info, users frees returned string */
+       const char *drag_data = NULL;
+
+       *items = eina_list_clone(elm_gengrid_selected_items_get(obj));
+       if (it)
+       { /* Add the item mouse is over to the list if NOT selected */
+               void *p = eina_list_search_unsorted(*items, _item_ptr_cmp, it);
+               if (!p)
+                       *items = eina_list_append(*items, it);
+       }
+
+       if (*items)
+       { /* Now we can actually compose string to send and start dragging */
+               Eina_List *l;
+               unsigned  int len = 0;
+
+               EINA_LIST_FOREACH(*items, l, it)
+               {
+                       Item_Data *id = elm_object_item_data_get(it);
+                       if (id)
+                       {
+                               const char *path = id->path;
+                               if (path)
+                                       len += strlen(path);
+                       }
+               }
+
+               drag_data = malloc(len + eina_list_count(*items) + 8);
+               strcpy((char *)drag_data, "file://");
+
+               EINA_LIST_FOREACH(*items, l, it)
+               {
+                       Item_Data *id = elm_object_item_data_get(it);
+                       if (id)
+                       {
+                               const char *path = id->path;
+                               if (path)
+                               {
+                                       strcat((char *)drag_data, path);
+                                       strcat((char *)drag_data, "\n");
+                               }
+                       }
+               }
+               printf("<%s> <%d> Sending <%s> len: %d\n", __func__, __LINE__, drag_data, strlen(drag_data));
+       }
+
+       return drag_data;
+}
+
+static Eina_Bool
+_gg_dnd_default_anim_data_getcb(Evas_Object *obj,  /* The gengrid object */
+      Elm_Object_Item *it,
+      Elm_Drag_User_Info *info)
+{
+       /* This called before starting to drag, mouse-down was on it */
+       printf("<%s> <%d>\n", __func__, __LINE__);
+       info->format = ELM_SEL_FORMAT_IMAGE;
+       info->createicon = _gg_createicon;
+       info->createdata = it;
+       info->icons = NULL;
+       info->dragdone = _gg_dragdone;
+
+       /* Now, collect data to send for drop from ALL selected items */
+       /* Save list pointer to remove items after drop and free list on done */
+       info->data = _gg_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);
+       printf("<%s> <%d> - data = <%s>\n", __func__, __LINE__, info->data);
+       info->acceptdata = info->donecbdata;
+
+       if (info->data)
+               return EINA_TRUE;
+       else
+               return EINA_FALSE;
+}
+
+//////////////////// FOR GENGRID DROPPING  //////////////////////////////////
+static Eina_Bool
+_gg_dropcb(void *data, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *ev, int xposret, int yposret)
+{
+       /* This function is called when data is dropped on gengrid */
+       printf("<%s> <%d>\n", __func__, __LINE__);
+       if (!ev->data)
+               return EINA_FALSE;
+
+       const char *p = ev->data;
+       const char *s = strstr(p, "file://");
+       if (s) p = p + 7;
+       if (p)
+       {
+               char *p2 = strchr(p, '\n');
+               while(p2)
+               {
+                       *p2 = '\0';
+
+                       Item_Data *id = calloc(sizeof(Item_Data), 1);
+                       id->path = strdup(p);
+                       if (!it) it = elm_gengrid_last_item_get(obj);
+                       if (it)
+                               it = elm_gengrid_item_insert_after(obj, ggic, id, it, NULL, NULL);
+                       else
+                               it = elm_gengrid_item_append(obj, ggic, id, NULL, NULL);
+                       p = p2 + 1;
+                       p2 = strchr(p, '\n');
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static void
+_create_gengrid(void *data)
+{
+       struct appdata *ad = data;
+       Elm_Object_Item *item;
+       char buf[PATH_MAX];
+       int index;
+
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_gengrid_item_size_set(gengrid, elm_config_scale_get() * 150, elm_config_scale_get() * 150);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+       elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       ///////////// for dnd :: START //////////////////////////
+       elm_drop_item_container_add(gengrid, ELM_SEL_FORMAT_IMAGE, _gg_item_getcb,
+                       NULL, NULL, NULL, NULL, NULL, NULL, _gg_dropcb, NULL);
+       elm_drag_item_container_add(gengrid, ANIM_TIME, DRAG_TIMEOUT,
+                       _gg_item_getcb, _gg_dnd_default_anim_data_getcb);
+       //
+
+       ggic = elm_gengrid_item_class_new();
+       ggic->item_style = "default";
+       ggic->func.text_get = _text_get;
+       ggic->func.content_get = _content_get;
+       ggic->func.del = _del;
+
+       for (index = 0; index < 20; index++)
+       {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+
+               snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, index+1);
+               id->path = eina_stringshare_add(buf);
+
+               item = elm_gengrid_item_append(
+                               gengrid,                // gengrid object
+                               ggic,                   // gengrid item class
+                               id,                             // data
+                               NULL,
+                               NULL);
+               id->item = item;
+       }
+}
+
+static void
+_create_genlist (void *data)
+{
+       struct appdata *ad = data;
+       Elm_Object_Item *item;
+       char buf[PATH_MAX];
+       int index, photo_index;
+
+       genlist = elm_genlist_add(ad->nf);
+       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 dnd :: START //////////////////////////
+       elm_drop_item_container_add(genlist, ELM_SEL_FORMAT_IMAGE, _gl_item_getcb,
+                       NULL, NULL, NULL, NULL, NULL, NULL, _gl_dropcb, NULL);
+       elm_drag_item_container_add(genlist, ANIM_TIME, DRAG_TIMEOUT,
+                       _gl_item_getcb, _gl_dnd_default_anim_data_getcb);
+       //
+
+       glic = elm_genlist_item_class_new();
+       glic->item_style = "1text.1icon.7";
+       glic->func.text_get = _text_get;
+       glic->func.content_get = _content_get;
+       glic->func.del = _del;
+
+       elm_genlist_block_count_set(genlist, 14);
+       elm_genlist_multi_select_set(genlist, EINA_TRUE); //allow multi-select
+
+       for (index = 0; index < 100; index++)
+       {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+
+               photo_index  = index % (sizeof(photo_path)/sizeof(*photo_path));
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path[photo_index]);
+               id->path = eina_stringshare_add(buf);
+
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               glic,                           // item class
+                               id,                                     // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _sel,
+                               NULL);
+               id->item = item;
+       }
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       ////// for dnd :: START /////////////
+       elm_drag_item_container_del(genlist);
+       elm_drop_item_container_del(gengrid);
+       //
+       elm_genlist_item_class_free(glic);
+       elm_gengrid_item_class_free(ggic);
+
+       return EINA_TRUE;
+}
+
+void dnd_genlist_gengrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+
+       ad = data;
+
+       _create_genlist(ad);
+       _create_gengrid(ad);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+
+       elm_box_pack_end(box, genlist);
+       evas_object_show(genlist);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("DND:Genlist Gengrid (Multi-Select)") , NULL, NULL, box, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/dnd_layout_genlist.c b/live.viewer/dbox.app/src/dnd_layout_genlist.c
new file mode 100644 (file)
index 0000000..4c74a3d
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+//////// for dnd :: START ///////
+#define DRAG_TIMEOUT 0.3
+#define ANIM_TIME 0.5
+//
+
+typedef struct _Item_Data
+{
+       const char *path;
+       int highlighted;
+       Elm_Object_Item *item;
+       Eina_Bool checked;
+       Eina_Bool stared;
+} Item_Data;
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static Evas_Object *genlist, *layout, *box;
+static Elm_Genlist_Item_Class *itc;
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       return strdup(id->path);
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, id->path, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       // Do something when an item is selected.
+}
+
+//////////////////////////////////////////////////////////////////////////////
+/////////////////////// for dnd :: START /////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+//////////////////// FOR GENLIST DRAGGING   //////////////////////////////////
+static Elm_Object_Item *
+_gl_item_getcb(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int *yposret)
+{
+       /* This function returns pointer to item under (x,y) coords */
+       printf("<%s> <%d> obj=<%p>\n", __func__, __LINE__, obj);
+       Elm_Object_Item *gli;
+       gli = elm_genlist_at_xy_item_get(obj, x, y, yposret);
+       if (gli)
+               printf("over <%s>, gli=<%p> yposret %i\n",
+                               elm_object_item_part_text_get(gli, "elm.text"), gli, *yposret);
+       else
+               printf("over none, yposret %i\n", *yposret);
+       return gli;
+}
+
+static Evas_Object *
+_gl_createicon(void *data, Evas_Object *win, Evas_Coord *xoff, Evas_Coord *yoff)
+{
+       Evas_Object *icon = NULL;
+       Evas_Object *o = elm_object_item_part_content_get(data, "elm.icon");
+
+       if (o)
+       {
+               int xm, ym, w = 150, h = 150;
+               const char *f;
+               const char *g;
+               elm_image_file_get(o, &f, &g);
+               evas_pointer_canvas_xy_get(evas_object_evas_get(o), &xm, &ym);
+               if (xoff) *xoff = xm - (w/2);
+               if (yoff) *yoff = ym - (h/2);
+               icon = elm_icon_add(win);
+               elm_image_file_set(icon, f, g);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               if (xoff && yoff) evas_object_move(icon, *xoff, *yoff);
+               evas_object_resize(icon, w, h);
+       }
+
+       return icon;
+}
+
+static void
+_gl_dragdone(void *data, Evas_Object *obj EINA_UNUSED, Eina_Bool doaccept)
+{
+       printf("<%s> <%d> data=<%p> doaccept=<%d>\n",
+                       __func__, __LINE__, data, doaccept);
+
+       if (data)
+               eina_list_free(data);
+       return;
+}
+
+static const char *
+_gl_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)
+{
+       /* Construct a string of dragged info, user frees returned string */
+       const char *drag_data = NULL;
+       printf("<%s> <%d>\n", __func__, __LINE__);
+
+       if (it)
+       {
+               /* Now we can actually compose string to send and start dragging */
+               const char *t;
+
+               t = elm_object_item_part_text_get(it, "elm.text");
+
+               drag_data = malloc(strlen(t) + 8);
+               if (!drag_data) return NULL;
+               strcpy((char *) drag_data, "file://");
+               strcat((char *) drag_data, t);
+               strcat((char *) drag_data, "\0");
+
+               printf("<%s> <%d> Sending <%s>\n", __func__, __LINE__, drag_data);
+       }
+       return drag_data;
+}
+
+static Eina_Bool
+_gl_dnd_default_anim_data_getcb(Evas_Object *obj, Elm_Object_Item *it, Elm_Drag_User_Info *info)
+{
+       /* This called before starting to drag, mouse-down was on it */
+       info->format = ELM_SEL_FORMAT_TARGETS;
+       info->createicon = _gl_createicon;
+       info->createdata = it;
+       info->icons = NULL;
+       info->dragdone = _gl_dragdone;
+
+       /* Now, collect data to send for drop from ALL selected items */
+       /* Save list pointer to remove items after drop and free list on done */
+       info->data = _gl_get_drag_data(obj, it, (Eina_List **) &info->donecbdata);
+       printf("%s - data = %s\n", __FUNCTION__, info->data);
+       info->acceptdata = info->donecbdata;
+
+       if (info->data)
+               return EINA_TRUE;
+       else
+               return EINA_FALSE;
+}
+
+
+////////////////////// FOR LAYOUT DROPPING /////////////////////////
+static Eina_Bool
+_ly_dropcb(void *data, Evas_Object *obj, Elm_Object_Item *it, Elm_Selection_Data *ev, int xposret, int yposret)
+{
+       /* This function is called when data is dropped on the genlist */
+       printf("<%s> <%d> str=<%s>\n", __func__, __LINE__, (char *) ev->data);
+
+       char *p1;
+       p1 = ev->data;
+       const char *p2 = strstr(p1, "file://");
+       if (p2) p1 = p1 + 7;
+       if (!p1) goto end;
+       elm_object_part_text_set(obj, "file.text", p1);
+       printf("[%s : %d] %s \n", __func__, __LINE__, p1);
+       return EINA_TRUE;
+
+end:
+       elm_object_part_text_set(obj, "file.text", "Wrong File Format");
+       return EINA_TRUE;
+}
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////// for dnd :: END ////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+static void
+_create_genlist (void *data)
+{
+       struct appdata *ad = data;
+       Elm_Object_Item *item;
+       char buf[PATH_MAX];
+       int index, photo_index;
+
+       genlist = elm_genlist_add(ad->nf);
+       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 dnd :: START //////////////////////////
+       elm_drag_item_container_add(genlist, ANIM_TIME, DRAG_TIMEOUT,
+                       _gl_item_getcb, _gl_dnd_default_anim_data_getcb);
+       //
+
+       itc = elm_genlist_item_class_new();
+       itc->item_style = "1text.1icon.7";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.del = _gl_del;
+
+       elm_genlist_block_count_set(genlist, 14);
+
+       for (index = 0; index < 100; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+
+               photo_index  = index % (sizeof(photo_path)/sizeof(*photo_path));
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path[photo_index]);
+               id->path = eina_stringshare_add(buf);
+
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,                         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL);
+               id->item = item;
+       }
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       ////// for dnd :: START /////////////
+       elm_drag_item_container_del(genlist);
+       elm_drop_item_container_del(layout);
+       //
+       elm_genlist_item_class_free(itc);
+
+       return EINA_TRUE;
+}
+
+void
+_create_layout(void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *entry;
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "dnd_layout");
+       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);
+
+       entry = elm_entry_add(ad->nf);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_part_content_set(layout, "entry1.swallow", entry);
+
+       entry = elm_entry_add(ad->nf);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_part_content_set(layout, "entry2.swallow", entry);
+
+       ////// for dnd :: START /////////////
+       elm_drop_item_container_add(layout, ELM_SEL_FORMAT_TARGETS, NULL, NULL, NULL,
+                       NULL, NULL, NULL, NULL, _ly_dropcb, NULL);
+       //
+}
+
+void dnd_layout_genlist_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+
+       ad = data;
+
+       _create_layout(ad);
+       _create_genlist(ad);
+
+       box = elm_box_add(ad->nf);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+
+       elm_box_pack_end(box, layout);
+       evas_object_show(layout);
+       elm_box_pack_end(box, genlist);
+       evas_object_show(genlist);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("DND:Layout Genlist") , NULL, NULL, box, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/drawer.c b/live.viewer/dbox.app/src/drawer.c
new file mode 100644 (file)
index 0000000..41d5c06
--- /dev/null
@@ -0,0 +1,342 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "drawer.h"
+
+/*********************************************************
+  Drawer
+ ********************************************************/
+static void _left_drawer_cb(void *data, Evas_Object * obj, void *event_info);
+static void _left_right_drawer_cb(void *data, Evas_Object * obj, void *event_info);
+
+static struct _menu_item _menu_its[] = {
+       {"Left Drawer Style", _left_drawer_cb},
+       {"Left Right Drawer Style", _left_right_drawer_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (!it) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       int idx = 0;
+
+       if (!ad) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+static Evas_Object *_create_nocontent(Evas_Object *parent, const char *text)
+{
+       Evas_Object *grid, *bg, *noc, *btn;
+
+       //Grid
+       grid = elm_grid_add(parent);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(grid);
+
+       //Bg
+       bg = elm_bg_add(grid);
+       elm_grid_pack(grid, bg, 0, 0, 100, 100);
+       evas_object_show(bg);
+
+       //NoContent
+       noc = elm_layout_add(grid);
+       elm_layout_theme_set(noc, "layout", "nocontents", "text");
+       evas_object_size_hint_weight_set(noc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(noc, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_text_set(noc, "elm.text", text);
+       elm_layout_signal_emit(noc, "align.center", "elm");
+       elm_grid_pack(grid, noc, 0, 0, 100, 100);
+       evas_object_show(noc);
+
+   //Button
+       btn = elm_button_add(noc);
+       elm_object_style_set(btn, "style1");
+       elm_object_text_set(btn, "Text button");
+       evas_object_show(btn);
+       elm_object_part_content_set(noc, "swallow_area", btn);
+
+       return grid;
+}
+
+static void
+_panel_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *panel = data;
+       elm_panel_hidden_set(panel, EINA_TRUE);
+}
+
+static Evas_Object *_create_panel(Evas_Object *parent)
+{
+       Evas_Object *panel, *list;
+       int i;
+       char buf[64];
+
+       //Panel
+       panel = elm_panel_add(parent);
+       elm_panel_scrollable_set(panel, EINA_TRUE);
+
+       //Default is visible, hide the content in default.
+       elm_panel_hidden_set(panel, EINA_TRUE);
+       evas_object_show(panel);
+
+       //Panel content
+       list = elm_list_add(panel);
+       ea_object_event_callback_add(list, EA_CALLBACK_BACK, _panel_back_cb, panel);
+       evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       for (i = 0; i < 20; i++) {
+               sprintf(buf, "list item %d", i);
+               elm_list_item_append(list, buf, NULL, NULL, NULL, NULL);
+       }
+
+       evas_object_show(list);
+
+       elm_object_content_set(panel, list);
+
+       return panel;
+}
+
+Evas_Object *_create_drawer_layout(Evas_Object *parent)
+{
+       Evas_Object *layout;
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "drawer", "panel");
+       evas_object_show(layout);
+
+       return layout;
+}
+
+Evas_Object *_create_bg(Evas_Object *parent)
+{
+       Evas_Object *rect;
+       rect = evas_object_rectangle_add(evas_object_evas_get(parent));
+       evas_object_color_set(rect, 0, 0, 0, 0);
+       evas_object_show(rect);
+
+       return rect;
+}
+
+static void _btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *panel = data;
+       if (!elm_object_disabled_get(panel)) elm_panel_toggle(panel);
+}
+
+static void
+_panel_scroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Panel_Scroll_Info *ev = event_info;
+       Evas_Object *bg = data;
+       int col = 127 * ev->rel_x;
+
+       evas_object_color_set(bg, 0, 0, 0, col);
+}
+
+static void
+_left_unhold_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       Evas_Object *panel = data;
+       if (!panel) return;
+       elm_object_disabled_set(panel, EINA_TRUE);
+}
+
+static void
+_left_hold_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       Evas_Object *panel = data;
+       if (!panel) return;
+       elm_object_disabled_set(panel, EINA_FALSE);
+}
+
+static void
+_right_unhold_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       Evas_Object *panel = data;
+       elm_object_disabled_set(panel, EINA_TRUE);
+}
+
+static void
+_right_hold_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       Evas_Object *panel = data;
+       elm_object_disabled_set(panel, EINA_FALSE);
+}
+
+static void
+_left_active_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       printf("left drawer active!\n");
+}
+
+static void
+_left_inactive_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       printf("left drawer inactive!\n");
+}
+
+static void
+_right_active_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       printf("right drawer active!\n");
+}
+
+static void
+_right_inactive_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       printf("right drawer inactive!\n");
+}
+
+static void
+_left_right_drawer_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *layout, *bg, *center, *left_panel, *right_panel, *btn;
+       Elm_Object_Item *navi_it;
+
+       if (ad == NULL) return;
+
+       layout = _create_drawer_layout(ad->conform);
+
+       bg = _create_bg(layout);
+       elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+
+       center = _create_nocontent(layout, "Left Right Drawer Demo");
+       elm_object_part_content_set(layout, "elm.swallow.content", center);
+
+       //Left Panel
+       left_panel = _create_panel(layout);
+       elm_panel_orient_set(left_panel, ELM_PANEL_ORIENT_LEFT);
+       evas_object_smart_callback_add(left_panel, "scroll", _panel_scroll_cb, bg);
+       elm_object_part_content_set(layout, "elm.swallow.left", left_panel);
+
+       //Right Panel
+       right_panel = _create_panel(layout);
+       elm_panel_orient_set(right_panel, ELM_PANEL_ORIENT_RIGHT);
+       evas_object_smart_callback_add(right_panel, "scroll", _panel_scroll_cb, bg);
+       elm_object_part_content_set(layout, "elm.swallow.right", right_panel);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("Left Right Drawer"), NULL, NULL, layout,
+                                                                                                NULL);
+
+       //hold & unhold signal callback
+       elm_object_signal_callback_add(left_panel, "elm,state,hold", "elm", _left_hold_cb, right_panel);
+       elm_object_signal_callback_add(left_panel, "elm,state,unhold", "elm", _left_unhold_cb, right_panel);
+       elm_object_signal_callback_add(right_panel, "elm,state,hold", "elm", _right_hold_cb, left_panel);
+       elm_object_signal_callback_add(right_panel, "elm,state,unhold", "elm", _right_unhold_cb, left_panel);
+
+       //active & inactive signal callback
+       elm_object_signal_callback_add(left_panel, "elm,state,active", "elm", _left_active_cb, NULL);
+       elm_object_signal_callback_add(left_panel, "elm,state,inactive", "elm", _left_inactive_cb, NULL);
+       elm_object_signal_callback_add(right_panel, "elm,state,active", "elm", _right_active_cb, NULL);
+       elm_object_signal_callback_add(right_panel, "elm,state,inactive", "elm", _right_inactive_cb, NULL);
+
+       //left panel toggle button
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_text");
+       elm_object_text_set(btn, "left");
+       evas_object_smart_callback_add(btn, "clicked", _btn_cb, left_panel);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //right panel toggle button
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_text");
+       elm_object_text_set(btn, "right");
+       evas_object_smart_callback_add(btn, "clicked", _btn_cb, right_panel);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+}
+
+static void
+_left_drawer_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *layout, *bg, *center, *left_panel, *btn;
+       Elm_Object_Item *navi_it;
+
+       if (ad == NULL) return;
+
+       layout = _create_drawer_layout(ad->conform);
+
+       bg = _create_bg(layout);
+       elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+
+       center = _create_nocontent(layout, "Left Drawer Demo");
+       elm_object_part_content_set(layout, "elm.swallow.content", center);
+
+       //Left Panel
+       left_panel = _create_panel(layout);
+       elm_panel_orient_set(left_panel, ELM_PANEL_ORIENT_LEFT);
+       evas_object_smart_callback_add(left_panel, "scroll", _panel_scroll_cb, bg);
+       elm_object_part_content_set(layout, "elm.swallow.left", left_panel);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("Left Drawer"), NULL, NULL, layout,
+                                                                                                "drawers");
+
+       //hold & unhold signal callback
+       elm_object_signal_callback_add(left_panel, "elm,state,hold", "elm", _left_hold_cb, NULL);
+       elm_object_signal_callback_add(left_panel, "elm,state,unhold", "elm", _left_unhold_cb, NULL);
+
+       //active & inactive signal callback
+       elm_object_signal_callback_add(left_panel, "elm,state,active", "elm", _left_active_cb, NULL);
+       elm_object_signal_callback_add(left_panel, "elm,state,inactive", "elm", _left_inactive_cb, NULL);
+
+       //left panel toggle button
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/drawers");
+       evas_object_smart_callback_add(btn, "clicked", _btn_cb, left_panel);
+       elm_object_item_part_content_set(navi_it, "drawers", btn);
+}
+
+void drawer_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (!ad) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Drawer"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/elmdemo_test.c b/live.viewer/dbox.app/src/elmdemo_test.c
new file mode 100644 (file)
index 0000000..3fdd98c
--- /dev/null
@@ -0,0 +1,580 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 <Ecore_X.h>
+
+#include "elmdemo_util.h"
+#include "elmdemo_test.h"
+
+#include "fonttest.h"
+#include "fonteffecttest.h"
+
+#include "access.h"
+#include "indicator.h"
+#include "bubble.h"
+#include "button.h"
+#include "check.h"
+#include "colorclass.h"
+#include "colorselector.h"
+#include "ctxpopup.h"
+#include "datetime.h"
+#include "dialoguegroup.h"
+#include "drawer.h"
+#include "entry.h"
+#include "gengrid.h"
+#include "genlist.h"
+#include "handler.h"
+#include "index.h"
+#include "label.h"
+#include "layout.h"
+#include "map.h"
+#include "multibuttonentry.h"
+#include "naviframe.h"
+#include "panes.h"
+#include "popup.h"
+#include "center_popup.h"
+#include "progressbar.h"
+#include "radio.h"
+#include "searchbar.h"
+#include "segmentcontrol.h"
+#include "selectioninfo.h"
+#include "slider.h"
+#include "testmode.h"
+#include "toolbar.h"
+#include "transit.h"
+#include "autoscroll.h"
+#include "elmglviewgears.h"
+#include "video.h"
+#include "tickernoti.h"
+#include "fastscroll.h"
+#include "vi.h"
+#include "floating.h"
+#include "config.h"
+#include "dnd.h"
+#include "theme.h"
+#include "wallpaper.h"
+//#include "map.h"
+
+#ifdef MTRACE
+       #include <mcheck.h>
+#endif
+
+
+//static void _not_implemented_menu_cb(void *data, Evas_Object *obj, void *event_info);
+static void _list_clicked_event(void *data, Evas_Object *obj, void *event_info);
+
+static Evas_Object* _create_bg(Evas_Object *parent);
+static Evas_Object* _create_conform(Evas_Object *parent);
+static Evas_Object* _create_layout_main(Evas_Object* parent);
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct appdata* ad);
+
+static Evas_Object* _create_naviframe_layout(Evas_Object* parent);
+static void _create_view_layout(struct appdata *ad);
+static void _set_rotation_mode_for_emulator(void *data);
+
+static struct _menu_item tizen_menu_its[] = {
+       { "Accessibility", access_cb },
+       { "AutoScroll", autoscroll_cb },
+       { "Bubble", bubble_cb },
+       { "Button", button_cb },
+       { "Center Popup", center_popup_cb },
+       { "Check", check_cb },
+       { "ColorSelector", colorselector_cb },
+       { "CtxPopup", ctxpopup_cb },
+       { "Datetime", datetime_cb },
+       { "DialogueGroup", dialoguegroup_cb },
+       { "Drawer", drawer_cb },
+       { "Entry", entry_cb },
+       { "GLView", elmgears_cb },
+       { "Fastscroll", fastscroll_cb },
+       { "Font", fonttest_cb },
+       { "Font Effect", fonteffecttest_cb },
+       { "Gengrid", gengrid_cb },
+       { "Genlist", genlist_cb },
+       { "Handler", handler_cb },
+       { "Indicator", indicator_cb },
+       { "Label", label_cb },
+       { "Layout", layout_cb },
+       { "List", list_cb },
+       { "Map", map_cb },
+       { "MultiButtonEntry", multibuttonentry_cb },
+       { "Naviframe", naviframe_cb},
+       { "PageControl", index_cb },
+       { "Popup", popup_cb },
+       { "ProgressBar", progressbar_cb },
+       { "Radio", radio_cb },
+       { "SearchBar", searchbar_cb },
+//     { "SegmentControl", segmented_control_cb },
+       { "SelectionInfo", selectioninfo_cb },
+       { "Slider", slider_cb },
+       { "Split View", panes_cb },
+       { "Toolbar", toolbar_cb },
+       { "Transit", effect_cb },
+       { "Ticker Notification", tickernoti_cb },
+       { "Video", video_cb },
+       { "[VI]", vi_cb},
+       { "[Floating]", floating_cb},
+       { "[Config]", config_cb},
+       { "[Drag&Drop]", dnd_cb},
+       { "[Theme]", theme_cb},
+       { "[Theme Change Wallpaper]", wallpaper_theme_cb},
+//     { "[Color Class]", colorclass_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _quit_cb(void *data, Evas_Object *obj, void *ei)
+{
+       /*
+       //To make your application go to background,
+       //Call the elm_win_lower() instead
+       Evas_Object *win = (Evas_Object *) data;
+       elm_win_lower(win);
+       */
+       elm_exit();
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       _quit_cb(NULL, NULL, NULL);
+       return EINA_FALSE;
+}
+
+static void _list_clicked_event(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_bg(Evas_Object *parent)
+{
+       Evas_Object *bg;
+
+       if (parent == NULL) return NULL;
+
+       bg = elm_bg_add(parent);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, bg);
+       evas_object_show(bg);
+
+       return bg;
+}
+
+static Evas_Object* _create_conform(Evas_Object *parent)
+{
+       Evas_Object *conform, *bg;
+
+       if (parent == NULL) return NULL;
+
+       conform = elm_conformant_add(parent);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(parent, conform);
+
+       bg = elm_bg_add(conform);
+       elm_object_style_set(bg, "indicator/headerbg");
+       elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+       evas_object_show(bg);
+
+       evas_object_show(conform);
+       return conform;
+}
+
+
+static Evas_Object* _create_layout_main(Evas_Object* parent)
+{
+       Evas_Object *layout;
+
+       if (parent == NULL) return NULL;
+
+       layout = elm_layout_add(parent);
+
+       if (layout == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "Failed elm_layout_add.\n");
+               return NULL;
+       }
+
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       evas_object_show(layout);
+
+       return layout;
+}
+
+static Evas_Object* _add_debug_mode(struct appdata* ad)
+{
+       static Eina_Bool is_debug_mode_enabled = 0;
+       Elm_Object_Item *it;
+       Evas_Object *list;
+
+       if (ad == NULL) return NULL;
+
+       it = elm_naviframe_bottom_item_get(ad->nf);
+       list = elm_object_item_content_get(it);
+
+       if (list == NULL) return NULL;
+       if (is_debug_mode_enabled) return NULL;
+
+       elm_list_item_prepend(
+                       list,
+                       "(Test Mode)",
+                       NULL,
+                       NULL,
+                       testmode_cb,
+                       ad);
+       elm_list_go(list);
+
+       is_debug_mode_enabled = 1;
+
+       return list;
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct appdata* ad)
+{
+       Evas_Object *li;
+       int idx = 0;
+       struct _menu_item *menu_its;
+
+       if (parent == NULL || ad == NULL) return NULL;
+
+       li = elm_list_add(parent);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_clicked_event, NULL);
+       menu_its = tizen_menu_its;
+
+       while (menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+static void _detect_touch_type(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Touch_Info *ti = &(ad->ti);
+
+       if ((ti->cur_x > ti->prev_x) && (ti->moving_type != FLICK_L2R))
+       {
+               ti->moving_type = FLICK_L2R;
+
+               if (ti->magic_num == 0 || ti->magic_num == 0xEF) ti->magic_num += 0xF;
+               else ti->magic_num += 0xEE;
+       }
+       else if ((ti->cur_x < ti->prev_x) && (ti->moving_type != FLICK_R2L))
+       {
+               ti->moving_type = FLICK_R2L;
+               if (ti->magic_num == 0xF) ti->magic_num += 0xE0;
+               else ti->magic_num += 0xFF;
+       }
+
+       ti->prev_x = ti->cur_x;
+       ti->prev_y = ti->cur_y;
+}
+
+static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Touch_Info *ti = &(ad->ti);
+
+       Evas_Event_Mouse_Down *ev = event_info;
+       Evas_Coord x, y;
+
+       if (ev->button != 1) return;
+
+       evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+       ti->prev_x = ev->canvas.x;
+       ti->prev_y = ev->canvas.y;
+       ti->moving_type = NONE;
+}
+
+static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Touch_Info *ti = &(ad->ti);
+
+       ti->prev_x = 0;
+       ti->prev_y = 0;
+       ti->moving_type = NONE;
+
+       if (ti->magic_num == 0xFE || ti->magic_num == 0xFFE) ti->magic_num += 0xF00;
+       else ti->magic_num = 0;
+
+       if (ti->magic_num == 0x1EFE) _add_debug_mode(ad);
+}
+
+static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Touch_Info *ti = &(ad->ti);
+
+       Evas_Event_Mouse_Move *ev = event_info;
+       Evas_Coord minw = 0, minh = 0;
+
+       if (ev->buttons ^ 0x01)
+               return;
+
+       elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+       Evas_Coord off_x = 0;
+
+       ti->cur_x = ev->cur.canvas.x;
+
+       if (ti->prev_x == 0)
+               return;
+
+       off_x = ti->cur_x - ti->prev_x;
+
+       if (off_x > minw || off_x < -minw)
+               _detect_touch_type(ad);
+}
+
+static Evas_Object* _create_naviframe_layout(Evas_Object* parent)
+{
+       Evas_Object *nf;
+
+       if (parent == NULL) return NULL;
+
+       nf = elm_naviframe_add(parent);
+       elm_object_part_content_set(parent, "elm.swallow.content", nf);
+
+       evas_object_show(nf);
+
+       return nf;
+}
+
+#ifdef DESKTOP
+static Eina_Bool _key_cb(void *data, int type, void *ei)
+{
+       Ecore_Event_Key *ev = ei;
+       struct appdata *ad = data;
+       if (ev && ev->keyname) {
+               if (!strcmp(ev->keyname, "F1")) {
+                       _elm_access_highlight_cycle(ad->win_main, ELM_FOCUS_PREVIOUS);
+               } else if (!strcmp(ev->keyname, "F2")) {
+                       _elm_access_highlight_cycle(ad->win_main, ELM_FOCUS_NEXT);
+               } else if (!strcmp(ev->keyname, "F3")) {
+                       // 0 means ELM_ACTIVATE_DEFAULT
+                       _elm_access_highlight_object_activate(ad->win_main, 0);
+               } else if (!strcmp(ev->keyname, "F5")) {
+                       int rot = elm_win_rotation_get(ad->win_main);
+                       elm_win_rotation_set(ad->win_main, rot + 90);
+                       evas_object_resize(ad->win_main, 1280*elm_config_scale_get(), 720*elm_config_scale_get());
+               }
+
+       }
+       return EINA_TRUE;
+}
+#endif
+
+static void _create_view_layout(struct appdata *ad)
+{
+       Evas_Object *list;
+       Evas_Object *btn;
+       Elm_Object_Item *nf_it;
+
+       if (ad == NULL) return;
+       if (ad->nf == NULL) return;
+
+       list = _create_list_winset(ad->win_main, ad);
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/end_btn/default");
+       ea_object_event_callback_add(ad->nf, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
+       ea_object_event_callback_add(ad->nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
+       nf_it = elm_naviframe_item_push(ad->nf, _("Tizen UI"), btn, NULL, list, NULL);
+       elm_naviframe_item_pop_cb_set(nf_it, _pop_cb, ad->win_main);
+}
+
+int init_elmdemo_test(struct appdata *ad)
+{
+       if (ad == NULL) return -1;
+
+       // Background Image
+       ad->bg = _create_bg(ad->win_main);
+
+       // Conformant
+       ad->conform = _create_conform(ad->win_main);
+       if (ad->conform == NULL) return -1;
+
+       // Base Layout
+       ad->layout_main = _create_layout_main(ad->conform);
+       if (ad->layout_main == NULL) return -1;
+
+       elm_object_content_set(ad->conform, ad->layout_main);
+
+       elm_win_conformant_set(ad->win_main, EINA_TRUE);
+
+       // Indicator
+       elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
+
+       // Naviframe
+       ad->nf = _create_naviframe_layout(ad->layout_main);
+
+       // Naviframe Content
+       _create_view_layout(ad);
+
+#ifdef DESKTOP
+       ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, _key_cb, ad);
+#endif
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, ad);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb,  ad);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, ad);
+
+       return 0;
+}
+
+int _lang_changed(void *data)
+{
+       char *locale = vconf_get_str(VCONFKEY_LANGSET);
+       if (locale) elm_language_set(locale);
+       return 0;
+}
+
+static void _window_resize_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
+}
+
+// This is for a rotation test on the emulator(Xephyr)
+static void _set_rotation_mode_for_emulator(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h);
+
+       if (ad->root_w > ad->root_h) {
+               set_portrait_mode(EINA_FALSE);
+       } else {
+               set_portrait_mode(EINA_TRUE);
+       }
+}
+
+static struct appdata s_ad;
+
+int demo_app_create(Evas_Object *win)
+{
+#if MTRACE
+       printf("- Mtrace started -\n");
+       mtrace();
+#endif
+       struct appdata *ad = &s_ad;
+       char *locale;
+
+       fprintf(stderr, "[TIME] 3. main -> app_create : %d msec\n", appcore_measure_time());
+       fprintf(stdout, "Cpu count: %d\n", eina_cpu_count());
+
+       ad->win_main = win;
+       if (ad->win_main == NULL) return -1;
+
+       evas_object_event_callback_add(ad->win_main, EVAS_CALLBACK_RESIZE, _window_resize_cb, ad);
+
+       evas_object_show(ad->win_main);
+
+       ad->evas = evas_object_evas_get(ad->win_main);
+
+       locale = vconf_get_str(VCONFKEY_LANGSET);
+       if (locale) elm_language_set(locale);
+
+       _set_rotation_mode_for_emulator(ad);
+
+       init_elmdemo_test(ad);
+
+       fprintf(stderr, "theme : %s\n", (const char *)eina_list_data_get(elm_theme_list_get(NULL)));
+
+       return 0;
+}
+
+/*
+int app_terminate(void *data)
+{
+#if MTRACE
+       printf("- Mtrace ended -\n");
+       muntrace();
+#endif
+       //struct appdata *ad = data;
+
+       return 0;
+}
+
+int app_pause(void *data)
+{
+       //struct appdata *ad = data;
+
+       return 0;
+}
+
+int app_resume(void *data)
+{
+       //struct appdata *ad = data;
+
+       return 0;
+}
+
+int app_reset(bundle *b, void *data)
+{
+       struct appdata *ad = data;
+
+       fprintf(stderr, "[TIME] 5. app_create -> app_resume (first display) : %d msec\n", appcore_measure_time());
+       fprintf(stderr, "[TIME] Total. aul_launch -> app_resume (first display) : %d msec\n", appcore_measure_time_from("APP_START_TIME"));
+
+       if (ad->win_main)
+               elm_win_activate(ad->win_main);
+
+       return 0;
+}
+
+int main(int argc, char *argv[])
+{
+       struct appdata ad;
+       struct appcore_ops ops = {
+               .create = app_create,
+               .terminate = app_terminate,
+               .pause = app_pause,
+               .resume = app_resume,
+               .reset = app_reset,
+       };
+
+       fprintf(stderr, "[TIME] 1. aul_launch -> main : %d msec\n", appcore_measure_time_from("APP_START_TIME"));
+       appcore_measure_start();
+
+       memset(&ad, 0x0, sizeof(struct appdata));
+       ops.data = &ad;
+
+       fprintf(stderr, "[TIME] 2. main : %d msec\n", appcore_measure_time());
+       appcore_measure_start();
+
+       return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
+*/
diff --git a/live.viewer/dbox.app/src/elmdemo_util.c b/live.viewer/dbox.app/src/elmdemo_util.c
new file mode 100644 (file)
index 0000000..d29cad2
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#include <Ecore_X.h>
+
+#include "elmdemo_util.h"
+#include "elmdemo_test.h"
+
+///This variable is used only for emulator.
+static Eina_Bool portrait_mode = EINA_TRUE;
+
+static void* rotate_cb_data = NULL;
+static int cur_rot_degree = 0;
+static Eina_Bool rotation_mode = EINA_TRUE;
+
+static char fullpath[1024];
+
+static int _file_owner_change(uid_t uid, gid_t gid)
+{
+       struct stat    statbuf;
+       struct dirent  *dirp;
+       DIR            *dp;
+       char           *ptr;
+       int            ret = 0;
+
+       if (lstat(fullpath, &statbuf) < 0)
+       {
+               fprintf(stderr, "%s : stat error \n", fullpath);
+               return 0;
+       }
+       if (S_ISDIR(statbuf.st_mode) == 0)
+               return 0;
+
+       ptr = fullpath + strlen(fullpath);
+       *ptr++ = '/';
+       *ptr = 0;
+
+       if ((dp = opendir(fullpath)) == NULL)
+       {
+               fprintf(stderr, "can't read %s directory \n", fullpath);
+               return 0;
+       }
+
+       while ((dirp = readdir(dp)) != NULL)
+       {
+               if (strcmp(dirp->d_name, ".") == 0  ||
+                               strcmp(dirp->d_name, "..") == 0)
+                       continue;
+
+               strcpy(ptr, dirp->d_name);
+               if ((chown(fullpath, uid, gid) == -1))
+                       fprintf(stderr, "%s chown error \n", fullpath);
+
+               if ((ret = _file_owner_change(uid, gid)) != 0)
+                       break;
+       }
+       *(ptr-1) = 0;
+
+       if (closedir(dp) < 0)
+               fprintf(stderr, "can't close directory %s", fullpath);
+
+       return ret;
+}
+
+// Save config file as app owner
+// because demo program is running as root,
+// so other applications cannot read new config file.
+void change_config_owner()
+{
+       struct stat file_info;
+       int ret = 0;
+
+       if ((ret = lstat("/home/app", &file_info) == -1))
+       {
+               printf("error : can't get file stat \n");
+       }
+
+       strcpy(fullpath, "/home/app/.elementary");
+       if ((chown(fullpath, file_info.st_uid, file_info.st_gid)) == -1)
+               fprintf(stderr, "!!!! chown error \n");
+       _file_owner_change(file_info.st_uid, file_info.st_gid);
+}
+
+void set_rotation_mode(Eina_Bool rot_mode)
+{
+       rotation_mode = rot_mode;
+}
+
+Eina_Bool get_rotation_mode()
+{
+       return rotation_mode;
+}
+
+int get_rotation_degree()
+{
+       return cur_rot_degree;
+}
+
+void set_rotation_degree(int degree)
+{
+       cur_rot_degree = degree;
+}
+
+void set_portrait_mode(Eina_Bool on)
+{
+       portrait_mode = on;
+}
+
+/*
+ * is_portrait_mode()
+ * This function can be called right after we enter a certain menu,
+ * and check whether the device is already rotated or not.
+ */
+Eina_Bool is_portrait_mode()
+{
+       return portrait_mode;
+}
+
diff --git a/live.viewer/dbox.app/src/elmglviewgears.c b/live.viewer/dbox.app/src/elmglviewgears.c
new file mode 100644 (file)
index 0000000..7f827c0
--- /dev/null
@@ -0,0 +1,887 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#include <stdlib.h>
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "elmglviewgears.h"
+
+static void init_gl(Evas_Object *obj);
+static void resize_gl(Evas_Object *obj);
+static void del_gl(Evas_Object *obj);
+static void draw_gl(Evas_Object *obj);
+static Eina_Bool on_animate(void *data);
+static void mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void render_gears(GLData *gld);
+static void gears_init(GLData *gld);
+static void gears_reshape(GLData *gld, int width, int height);
+
+// fps timer
+static void print_fps(const char* filename, int per_sec);
+static int view_count = 0;
+static int zoom_step = 4;
+static int gear_count = 1;
+
+static int g_ut_frames = 0;
+static int vertice_amount[4][50];
+static struct timeval g_ut_starttime;
+static struct timeval g_ut_currenttime;
+
+static void
+print_fps(const char* filename, int per_sec)
+{
+   char label_label[40];
+   int i;
+   int j;
+   int total_vertice_amount = 0;
+
+   g_ut_frames++;
+
+   gettimeofday(&g_ut_currenttime, NULL);
+
+   double seconds = (g_ut_currenttime.tv_sec - g_ut_starttime.tv_sec);
+   seconds += (g_ut_currenttime.tv_usec - g_ut_starttime.tv_usec) / 1000000.0;
+
+   for (i = 0; i < view_count + 1; i++)
+     {
+        for (j = 0; j < gear_count; j++)
+          {
+             total_vertice_amount += vertice_amount[i][j];
+          }
+     }
+
+   if (seconds >= per_sec)
+     {
+        double fps = g_ut_frames / seconds;
+        sprintf (label_label, "%6.3f FPS, %d Vertices", fps / (view_count + 1), total_vertice_amount);
+        gettimeofday (&g_ut_starttime, NULL);
+        g_ut_frames = 0;
+        elm_object_text_set(fps_label, label_label);
+     }
+
+
+}
+
+#define PRINT_FPS(s)    print_fps(__FILE__, s);
+
+//--------------------------------//
+// Gear Stuff....
+static GLfloat *
+vert(GLfloat *p, GLfloat x, GLfloat y, GLfloat z, GLfloat *n)
+{
+   p[0] = x;
+   p[1] = y;
+   p[2] = z;
+   p[3] = n[0];
+   p[4] = n[1];
+   p[5] = n[2];
+
+   return p + 6;
+}
+
+/*  Draw a gear wheel.  You'll probably want to call this function when
+ *  building a display list since we do a lot of trig here.
+ *
+ *  Input:  inner_radius - radius of hole at center
+ *          outer_radius - radius at center of teeth
+ *          width - width of gear
+ *          teeth - number of teeth
+ *          tooth_depth - depth of tooth
+ */
+static Gear *
+make_gear(GLData *gld, GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
+     GLint teeth, GLfloat tooth_depth)
+{
+   GLint i;
+   GLfloat r0, r1, r2;
+   GLfloat da;
+   GLfloat *v;
+   Gear *gear;
+   double s[5], c[5];
+   GLfloat normal[3];
+   const int tris_per_tooth = 20;
+   Evas_GL_API *gl = gld->glapi;
+
+   gear = (Gear*)malloc(sizeof(Gear));
+   if (gear == NULL)
+      return NULL;
+
+   r0 = inner_radius;
+   r1 = outer_radius - tooth_depth / 2.0;
+   r2 = outer_radius + tooth_depth / 2.0;
+
+   da = 2.0 * M_PI / teeth / 4.0;
+
+   gear->vertices = calloc(teeth * tris_per_tooth * 3 * 6,
+                           sizeof *gear->vertices);
+   s[4] = 0;
+   c[4] = 1;
+   v = gear->vertices;
+   for (i = 0; i < teeth; i++)
+     {
+        s[0] = s[4];
+        c[0] = c[4];
+        s[1] = sin(i * 2.0 * M_PI / teeth + da);
+        c[1] = cos(i * 2.0 * M_PI / teeth + da);
+        s[2] = sin(i * 2.0 * M_PI / teeth + da * 2);
+        c[2] = cos(i * 2.0 * M_PI / teeth + da * 2);
+        s[3] = sin(i * 2.0 * M_PI / teeth + da * 3);
+        c[3] = cos(i * 2.0 * M_PI / teeth + da * 3);
+        s[4] = sin(i * 2.0 * M_PI / teeth + da * 4);
+        c[4] = cos(i * 2.0 * M_PI / teeth + da * 4);
+
+        normal[0] = 0.0;
+        normal[1] = 0.0;
+        normal[2] = 1.0;
+
+        v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal);
+
+        v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal);
+        v = vert(v, r2 * c[2], r2 * s[2], width * 0.5, normal);
+        v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal);
+        v = vert(v, r1 * c[3], r1 * s[3], width * 0.5, normal);
+        v = vert(v, r0 * c[0], r0 * s[0], width * 0.5, normal);
+        v = vert(v, r1 * c[4], r1 * s[4], width * 0.5, normal);
+        v = vert(v, r0 * c[4], r0 * s[4], width * 0.5, normal);
+
+        v = vert(v, r0 * c[4], r0 * s[4], width * 0.5, normal);
+        v = vert(v, r0 * c[0], r0 * s[0], width * 0.5, normal);
+        v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal);
+        v = vert(v, r0 * c[0], r0 * s[0], -width * 0.5, normal);
+
+        normal[0] = 0.0;
+        normal[1] = 0.0;
+        normal[2] = -1.0;
+
+        v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal);
+
+        v = vert(v, r0 * c[4], r0 * s[4], -width * 0.5, normal);
+        v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal);
+        v = vert(v, r0 * c[0], r0 * s[0], -width * 0.5, normal);
+        v = vert(v, r1 * c[3], r1 * s[3], -width * 0.5, normal);
+        v = vert(v, r1 * c[0], r1 * s[0], -width * 0.5, normal);
+        v = vert(v, r2 * c[2], r2 * s[2], -width * 0.5, normal);
+        v = vert(v, r2 * c[1], r2 * s[1], -width * 0.5, normal);
+
+        v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal);
+
+        v = vert(v, r1 * c[0], r1 * s[0], width * 0.5, normal);
+        v = vert(v, r1 * c[0], r1 * s[0], -width * 0.5, normal);
+        v = vert(v, r2 * c[1], r2 * s[1], width * 0.5, normal);
+        v = vert(v, r2 * c[1], r2 * s[1], -width * 0.5, normal);
+        v = vert(v, r2 * c[2], r2 * s[2], width * 0.5, normal);
+        v = vert(v, r2 * c[2], r2 * s[2], -width * 0.5, normal);
+        v = vert(v, r1 * c[3], r1 * s[3], width * 0.5, normal);
+        v = vert(v, r1 * c[3], r1 * s[3], -width * 0.5, normal);
+        v = vert(v, r1 * c[4], r1 * s[4], width * 0.5, normal);
+        v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal);
+
+        v = vert(v, r1 * c[4], r1 * s[4], -width * 0.5, normal);
+     }
+
+   gear->count = (v - gear->vertices) / 6;
+
+   gl->glGenBuffers(1, &gear->vbo);
+   gl->glBindBuffer(GL_ARRAY_BUFFER, gear->vbo);
+   gl->glBufferData(GL_ARRAY_BUFFER, gear->count * 6 * 4,
+                    gear->vertices, GL_STATIC_DRAW);
+
+   return gear;
+}
+
+static void
+multiply(GLfloat *m, const GLfloat *n)
+{
+   GLfloat tmp[16];
+   const GLfloat *row, *column;
+   div_t d;
+   int i, j;
+
+   for (i = 0; i < 16; i++)
+     {
+        tmp[i] = 0;
+        d = div(i, 4);
+        row = n + d.quot * 4;
+        column = m + d.rem;
+        for (j = 0; j < 4; j++)
+           tmp[i] += row[j] * column[j * 4];
+     }
+   memcpy(m, &tmp, sizeof tmp);
+}
+
+static void
+rotate(GLfloat *m, GLfloat angle, GLfloat x, GLfloat y, GLfloat z)
+{
+   double s, c;
+
+   s = sin(angle);
+   c = cos(angle);
+   GLfloat r[16] =
+     {
+        x * x * (1 - c) + c,     y * x * (1 - c) + z * s, x * z * (1 - c) - y * s, 0,
+        x * y * (1 - c) - z * s, y * y * (1 - c) + c,     y * z * (1 - c) + x * s, 0,
+        x * z * (1 - c) + y * s, y * z * (1 - c) - x * s, z * z * (1 - c) + c,     0,
+        0, 0, 0, 1
+     };
+
+   multiply(m, r);
+}
+
+static void
+translate(GLfloat *m, GLfloat x, GLfloat y, GLfloat z)
+{
+   GLfloat t[16] = { 1, 0, 0, 0,  0, 1, 0, 0,  0, 0, 1, 0,  x, y, z, 1 };
+
+   multiply(m, t);
+}
+
+
+static void
+draw_gear(GLData *gld, Gear *gear, GLfloat *m,
+          GLfloat x, GLfloat y, GLfloat z,GLfloat angle, const GLfloat *color)
+{
+   Evas_GL_API *gl = gld->glapi;
+   GLfloat tmp[16];
+
+   memcpy(tmp, m, sizeof tmp);
+   translate(tmp, x, y, z);
+   rotate(tmp, 2 * M_PI * angle / 360.0, 0, 0, 1);
+   gl->glUniformMatrix4fv(gld->proj_location, 1, GL_FALSE, tmp);
+   gl->glUniform3fv(gld->light_location, 1, gld->light);
+   gl->glUniform4fv(gld->color_location, 1, color);
+
+   gl->glBindBuffer(GL_ARRAY_BUFFER, gear->vbo);
+
+   gl->glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE,
+                             6 * sizeof(GLfloat), NULL);
+   gl->glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE,
+                             6 * sizeof(GLfloat), (GLfloat *) 0 + 3);
+   gl->glEnableVertexAttribArray(0);
+   gl->glEnableVertexAttribArray(1);
+   gl->glDrawArrays(GL_TRIANGLE_STRIP, 0, gear->count);
+}
+
+static void
+gears_draw(GLData *gld)
+{
+
+   Evas_GL_API *gl = gld->glapi;
+   int i;
+
+   GLfloat m[16];
+
+   gl->glClearColor(0.5, 0.1, 0.1, 1.0);
+   gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+   memcpy(m, gld->proj, sizeof m);
+   rotate(m, 2 * M_PI * gld->view_rotx / 360.0, 1, 0, 0);
+   rotate(m, 2 * M_PI * gld->view_roty / 360.0, 0, 1, 0);
+   rotate(m, 2 * M_PI * gld->view_rotz / 360.0, 0, 0, 1);
+
+   for (i = 0; i < gear_count; i++)
+      draw_gear(gld, gld->gears[i], m, gld->gears_x_position[i], gld->gears_y_position[i], gld->gears_z_position[i], gld->angle, gld->gears_color[i]);
+}
+
+//-------------------------//
+
+static void render_gears(GLData *gld)
+{
+   gears_draw(gld);
+
+   gld->angle += 2.0;
+}
+
+/* new window size or exposure */
+static void
+gears_reshape(GLData *gld, int width, int height)
+{
+   Evas_GL_API *gl = gld->glapi;
+
+   GLfloat ar, m[16] = {
+      1.0, 0.0, 0.0, 0.0,
+      0.0, 1.0, 0.0, 0.0,
+      0.0, 0.0, 0.1, 0.0,
+      0.0, 0.0, 0.0, 1.0,
+   };
+
+   if (width < height)
+      ar = width;
+   else
+      ar = height;
+
+   m[0] = 0.1 * ar / width;
+   m[5] = 0.1 * ar / height;
+   memcpy(gld->proj, m, sizeof gld->proj);
+   gl->glViewport(0, 0, (GLint) width, (GLint) height);
+}
+
+static const char vertex_shader[] =
+   "uniform mat4 proj;\n"
+   "attribute vec4 position;\n"
+   "attribute vec4 normal;\n"
+   "varying vec3 rotated_normal;\n"
+   "varying vec3 rotated_position;\n"
+   "vec4 tmp;\n"
+   "void main()\n"
+   "{\n"
+   "   gl_Position = proj * position;\n"
+   "   rotated_position = gl_Position.xyz;\n"
+   "   tmp = proj * normal;\n"
+   "   rotated_normal = tmp.xyz;\n"
+   "}\n";
+
+ static const char fragment_shader[] =
+   "precision mediump float;\n"
+   "uniform vec4 color;\n"
+   "uniform vec3 light;\n"
+   "varying vec3 rotated_normal;\n"
+   "varying vec3 rotated_position;\n"
+   "vec3 light_direction;\n"
+   "vec4 white = vec4(0.5, 0.5, 0.5, 1.0);\n"
+   "void main()\n"
+   "{\n"
+   "   light_direction = normalize(light - rotated_position);\n"
+   "   gl_FragColor = color + white * dot(light_direction, rotated_normal);\n"
+   "}\n";
+
+static void
+gears_init(GLData *gld)
+{
+   Evas_GL_API *gl = gld->glapi;
+   int i;
+   GLfloat inner_radius;
+   GLfloat outer_radius;
+   GLfloat width;
+   GLint teeth;
+   GLfloat tooth_depth;
+
+   const char *p;
+   char msg[512];
+
+   gl->glEnable(GL_CULL_FACE);
+   gl->glEnable(GL_DEPTH_TEST);
+
+   p = vertex_shader;
+   gld->vtx_shader = gl->glCreateShader(GL_VERTEX_SHADER);
+   gl->glShaderSource(gld->vtx_shader, 1, &p, NULL);
+   gl->glCompileShader(gld->vtx_shader);
+   gl->glGetShaderInfoLog(gld->vtx_shader, sizeof msg, NULL, msg);
+
+   p = fragment_shader;
+   gld->fgmt_shader = gl->glCreateShader(GL_FRAGMENT_SHADER);
+   gl->glShaderSource(gld->fgmt_shader, 1, &p, NULL);
+   gl->glCompileShader(gld->fgmt_shader);
+   gl->glGetShaderInfoLog(gld->fgmt_shader, sizeof msg, NULL, msg);
+
+   gld->program = gl->glCreateProgram();
+   gl->glAttachShader(gld->program, gld->vtx_shader);
+   gl->glAttachShader(gld->program, gld->fgmt_shader);
+   gl->glBindAttribLocation(gld->program, 0, "position");
+   gl->glBindAttribLocation(gld->program, 1, "normal");
+
+   gl->glLinkProgram(gld->program);
+   gl->glGetProgramInfoLog(gld->program, sizeof msg, NULL, msg);
+
+   gl->glUseProgram(gld->program);
+   gld->proj_location  = gl->glGetUniformLocation(gld->program, "proj");
+   gld->light_location = gl->glGetUniformLocation(gld->program, "light");
+   gld->color_location = gl->glGetUniformLocation(gld->program, "color");
+
+   /* make the gears */
+   for (i = 0; i < 50; i++)
+     {
+        inner_radius = 1.0;
+        outer_radius = 1.0;
+        width = 0.5;
+        teeth = 20;
+        tooth_depth = 0.3;
+        gld->gears_color[i][0] = 1.0;
+        gld->gears_color[i][1] = 1.0;
+        gld->gears_color[i][2] = 0;
+        gld->gears_color[i][3] = 1.0;
+
+        gld->gears_x_position[i] = (i * 3) / 10 - 6.0;
+        gld->gears_y_position[i] = (i * 3) % 10 - 5.0;
+        gld->gears_z_position[i] = 0;
+        gld->gears[i] = make_gear(gld, inner_radius, inner_radius+outer_radius, width, teeth, tooth_depth);
+        vertice_amount[view_count][i] = gld->gears[i]->count * 3;
+     }
+
+}
+
+#if 0
+static void
+on_done(void *data, Evas_Object *obj, void *event_info)
+{
+   evas_object_del((Evas_Object*) data);
+}
+#endif
+
+static void del_first_glview(Evas_Object *obj)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   int i;
+
+   view_count = 0;
+   zoom_step = 4;
+   gear_count = 1;
+
+   if (!gld)
+     {
+        printf("Unable to get GLData. \n");
+        return;
+     }
+   Evas_GL_API *gl = gld->glapi;
+
+   gl->glDeleteShader(gld->vtx_shader);
+   gl->glDeleteShader(gld->fgmt_shader);
+   gl->glDeleteProgram(gld->program);
+
+   for (i = 0; i < 50; i++)
+     {
+        gl->glDeleteBuffers(1, &(gld->gears[i]->vbo));
+        free(gld->gears[i]->vertices);
+        free(gld->gears[i]);
+     }
+
+   evas_object_data_del((Evas_Object*)obj, "..gld");
+   free(gld);
+
+   Ecore_Animator *ani = evas_object_data_get(obj, "..ani");
+   ecore_animator_del(ani);
+}
+
+static void
+gldata_init(GLData *gld)
+{
+   gld->initialized = 0;
+   gld->mouse_down = 0;
+
+   gld->view_rotx = -20.0;
+   gld->view_roty = -30.0;
+   gld->view_rotz = 0.0;
+   gld->angle = 0.0;
+
+   gld->light[0] = 1.0;
+   gld->light[1] = 1.0;
+   gld->light[2] = -5.0;
+}
+
+static void
+set_glview(Evas_Object *glview)
+{
+   GLData *gld = NULL;
+   Ecore_Animator *ani;
+
+   if (!(gld = calloc(1, sizeof(GLData))))
+      return;
+
+   gldata_init(gld);
+
+   evas_object_size_hint_align_set(glview, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(glview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_glview_mode_set(glview, ELM_GLVIEW_ALPHA|ELM_GLVIEW_DEPTH);
+   elm_glview_resize_policy_set(glview, ELM_GLVIEW_RESIZE_POLICY_RECREATE);
+   elm_glview_render_policy_set(glview, ELM_GLVIEW_RENDER_POLICY_ON_DEMAND);
+   elm_glview_init_func_set(glview, (Elm_GLView_Func_Cb)init_gl);
+
+   if (view_count)
+        elm_glview_del_func_set(glview, (Elm_GLView_Func_Cb)del_gl);
+   else
+        elm_glview_del_func_set(glview, (Elm_GLView_Func_Cb)del_first_glview);
+
+   elm_glview_resize_func_set(glview, (Elm_GLView_Func_Cb)resize_gl);
+   elm_glview_render_func_set(glview, (Elm_GLView_Func_Cb)draw_gl);
+
+   elm_object_focus_set(glview, EINA_TRUE);
+   evas_object_event_callback_add(glview, EVAS_CALLBACK_MOUSE_DOWN, mouse_down, glview);
+   evas_object_event_callback_add(glview, EVAS_CALLBACK_MOUSE_UP, mouse_up, glview);
+   evas_object_event_callback_add(glview, EVAS_CALLBACK_MOUSE_MOVE, mouse_move, glview);
+
+   ani = ecore_animator_add(on_animate, glview);
+   evas_object_data_set(glview, "..ani", ani);
+   gld->glapi = elm_glview_gl_api_get(glview);
+   evas_object_data_set(glview, "..gld", gld);
+
+   evas_object_show(glview);
+
+}
+
+static void
+add_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+   if (zoom_step == 4)
+     {
+        if (view_count != 3)
+          {
+             view_count++;
+             glview[view_count] = elm_glview_add((Evas_Object *)data);
+             set_glview(glview[view_count]);
+             elm_box_pack_end(box, glview[view_count]);
+             evas_object_show(glview[view_count]);
+          }
+     }
+}
+
+static void
+delete_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+   if (zoom_step == 4)
+     {
+        if (view_count != 0)
+          {
+             elm_box_unpack(box, glview[view_count]);
+             evas_object_del(glview[view_count]);
+             view_count--;
+
+          }
+     }
+}
+
+static void
+gear_add_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+    if (gear_count != 50)
+      {
+         gear_count++;
+      }
+}
+
+static void
+gear_delete_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+    if (gear_count != 1)
+      {
+         gear_count--;
+      }
+}
+
+
+static void
+expand_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+   int default_width = 100;
+   int default_height = 130;
+
+   if (!view_count )
+     {
+        if ( zoom_step != 4)
+          {
+             zoom_step++;
+             if(zoom_step != 4)
+               {
+                  evas_object_size_hint_align_set(glview[0], 0,0);
+                  evas_object_size_hint_min_set(glview[0], default_width*zoom_step, default_height*zoom_step);
+               }
+             else
+               {
+                  evas_object_size_hint_min_set(glview[0], 0, 0);
+                  evas_object_size_hint_align_set(glview[0], EVAS_HINT_FILL, EVAS_HINT_FILL);
+                  evas_object_size_hint_weight_set(glview[0], EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               }
+          }
+     }
+}
+
+static void
+contract_btn_click(void *data, Evas_Object *obj, void *event_info)
+{
+   int default_width = 100;
+   int default_height = 130;
+
+   if (!view_count )
+     {
+        if ( zoom_step != 1)
+          {
+             zoom_step--;
+             evas_object_size_hint_align_set(glview[0], 0,0);
+             evas_object_size_hint_min_set(glview[0], default_width * zoom_step, default_height * zoom_step);
+
+          }
+     }
+}
+
+
+
+void
+elmgears_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *win;
+   Evas_Object *amount_btn_box;
+   Evas_Object *gear_btn_box;
+   Evas_Object *gear_add_btn, *gear_delete_btn;
+   Evas_Object *add_btn, *delete_btn;
+   Evas_Object *expand_btn, *contract_btn;
+   Evas_Object *scale_btn_box;
+
+   struct appdata *ad = (struct appdata *)data;
+   if (ad == NULL) return;
+
+   win = ad->nf;
+
+   //modified
+   box = elm_box_add(win);
+   evas_object_move(box, 0, 10);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_min_set(box, 480, 600);
+   evas_object_show(box);
+
+   /* add an amount_btn_box*/
+   amount_btn_box = elm_box_add(win);
+   elm_box_horizontal_set(amount_btn_box, EINA_TRUE);
+   evas_object_size_hint_weight_set(amount_btn_box, 0.0, 0.0);
+   elm_box_pack_end(box, amount_btn_box);
+   evas_object_show(amount_btn_box);
+
+   /* add an ok button */
+   add_btn = elm_button_add(win);
+   elm_object_text_set(add_btn, "GLView Add");
+   evas_object_size_hint_weight_set(add_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(add_btn, 350, 80);
+   elm_box_pack_end(amount_btn_box, add_btn);
+   evas_object_show(add_btn);
+   evas_object_smart_callback_add(add_btn, "clicked", add_btn_click, ad->win_main);
+
+   /* add a delete button */
+   delete_btn = elm_button_add(win);
+   elm_object_text_set(delete_btn, "GLView Delete");
+   evas_object_size_hint_weight_set(delete_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(delete_btn, 350, 80);
+   elm_box_pack_end(amount_btn_box, delete_btn);
+   evas_object_show(delete_btn);
+   evas_object_smart_callback_add(delete_btn, "clicked", delete_btn_click, ad->win_main);
+
+   /* add a scale_btn_box*/
+   scale_btn_box = elm_box_add(win);
+   elm_box_horizontal_set(scale_btn_box, EINA_TRUE);
+   evas_object_size_hint_weight_set(scale_btn_box, 0.0, 0.0);
+   elm_box_pack_end(box, scale_btn_box);
+   evas_object_show(scale_btn_box);
+
+   /* add a contract button */
+   contract_btn = elm_button_add(win);
+   elm_object_text_set(contract_btn, "GLView Contract");
+   evas_object_size_hint_weight_set(contract_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(contract_btn, 350, 80);
+   elm_box_pack_end(scale_btn_box, contract_btn);
+   evas_object_show(contract_btn);
+   evas_object_smart_callback_add(contract_btn, "clicked", contract_btn_click, NULL);
+
+   /* add an expand button */
+   expand_btn = elm_button_add(win);
+   elm_object_text_set(expand_btn, "GLView Expand");
+   evas_object_size_hint_weight_set(expand_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(expand_btn, 350, 80);
+   elm_box_pack_end(scale_btn_box, expand_btn);
+   evas_object_show(expand_btn);
+   evas_object_smart_callback_add(expand_btn, "clicked", expand_btn_click, NULL);
+
+   /* add an amount_btn_box*/
+   gear_btn_box = elm_box_add(win);
+   elm_box_horizontal_set(gear_btn_box, EINA_TRUE);
+   evas_object_size_hint_weight_set(gear_btn_box, 0.0, 0.0);
+   elm_box_pack_end(box, gear_btn_box);
+   evas_object_show(gear_btn_box);
+
+   /* add an ok button */
+   gear_add_btn = elm_button_add(win);
+   elm_object_text_set(gear_add_btn, "Gear Add");
+   evas_object_size_hint_weight_set(gear_add_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(gear_add_btn, 350, 80);
+   elm_box_pack_end(gear_btn_box, gear_add_btn);
+   evas_object_show(gear_add_btn);
+   evas_object_smart_callback_add(gear_add_btn, "clicked", gear_add_btn_click, NULL);
+
+   /* add a delete button */
+   gear_delete_btn = elm_button_add(win);
+   elm_object_text_set(gear_delete_btn, "Gear Delete");
+   evas_object_size_hint_weight_set(gear_delete_btn, 0.0, 0.0);
+   evas_object_size_hint_min_set(gear_delete_btn, 350, 80);
+   elm_box_pack_end(gear_btn_box, gear_delete_btn);
+   evas_object_show(gear_delete_btn);
+   evas_object_smart_callback_add(gear_delete_btn, "clicked", gear_delete_btn_click, NULL);
+
+   /* add an fps label*/
+   fps_label = elm_label_add(win);
+   elm_object_text_set(fps_label, "fps");
+   evas_object_size_hint_weight_set(fps_label, 0.0, 0.0);
+   evas_object_size_hint_min_set(fps_label, 480, 80);
+   elm_box_pack_end(box, fps_label);
+   evas_object_show(fps_label);
+
+   glview[0] = elm_glview_add(ad->win_main);
+   set_glview(glview[0]);
+   elm_box_pack_end(box, glview[0]);
+
+   elm_naviframe_item_push(ad->nf, _("Gears"), NULL, NULL, box, NULL);
+
+   evas_object_show(win);
+}
+
+static Eina_Bool on_animate(void *data)
+{
+   elm_glview_changed_set((Evas_Object*)data);
+
+   PRINT_FPS(1);
+
+   return EINA_TRUE;
+}
+
+static void init_gl(Evas_Object *obj)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   if (!gld) return;
+
+   //printf("Init Function Called...\n");
+
+   gears_init(gld);
+
+   //resize_gl(obj);
+}
+
+static void del_gl(Evas_Object *obj)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   int i;
+
+   if (!gld)
+     {
+        printf("Unable to get GLData. \n");
+        return;
+     }
+   Evas_GL_API *gl = gld->glapi;
+
+   //printf("Delete Function Called...\n");
+
+   gl->glDeleteShader(gld->vtx_shader);
+   gl->glDeleteShader(gld->fgmt_shader);
+   gl->glDeleteProgram(gld->program);
+
+   for (i = 0; i < 50; i++)
+     {
+        gl->glDeleteBuffers(1, &(gld->gears[i]->vbo));
+        free(gld->gears[i]->vertices);
+        free(gld->gears[i]);
+     }
+
+   evas_object_data_del((Evas_Object*)obj, "..gld");
+   free(gld);
+
+   Ecore_Animator *ani = evas_object_data_get(obj, "..ani");
+   ecore_animator_del(ani);
+
+}
+
+static void resize_gl(Evas_Object *obj)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   int w, h;
+
+   if (!gld) return;
+
+   // get the image size in case it changed with evas_object_image_size_set()
+   elm_glview_size_get(obj, &w, &h);
+
+   // GL Viewport stuff. you can avoid doing this if viewport is all the
+   // same as last frame if you want
+   gears_reshape(gld, w, h);
+}
+
+
+static void draw_gl(Evas_Object *obj)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   if (!gld) return;
+   Evas_GL_API *gl = gld->glapi;
+
+   render_gears(gld);
+   gl->glFinish();
+}
+
+#if 0
+void key_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   Evas_Event_Key_Down *ev;
+   ev = (Evas_Event_Key_Down *)event_info;
+   GLData *gld = evas_object_data_get(obj, "..gld");
+
+   if (strcmp(ev->keyname, "Left") == 0)
+     {
+        gld->view_roty += 5.0;
+        return;
+     }
+
+   if (strcmp(ev->keyname, "Right") == 0)
+     {
+        gld->view_roty -= 5.0;
+        return;
+     }
+
+   if (strcmp(ev->keyname, "Up") == 0)
+     {
+        gld->view_rotx += 5.0;
+        return;
+     }
+
+   if (strcmp(ev->keyname, "Down") == 0)
+     {
+        gld->view_rotx -= 5.0;
+        return;
+     }
+   if ((strcmp(ev->keyname, "Escape") == 0) ||
+       (strcmp(ev->keyname, "Return") == 0))
+     {
+        on_done(data, obj, event_info);
+        return;
+     }
+}
+#endif
+
+void mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   gld->mouse_down = 1;
+}
+
+void mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   Evas_Event_Mouse_Move *ev;
+   ev = (Evas_Event_Mouse_Move *)event_info;
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   float dx = 0, dy = 0;
+
+   if (gld->mouse_down)
+     {
+        dx = ev->cur.canvas.x - ev->prev.canvas.x;
+        dy = ev->cur.canvas.y - ev->prev.canvas.y;
+
+        gld->view_roty += -1.0 * dx;
+        gld->view_rotx += -1.0 * dy;
+     }
+
+}
+
+void mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   GLData *gld = evas_object_data_get(obj, "..gld");
+   gld->mouse_down = 0;
+}
+
+/* vim:set ts=8 sw=3 sts=3 expandtab cino=>5n-2f0^-2{2(0W1st0 :*/
diff --git a/live.viewer/dbox.app/src/entry.c b/live.viewer/dbox.app/src/entry.c
new file mode 100644 (file)
index 0000000..e435775
--- /dev/null
@@ -0,0 +1,621 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "entry.h"
+#include <Ecore_X.h>
+
+
+//for change text size
+static Evas_Object *tsobj;
+static Evas_Object *txtobj1;
+static Evas_Object *txtobj2;
+//end for change text size
+
+static void
+_input_panel_event_callback(void *data, Ecore_IMF_Context *imf_context,
+                           int value)
+{
+       int x, y, w, h;
+       switch (value) {
+       case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
+               // ISE state has changed to ISE_STATE_SHOW status
+               // Get ISE position of current active ISE
+               ecore_imf_context_input_panel_geometry_get(imf_context, &x, &y,
+                                                          &w, &h);
+               printf("keypad is shown\n");
+               printf
+                   ("The coordination of input panel. x : %d, y : %d, w : %d, h : %d\n",
+                    x, y, w, h);
+               break;
+       case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
+               // ISE state has changed to ISE_STATE_HIDE status
+               printf("keypad is hided\n");
+               break;
+       }
+}
+
+static void _sample_press_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       ;
+}
+
+static void _show_title_toolbar(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *navi_item = elm_naviframe_top_item_get(data);
+       elm_object_item_signal_emit(navi_item, "elm,state,sip,shown", "");
+}
+
+static void _hide_title_toolbar(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *navi_item = elm_naviframe_top_item_get(data);
+       elm_object_item_signal_emit(navi_item, "elm,state,sip,hidden", "");
+}
+
+/*
+static void callback(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("hurray I am called\n");
+}
+*/
+Evas_Object *to_del;
+static void response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (to_del) {
+               evas_object_del(to_del);
+               to_del = NULL;
+       }
+       evas_object_del(obj);
+}
+
+void maxlength_reached(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       if (to_del) return;
+
+       ad = (struct appdata *)data;
+
+       popup = elm_popup_add(ad->win_main);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, "maximum length reached");
+       elm_popup_timeout_set(popup, 3.0);
+       evas_object_smart_callback_add(popup, "block,clicked", response_cb,
+               NULL);
+       evas_object_smart_callback_add(popup, "timeout", response_cb, NULL);
+       evas_object_show(popup);
+       to_del = popup;
+}
+
+static void password_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *lay;
+
+       if (ad == NULL) return;
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test");
+       elm_naviframe_item_push(ad->nf, _("password"), NULL, NULL,lay, NULL);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       evas_object_smart_callback_add(en, "changed", _sample_press_cb, NULL);
+       elm_entry_single_line_set(en, EINA_TRUE);
+       elm_entry_password_set(en, EINA_TRUE);
+       elm_object_part_content_set(lay, "entry_part", en);
+       elm_entry_entry_set(en, "pass");
+       elm_entry_cursor_end_set(en);
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+}
+
+static void entry_multiline(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *lay;
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       if (ad == NULL) return;
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test_multi");
+       elm_naviframe_item_push(ad->nf, _("entry_multiline"), NULL, NULL, lay, NULL);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       evas_object_smart_callback_add(en, "changed", _sample_press_cb, NULL);
+       elm_entry_cursor_end_set(en);
+       limit_filter_data.max_byte_count = 0;
+       limit_filter_data.max_char_count = 200;
+       elm_entry_markup_filter_append(en, elm_entry_filter_limit_size,
+                                    &limit_filter_data);
+       elm_entry_entry_set(en,
+                           "This is a Multiline entry, you can input many lines");
+       elm_entry_cursor_end_set(en);
+       evas_object_smart_callback_add(en, "maxlength,reached",
+                                      maxlength_reached, ad);
+       elm_object_part_content_set(lay, "entry_part", en);
+
+       /*
+        * Sample Code for custom menu using elm_entry_context_menu_item_add()
+        elm_entry_context_menu_item_add(en, "Menu",NULL, ELM_ICON_NONE, callback, NULL);
+        */
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF,
+                               ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void entry_copy_paste(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *lay;
+       Evas_Object *scroller_main;
+
+       if (ad == NULL) return;
+
+       scroller_main = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Copy & Paste"), NULL, NULL, scroller_main, NULL);
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test");
+       elm_object_content_set(scroller_main, lay);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       evas_object_smart_callback_add(en, "changed", _sample_press_cb, NULL);
+       elm_entry_cursor_end_set(en);
+
+       elm_entry_entry_set(en,
+                           "<b>What is Enlightenment?</b><br><br>"
+                           "Enlightenment is not just a window manager for Linux/X11 and others, but also a whole suite of libraries to help you create beautiful user interfaces with much less work than doing it the old fashioned way and fighting with traditional toolkits, not to mention a traditional window manager. It covers uses from small mobile devices like phones all the way to powerful multi-core desktops (which are the primary development environment)."
+                           "<br><br>"
+                           "<b>Enlightenment Foundation Libraries</b><br><br>"
+                           "These provide both a semi-traditional toolkit set in Elementary as well as the object canvas (Evas) and powerful abstracted objects (Edje) that you can combine, mix and match, even layer on top of each other with alpha channels and events in-tact. It has 3D transformations for all objects and more."
+                           "A simple overview of the EFL (Enlightenment Foundation Libraries) stack is here. There is more to this, but this gives a quick overview of where it fits in."
+                           "<br><br>"
+                           "<b>Enlightenment</b><br><br>"
+                           "Enlightenment is the flagship and original name bearer for this project. Once it was just a humble window manager for X11 that wanted to do things differently. To do them better, but it has expanded. This can be confusing so when we refer to Enlightenment, we may mean the project as a whole or just the window manager proper. The libraries behind Enlightenment are referred to as EFL collectively, each with a specific name and purpose.");
+
+       elm_entry_cursor_end_set(en);
+       elm_object_part_content_set(lay, "entry_part", en);
+}
+
+static Evas_Object *_create_autocapital_entry(Evas_Object *parent, const char *label, Elm_Autocapital_Type autocap)
+{
+       Evas_Object *ly;
+       Evas_Object *en;
+       Ecore_IMF_Context *imf_context;
+
+       ly = elm_layout_add(parent);
+       elm_layout_theme_set(ly, "layout", "editfield", "title");
+       evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0);
+
+       en = elm_entry_add(parent);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_object_part_content_set(ly, "elm.swallow.content", en);
+
+       elm_object_part_text_set(ly, "elm.text", label);
+       elm_entry_autocapital_type_set (en, autocap);
+       evas_object_show(ly);
+
+       imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       return ly;
+}
+
+static void entry_autocapital(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *scroller_main;
+       Evas_Object *bx;
+
+       if (ad == NULL) return;
+
+       scroller_main = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Autocapital"), NULL, NULL, scroller_main, NULL);
+
+       bx = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, 0);
+
+       en = _create_autocapital_entry(bx, "None", ELM_AUTOCAPITAL_TYPE_NONE);
+       elm_box_pack_end(bx, en);
+
+       en = _create_autocapital_entry(bx, "Word", ELM_AUTOCAPITAL_TYPE_WORD);
+       elm_box_pack_end(bx, en);
+
+       en = _create_autocapital_entry(bx, "Sentence", ELM_AUTOCAPITAL_TYPE_SENTENCE);
+       elm_box_pack_end(bx, en);
+
+       en = _create_autocapital_entry(bx, "Allcharacter", ELM_AUTOCAPITAL_TYPE_ALLCHARACTER);
+       elm_box_pack_end(bx, en);
+
+       elm_object_content_set(scroller_main, bx);
+}
+
+static void _entry_enter_click(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("enter key clicked!!\n");
+}
+
+static void single_line_scrolled_entry(void *data, Evas_Object *obj,
+                                      void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *lay;
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       if (ad == NULL) return;
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test");
+
+       elm_naviframe_item_push(ad->nf, _("Scrolled_entry"), NULL, NULL, lay, NULL);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_entry_select_all(en);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,
+                                               ELM_SCROLLER_POLICY_AUTO);
+       evas_object_smart_callback_add(en, "maxlength,reached",
+                                      maxlength_reached, ad);
+
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       elm_entry_single_line_set(en, EINA_TRUE);
+       limit_filter_data.max_char_count = 0;
+       limit_filter_data.max_byte_count = 50;
+       elm_entry_markup_filter_append(en, elm_entry_filter_limit_size,
+                                             &limit_filter_data);
+       elm_entry_entry_set(en, "Text");
+       elm_entry_cursor_end_set(en);
+       evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(en);
+
+       evas_object_smart_callback_add(en, "activated", _entry_enter_click,
+                                      NULL);
+
+       elm_object_part_content_set(lay, "entry_part", en);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+
+static void _btn_change_text_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("%s %d: Get in\n", __func__, __LINE__);
+       const char *txt;
+       txt = elm_entry_entry_get(tsobj);
+       char style[256];
+       sprintf(style, "DEFAULT='font_size=%s'", txt);
+       //text object 1
+       elm_entry_text_style_user_pop(txtobj1);
+       elm_entry_text_style_user_push(txtobj1, style);
+
+       //text object 2
+       elm_entry_text_style_user_pop(txtobj2);
+       elm_entry_text_style_user_push(txtobj2, style);
+
+}
+
+static void _entry_text_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("%s %d: Get in\n", __func__, __LINE__);
+       const char *t1;
+       t1 = elm_entry_entry_get(txtobj1);
+       elm_entry_entry_set(txtobj2, t1);
+}
+
+static void entry_change_text_size(void *data, Evas_Object *obj,
+                                      void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *layout;
+       Evas_Object *lbl;
+       Evas_Object *ts;
+       Evas_Object *btn;
+       Evas_Object *en1, *en2;
+
+       if (ad == NULL) return;
+
+       //layout
+       layout = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "entry_test_change_text_size");
+       evas_object_show(layout);
+
+       elm_naviframe_item_push(ad->nf, _("Change Text Size"), NULL, NULL, layout, NULL);
+
+       //label
+       lbl = elm_label_add(ad->nf);
+       elm_object_text_set(lbl, "<font_size=40><align=left>Font size: </align></font_size>");
+       elm_object_part_content_set(layout, "label", lbl);
+
+       //text size
+       ts = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(ts, EINA_TRUE);
+       elm_entry_scrollable_set(ts, EINA_FALSE);
+       elm_entry_single_line_set(ts, EINA_TRUE);
+       elm_entry_cursor_end_set(ts);
+       evas_object_size_hint_weight_set(ts, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ts, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_entry_entry_set(ts, "40");
+       evas_object_show(ts);
+       elm_object_part_content_set(layout, "entry_size", ts);
+       tsobj = ts;
+
+       //button
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "Change");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(btn, "clicked", _btn_change_text_clicked_cb, NULL);
+       evas_object_show(btn);
+       elm_object_part_content_set(layout, "button", btn);
+
+       //input entry
+       en1 = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en1, EINA_TRUE);
+       evas_object_size_hint_weight_set(en1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_entry_scrollable_set(en1, EINA_TRUE);
+       elm_entry_select_all(en1);
+       elm_entry_single_line_set(en1, EINA_FALSE);
+       elm_scroller_policy_set(en1, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en1);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       elm_entry_entry_set(en1, "Text");
+       elm_entry_cursor_end_set(en1);
+       evas_object_show(en1);
+       elm_object_part_content_set(layout, "entry_part1", en1);
+       txtobj1 = en1;
+       evas_object_smart_callback_add(txtobj1, "changed", _entry_text_changed_cb, NULL);
+       evas_object_smart_callback_add(txtobj1, "preedit,changed", _entry_text_changed_cb, NULL); //for pre-edit
+       //evas_object_smart_callback_add(txtobj1, "cursor,changed", _entry_text_changed_cb, NULL); //can be used
+
+       //view entry
+       en2 = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en2, EINA_TRUE);
+       evas_object_size_hint_weight_set(en2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_entry_scrollable_set(en2, EINA_TRUE);
+       elm_entry_select_all(en2);
+       elm_entry_single_line_set(en2, EINA_FALSE);
+       elm_scroller_policy_set(en2, ELM_SCROLLER_POLICY_OFF,
+                                                                       ELM_SCROLLER_POLICY_AUTO);
+       elm_entry_entry_set(en2, "Text");
+       evas_object_show(en2);
+       elm_object_part_content_set(layout, "entry_part2", en2);
+       txtobj2 = en2;
+
+       //apply text style
+       elm_entry_text_style_user_push(txtobj1, "DEFAULT='font_size=40'");
+       elm_entry_text_style_user_push(txtobj2, "DEFAULT='font_size=40'");
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       evas_object_smart_callback_del(data, "virtualkeypad,state,on", _show_title_toolbar);
+       evas_object_smart_callback_del(data, "virtualkeypad,state,off", _hide_title_toolbar);
+
+       return EINA_TRUE;
+}
+
+static void light_theme_entry(void *data, Evas_Object *obj,
+                                      void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en;
+       Evas_Object *lay;
+
+       if (ad == NULL) return;
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test");
+
+       elm_naviframe_item_push(ad->nf, _("Entry with light theme"), NULL, NULL, lay, NULL);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_entry_select_all(en);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF,
+                                               ELM_SCROLLER_POLICY_AUTO);
+
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                        ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                        _input_panel_event_callback,
+                                                        NULL);
+
+       elm_entry_single_line_set(en, EINA_TRUE);
+       elm_entry_entry_set(en, "This is an example of entry with ligth theme");
+       elm_entry_cursor_end_set(en);
+       evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND,
+                                        EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       //you can also customize entry further
+       //every customized function for entry should be called after theme set function
+       elm_entry_text_style_user_push(en, "DEFAULT='color=#0000FF'");
+
+       evas_object_show(en);
+
+       evas_object_smart_callback_add(en, "activated", _entry_enter_click,
+                                      NULL);
+
+       elm_object_part_content_set(lay, "entry_part", en);
+}
+
+static void _check_translate_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *en = (Evas_Object *)data;
+       Eina_Bool state = elm_check_state_get(obj);
+       if (en)
+       {
+               if (state)
+               {
+                       elm_entry_context_menu_item_add(en, "Translate", NULL, ELM_ICON_STANDARD, NULL, NULL);
+               }
+               else
+               {
+                       elm_entry_context_menu_clear(en);
+               }
+       }
+}
+
+static void entry_translate_item(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *en, *check;
+       Evas_Object *lay;
+
+       if (ad == NULL) return;
+
+       lay = elm_layout_add(ad->nf);
+       evas_object_size_hint_weight_set(lay, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_layout_file_set(lay, ELM_DEMO_EDJ, "entry_test_translate");
+
+       elm_naviframe_item_push(ad->nf, _("Enable/Disable Translate item"), NULL, NULL, lay, NULL);
+
+       en = elm_entry_add(ad->nf);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_AUTO,
+                                                       ELM_SCROLLER_POLICY_AUTO);
+
+       Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+       ecore_imf_context_input_panel_event_callback_add(imf_context,
+                                                       ECORE_IMF_INPUT_PANEL_STATE_EVENT,
+                                                       _input_panel_event_callback,
+                                                       NULL);
+
+       elm_entry_single_line_set(en, EINA_FALSE);
+       elm_entry_entry_set(en, "This is an example of entry. You can enable/disable translate item in copy/paste popup.");
+       evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(en);
+       elm_object_part_content_set(lay, "entry_part", en);
+
+       check = elm_check_add(ad->nf);
+       elm_check_state_set(check, EINA_TRUE);
+       elm_object_text_set(check, "Enable Translate item");
+       evas_object_smart_callback_add(check, "changed", _check_translate_changed_cb, en);
+       elm_object_part_content_set(lay, "check_part", check);
+}
+
+/* UI function to create entries */
+void entry_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *list;
+       Elm_Object_Item *navi_it;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+
+       elm_list_item_append(list, "Password", NULL, NULL, password_cb, ad);
+       elm_list_item_append(list, "Scrolled_entry", NULL, NULL,
+                            single_line_scrolled_entry, ad);
+       elm_list_item_append(list, "Entry_multiline", NULL, NULL,
+                            entry_multiline, ad);
+       elm_list_item_append(list, "Copy & Paste", NULL, NULL,
+                            entry_copy_paste, ad);
+       elm_list_item_append(list, "Autocapitalization", NULL, NULL,
+                            entry_autocapital, ad);
+       elm_list_item_append(list, "Change Text Size", NULL, NULL,
+                            entry_change_text_size, ad);
+       elm_list_item_append(list, "Entry with light theme", NULL, NULL,
+                            light_theme_entry, ad);
+       elm_list_item_append(list, "Enable/Disable Translate item", NULL, NULL,
+                            entry_translate_item, ad);
+       elm_list_go(list);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Entry"), NULL, NULL, list, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, ad->conform);
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,on", _show_title_toolbar, ad->nf);
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,off", _hide_title_toolbar, ad->nf);
+}
diff --git a/live.viewer/dbox.app/src/fake_tizen.c b/live.viewer/dbox.app/src/fake_tizen.c
new file mode 100644 (file)
index 0000000..8fca9e0
--- /dev/null
@@ -0,0 +1,61 @@
+#include <Elementary.h>
+#include "fake-tizen.h"
+
+
+void appcore_set_event_callback(int event, FakeCb fake_cb, void *data)
+{
+       return;
+}
+
+int appcore_measure_time()
+{
+       return 0;
+}
+
+void appcore_measure_start()
+{
+       return;
+}
+
+int  appcore_measure_time_from(const char *str)
+{
+       return 0;
+}
+
+void appcore_set_rotation_cb(int (*_rotation_cb)(enum appcore_rm mode, void *data), void *data)
+{
+       return;
+}
+
+void appcore_set_i18n(const char *pkg, const char* locale)
+{
+       return;
+}
+
+int appcore_efl_main(const char *pkg, int *argc, char **argv, struct appcore_ops *ops)
+{
+       elm_init(*argc, argv);
+       ops->create(ops->data);
+       elm_run();
+       return 0;
+}
+
+char *vconf_get_str(const char *in_key)
+{
+       return NULL;
+}
+
+void vconf_get_int(const char *key, int *value)
+{
+       *value = 1;
+}
+
+int vconf_ignore_key_changed(int size, void (*func)(void))
+{
+       return -1;
+}
+
+int vconf_notify_key_changed(int size, void (*func)(void))
+{
+       return -1;
+}
diff --git a/live.viewer/dbox.app/src/fastscroll.c b/live.viewer/dbox.app/src/fastscroll.c
new file mode 100644 (file)
index 0000000..f9b770e
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "fastscroll.h"
+#include <locale.h>
+
+/*********************************************************
+  Fastscroll
+ ********************************************************/
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void _index_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_index_item_selected_set(event_info, EINA_FALSE);
+}
+
+static void
+_index_changed_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+       // this is called on every change, no matter how often
+//     elm_genlist_item_bring_in(elm_object_item_data_get(event_info),
+//             ELM_GENLIST_ITEM_SCROLLTO_TOP);
+}
+
+static void _index_level_up_cb(void *data , Evas_Object *obj , void *event_info)
+{
+       const Elm_Object_Item *it, *new_item;
+       const Elm_Object_Item *index_obj;
+       char buf[27], index1_letter, *index0_letter;
+       int i = 0, j = 0, k, index, flag = 0;
+       int level = elm_index_item_level_get(obj);
+
+       index_obj = elm_index_selected_item_get(obj, level - 1);
+       index0_letter =elm_index_item_letter_get(index_obj);
+       for(i = 0; i < 5; i++)
+       {
+               char buf[32];
+               snprintf(buf, sizeof(buf), "%c", index0_letter[0] + i + 1);
+               if(buf[0] >90 || buf[0] < 65)
+               {
+                       j = 0;
+                       k = 65;
+                       while(i <5)
+                       {
+                               snprintf(buf, sizeof(buf), "%c", k + j);
+                               elm_index_item_append(obj, buf, NULL, NULL);
+                               i++;
+                               j++;
+                       }
+                       break;
+               }
+               elm_index_item_append(obj, buf, NULL, NULL);
+       }
+       elm_index_level_go(obj, 1);
+}
+
+static Evas_Object* _create_fastscroll(Evas_Object* parent, Evas_Object* scroller)
+{
+       Evas_Object *layout, *index;
+       int i = 0, j, len;
+       char *str;
+       char buf[PATH_MAX] = {0, };
+       Eina_Unicode uni;
+       Elm_Object_Item *it;
+       const char *locale;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "application", "fastscroll");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_content_set(scroller, layout);
+
+       index = elm_index_add(layout);
+       elm_object_part_content_set(layout, "elm.swallow.fastscroll", index);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_index_omit_enabled_set(index, EINA_TRUE);
+
+       //1. Special character & Numbers
+       elm_index_item_append(index, "#", NULL, NULL);
+
+       //2. Local language
+       str = dgettext("efl-assist", "IDS_EA_BODY_ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+       len = strlen(str);
+
+       while (i < len)
+       {
+               j = i;
+               uni = eina_unicode_utf8_get_next(str, &i);
+               snprintf(buf, i - j + 1, "%s", str + j);
+               buf[i - j + 1] = 0;
+
+               it = elm_index_item_append(index, buf, NULL, NULL);
+               elm_index_item_priority_set(it, 0);
+       }
+
+       //3. English - in case of non-latin
+       locale = vconf_get_str(VCONFKEY_LANGSET);
+       if (!ea_locale_latin_get(locale))
+       {
+               str = dgettext("efl-assist", "IDS_EA_BODY_ABCDEFGHIJKLMNOPQRSTUVWXYZ_SECOND");
+               len = strlen(str);
+
+               i = 0;
+               while (i < len)
+               {
+                       j = i;
+                       uni = eina_unicode_utf8_get_next(str, &i);
+                       snprintf(buf, i - j + 1, "%s", str + j);
+                       buf[i - j + 1] = 0;
+
+                       it = elm_index_item_append(index, buf, NULL, NULL);
+                       elm_index_item_priority_set(it, 1);
+               }
+       }
+
+       elm_index_level_go(index, 0);
+       elm_index_item_level_set(index,1);
+
+       evas_object_smart_callback_add(index, "selected", _index_selected, NULL);
+       evas_object_smart_callback_add(index, "level,up", _index_level_up_cb, NULL);
+       evas_object_smart_callback_add(index, "changed", _index_changed_cb, NULL);
+
+       return index;
+}
+
+void _language_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       int i = 0, j, len;
+       char *str;
+       char buf[PATH_MAX] = {0, };
+       Eina_Unicode uni;
+       Elm_Object_Item *it;
+       const char *locale;
+
+       elm_index_item_clear(obj);
+
+       //1. Special character & Numbers
+       elm_index_item_append(obj, "#", NULL, NULL);
+
+       //2. Local language
+       str = dgettext("efl-assist", "IDS_EA_BODY_ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+       len = strlen(str);
+
+       while (i < len)
+       {
+               j = i;
+               uni = eina_unicode_utf8_get_next(str, &i);
+               snprintf(buf, i - j + 1, "%s", str + j);
+               buf[i - j + 1] = 0;
+
+               it = elm_index_item_append(obj, buf, NULL, NULL);
+               elm_index_item_priority_set(it, 0);
+       }
+
+       //3. English - in case of non-latin
+       locale = vconf_get_str(VCONFKEY_LANGSET);
+       if (!ea_locale_latin_get(locale))
+       {
+               str = dgettext("efl-assist", "IDS_EA_BODY_ABCDEFGHIJKLMNOPQRSTUVWXYZ_SECOND");
+               len = strlen(str);
+
+               i = 0;
+               while (i < len)
+               {
+                       j = i;
+                       uni = eina_unicode_utf8_get_next(str, &i);
+                       snprintf(buf, i - j + 1, "%s", str + j);
+                       buf[i - j + 1] = 0;
+
+                       it = elm_index_item_append(obj, buf, NULL, NULL);
+                       elm_index_item_priority_set(it, 1);
+               }
+       }
+
+       elm_index_level_go(obj, 0);
+}
+
+void
+fastscroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *scroller, *index;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Fastscroll"), NULL, NULL, scroller, NULL);
+
+       index = _create_fastscroll(ad->nf, scroller);
+       evas_object_smart_callback_add(index, "language,changed", _language_changed, index);
+}
diff --git a/live.viewer/dbox.app/src/floating.c b/live.viewer/dbox.app/src/floating.c
new file mode 100644 (file)
index 0000000..f29dafb
--- /dev/null
@@ -0,0 +1,444 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "floating.h"
+
+#include <Ecore_X.h>
+
+/*********************************************************
+ floating test
+ ********************************************************/
+
+/* variables */
+typedef struct _Floating_Info Floating_Info;
+struct _Floating_Info
+{
+       Ecore_X_Window xwin;
+
+       Evas_Object *tb;
+       Evas_Object *rect_tl;
+       Evas_Object *rect_t;
+       Evas_Object *rect_tr;
+       Evas_Object *rect_l;
+       Evas_Object *rect_r;
+       Evas_Object *rect_bl;
+       Evas_Object *rect_b;
+       Evas_Object *rect_br;
+
+       Eina_Bool is_shown;
+};
+
+Floating_Info *g_floating_info;
+
+
+/* functions */
+ static void _show_move_resize_rect(void)
+{
+       if (g_floating_info)
+       {
+               evas_object_show(g_floating_info->tb);
+       }
+}
+
+static void _hide_move_resize_rect(void)
+{
+       if (g_floating_info)
+       {
+               evas_object_hide(g_floating_info->tb);
+       }
+}
+
+static void _button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *btn = (Evas_Object*)data;
+
+       if (g_floating_info->is_shown)
+       {
+               // Hide Rect
+               _hide_move_resize_rect();
+
+               //change text to SHOW
+               elm_object_text_set(btn, _("Enable Move/Resize") );
+       }
+       else
+       {
+               // Show Rect
+               _show_move_resize_rect();
+
+               //change text to Hide
+               elm_object_text_set(btn, _("Disable Move/Resize") );
+       }
+
+       g_floating_info->is_shown = !g_floating_info->is_shown;
+}
+
+static Evas_Object *_create_scroller(Evas_Object * parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static Evas_Object *_create_button(void *data, Evas_Object *layout)
+{
+       struct appdata *ad;
+       Evas_Object *btn;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return NULL;
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_default", btn);
+       elm_object_style_set(btn, "sweep");
+
+       if (g_floating_info->is_shown)
+       {
+               elm_object_text_set(btn, _("Disable Move/Resize") );
+               _show_move_resize_rect();
+       }
+       else
+       {
+               elm_object_text_set(btn, _("Enable Move/Resize") );
+               _hide_move_resize_rect();
+       }
+
+       evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, btn);
+       evas_object_show(btn);
+
+       return layout;
+}
+
+static void _iconic_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       elm_win_iconified_set(ad->win_main, EINA_TRUE);
+}
+
+static Evas_Object *_create_button2(void *data, Evas_Object *layout)
+{
+       struct appdata *ad;
+       Evas_Object *btn;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return NULL;
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_default2", btn);
+       elm_object_style_set(btn, "sweep");
+
+       elm_object_text_set(btn, _("Change to ICONIC") );
+
+       evas_object_smart_callback_add(btn, "clicked", _iconic_button_clicked_cb, ad);
+       evas_object_show(btn);
+
+       return layout;
+}
+
+static void _begin_act(void *data, Evas_Event_Mouse_Down *ev, int act)
+{
+       struct appdata *ad;
+       Ecore_X_Window xwin;
+       int x = 0, y = 0;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       xwin = elm_win_xwindow_get(ad->win_main);
+
+       ecore_x_pointer_last_xy_get(&x, &y);
+       ecore_x_mouse_up_send(xwin, x, y, ev->button);
+       ecore_x_pointer_ungrab();
+
+       // request to resize window
+       ecore_x_netwm_moveresize_request_send(xwin, x, y, act, ev->button);
+}
+
+static void _tl_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_TL);
+}
+
+static void _t_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_MOVE);
+}
+
+static void _tr_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_TR);
+}
+
+static void _l_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_L);
+}
+
+static void _r_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_R);
+}
+
+static void _bl_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_BL);
+}
+
+static void _b_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_B);
+}
+
+static void _br_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       _begin_act(data, event_info, ECORE_X_NETWM_DIRECTION_SIZE_BR);
+}
+
+static Eina_Bool _create_floating_mode_info(void *data)
+{
+       struct appdata  *ad;
+       Evas_Object *parent;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return EINA_FALSE;
+
+       if (!g_floating_info)
+       {
+               g_floating_info = calloc(sizeof(Floating_Info), 1);
+               if (!g_floating_info) return EINA_FALSE;
+
+               g_floating_info->xwin = elm_win_xwindow_get(ad->win_main);
+               g_floating_info->is_shown = EINA_TRUE;
+
+               parent = ad->win_main;
+
+               g_floating_info->tb = elm_table_add(parent);
+               elm_win_resize_object_add(parent, g_floating_info->tb);
+               evas_object_size_hint_weight_set(g_floating_info->tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_fill_set(g_floating_info->tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               g_floating_info->rect_tl = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_tl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_tl, 0.0, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_tl, 32, 32);
+               evas_object_color_set(g_floating_info->rect_tl, 128, 0, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_tl, 0, 0, 1, 1);
+               evas_object_event_callback_add(g_floating_info->rect_tl, EVAS_CALLBACK_MOUSE_DOWN, _tl_down, ad);
+               evas_object_show(g_floating_info->rect_tl);
+
+               g_floating_info->rect_t = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_t, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_t, EVAS_HINT_EXPAND, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_t, 32, 32);
+               evas_object_color_set(g_floating_info->rect_t, 0, 64, 128, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_t, 1, 0, 3, 1);
+               evas_object_event_callback_add(g_floating_info->rect_t, EVAS_CALLBACK_MOUSE_DOWN, _t_down, ad);
+               evas_object_show(g_floating_info->rect_t);
+
+               g_floating_info->rect_tr = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_tr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_tr, 0.0, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_tr, 32, 32);
+               evas_object_color_set(g_floating_info->rect_tr, 128, 0, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_tr, 4, 0, 1, 1);
+               evas_object_event_callback_add(g_floating_info->rect_tr, EVAS_CALLBACK_MOUSE_DOWN, _tr_down, ad);
+               evas_object_show(g_floating_info->rect_tr);
+
+               g_floating_info->rect_l = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_l, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_l, 0.0, EVAS_HINT_EXPAND);
+               evas_object_size_hint_min_set(g_floating_info->rect_l, 32, 32);
+               evas_object_color_set(g_floating_info->rect_l, 128, 64, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_l, 0, 1, 1, 2);
+               evas_object_event_callback_add(g_floating_info->rect_l, EVAS_CALLBACK_MOUSE_DOWN, _l_down, ad);
+               evas_object_show(g_floating_info->rect_l);
+
+               g_floating_info->rect_r = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_r, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_r, 0.0, EVAS_HINT_EXPAND);
+               evas_object_size_hint_min_set(g_floating_info->rect_r, 32, 32);
+               evas_object_color_set(g_floating_info->rect_r, 128, 64, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_r, 4, 1, 1, 2);
+               evas_object_event_callback_add(g_floating_info->rect_r, EVAS_CALLBACK_MOUSE_DOWN, _r_down, ad);
+               evas_object_show(g_floating_info->rect_r);
+
+               g_floating_info->rect_bl = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_bl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_bl, 0.0, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_bl, 32, 32);
+               evas_object_color_set(g_floating_info->rect_bl, 128, 0, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_bl, 0, 3, 1, 1);
+               evas_object_event_callback_add(g_floating_info->rect_bl, EVAS_CALLBACK_MOUSE_DOWN, _bl_down, ad);
+               evas_object_show(g_floating_info->rect_bl);
+
+               g_floating_info->rect_b = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_b, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_b, EVAS_HINT_EXPAND, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_b, 32, 32);
+               evas_object_color_set(g_floating_info->rect_b, 128, 64, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_b, 1, 3, 3, 1);
+               evas_object_event_callback_add(g_floating_info->rect_b, EVAS_CALLBACK_MOUSE_DOWN, _b_down, ad);
+               evas_object_show(g_floating_info->rect_b);
+
+               g_floating_info->rect_br = evas_object_rectangle_add(evas_object_evas_get(parent));
+               evas_object_size_hint_align_set(g_floating_info->rect_br, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(g_floating_info->rect_br, 0.0, 0.0);
+               evas_object_size_hint_min_set(g_floating_info->rect_br, 32, 32);
+               evas_object_color_set(g_floating_info->rect_br, 128, 0, 0, 128);
+               elm_table_pack(g_floating_info->tb, g_floating_info->rect_br, 4, 3, 1, 1);
+               evas_object_event_callback_add(g_floating_info->rect_br, EVAS_CALLBACK_MOUSE_DOWN, _br_down, ad);
+               evas_object_show(g_floating_info->rect_br);
+
+       }
+
+       return EINA_TRUE;
+}
+
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (it == NULL)
+       {
+               printf("list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Eina_Bool _create_floating_ui(void *data)
+{
+       struct appdata *ad;
+       Eina_Bool ret;
+       Evas_Object *scroller;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return EINA_FALSE;
+
+       ret = _create_floating_mode_info(ad);
+       if (!ret) return EINA_FALSE;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Floating Mode"), NULL, NULL, scroller, NULL);
+
+       Evas_Object *layout;
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/floating");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout_inner = _create_button(ad, layout);
+       elm_object_content_set(scroller, layout_inner);
+
+       layout_inner = _create_button2(ad, layout);
+       elm_object_content_set(scroller, layout_inner);
+
+       return EINA_TRUE;
+}
+
+static void _use_case_floating_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Eina_Bool is_floating;
+       Eina_Bool ret;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       ret = _create_floating_ui(ad);
+       if (!ret) return;
+
+       is_floating = elm_win_floating_mode_get(ad->win_main);
+       if (!is_floating)
+       {
+               elm_win_floating_mode_set(ad->win_main, EINA_TRUE);
+               evas_object_resize(ad->win_main, 500, 600);
+       }
+}
+
+static void _use_case_floating_move_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Eina_Bool is_floating;
+       Eina_Bool ret;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       ret = _create_floating_ui(ad);
+       if (!ret) return;
+
+       is_floating = elm_win_floating_mode_get(ad->win_main);
+       if (!is_floating)
+       {
+               elm_win_floating_mode_set(ad->win_main, EINA_TRUE);
+               evas_object_move(ad->win_main, 100, 100);
+               evas_object_resize(ad->win_main, 500, 600);
+       }
+       else
+       {
+               evas_object_move(ad->win_main, 100, 100);
+       }
+}
+
+static void _use_case_normal_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Eina_Bool is_floating;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       is_floating = elm_win_floating_mode_get(ad->win_main);
+       if (is_floating)
+       {
+               elm_win_floating_mode_set(ad->win_main, EINA_FALSE);
+       }
+}
+
+void floating_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       Evas_Object  *list;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+
+       elm_list_item_append(list, "Floating Mode", NULL, NULL,
+                       _use_case_floating_cb, ad);
+       elm_list_item_append(list, "Floating Mode with Move", NULL, NULL,
+                       _use_case_floating_move_cb, ad);
+       elm_list_item_append(list, "Normal Mode", NULL, NULL,
+                       _use_case_normal_cb, ad);
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Floating Test"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/fonteffecttest.c b/live.viewer/dbox.app/src/fonteffecttest.c
new file mode 100644 (file)
index 0000000..3f20c53
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+/*********************************************************
+  Font Effect Test
+ ********************************************************/
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static Evas_Object* _create_fonteffecttest(Evas_Object* parent)
+{
+       Evas_Object *layout = NULL;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "group_fonteffecttest");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+#if 0 // TC 0: Normal case
+       // text
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Tizen:style=Bold TEXT"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Tizen:style=Roman TEXT"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Tizen:style=Medium TEXT"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Bold TEXTBLOCK"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("<font color=#00FF00>Ro</font><font color=#0000FF>man</font> <font color=#FF0000><b>TEXT</b>BLOCK</font>"));
+       snprintf(buf, sizeof(buf), "<font_size=35>Fo</font_size><font_size=45>nt Si</font_size><font_size=60>ze Test</font_size>");
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _(buf));
+       snprintf(buf, sizeof(buf), "<font_size=%d>Fo</font_size><font_size=%d>nt Si</font_size><font_size=%d>ze Test</font_size>", (int)(35 * scale_factor), (int)(45 * scale_factor), (int)(60 * scale_factor));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _(buf));
+#endif
+
+#if 0 // TC 1: Same font and size, Regular in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Regular,Italic,28 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Regular,Normal,28 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Regular,Italic,28 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Regular,Normal,28 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Regular,Italic,28 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Regular,Normal,28 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Regular,Italic,28 TB"));
+#endif
+
+#if 0 // TC 2: Same font and size, Medium in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Medium,Italic,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Medium,Normal,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Medium,Italic,30 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Medium,Normal,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Medium,Italic,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Medium,Normal,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Medium,Italic,30 TB"));
+#endif
+
+#if 0 // TC 3: Same font and different size, Medium in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Medium,Italic,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Medium,Normal,35 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Medium,Italic,40 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Medium,Normal,25 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Medium,Italic,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Medium,Normal,35 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Medium,Italic,40 TB"));
+#endif
+
+#if 0 // TC 4: Same font and different size, Medium in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Medium,Italic,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Regular,Italic,35 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Bold,Italic,40 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Medium,Italic,25 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Regular,Italic,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Bold,Italic,35 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Medium,Normal,40 TB"));
+#endif
+
+#if 0 // TC 5: Different font, different size, and same Italic style, Regular in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Arial,Regular,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Georgia,Regular,35 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Helvetica,Regular,40 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Arial,Regular,25 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Georgia,Regular,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Helvetica,Regualr,35 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Times,Regular,40 TB"));
+#endif
+
+#if 1 // TC 6: Different font, different size, and same Italic style, Regular and Bold in a layout
+       // textobject
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Arial,Regular,I,30 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Georgia,Regular,I,35 TO"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Helvetica,Bold,I,40 TO"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Arial,Regular,I,25 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("Georgia,Regular,I,30 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _("Helvetica,Bold,I,35 TB"));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _("Times,Regular,I,40 TB"));
+#endif
+
+
+       // strike
+       edje_object_part_text_set(_EDJ(layout), "strike1", _("<strikethrough=on strikethrough_color=#FF0000>strike test</strikethrough>"));
+       edje_object_part_text_set(_EDJ(layout), "strike2", _("<strike>strike simple tag test</strike>"));
+
+       return layout;
+}
+
+void fonteffecttest_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout, *scroller;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Font Effect Test"), NULL, NULL, scroller, NULL);
+
+       layout = _create_fonteffecttest(ad->nf);
+       elm_object_content_set(scroller, layout);
+}
diff --git a/live.viewer/dbox.app/src/fonttest.c b/live.viewer/dbox.app/src/fonttest.c
new file mode 100644 (file)
index 0000000..453c36f
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+/*********************************************************
+  Font Test
+ ********************************************************/
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static Evas_Object* _create_fonttest(Evas_Object* parent)
+{
+       Evas_Object *layout = NULL;
+       double scale_factor = elm_config_scale_get();
+       char buf[PATH_MAX] = {0, };
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "group_fonttest");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       // text
+       edje_object_part_text_set(_EDJ(layout), "text1", _("Tizen:style=Bold TEXT"));
+       edje_object_part_text_set(_EDJ(layout), "text2", _("Tizen:style=Roman TEXT"));
+       edje_object_part_text_set(_EDJ(layout), "text3", _("Tizen:style=Medium TEXT"));
+
+       // textblock
+       edje_object_part_text_set(_EDJ(layout), "textblock1", _("Bold TEXTBLOCK"));
+       edje_object_part_text_set(_EDJ(layout), "textblock2", _("<font color=#00FF00>Ro</font><font color=#0000FF>man</font> <font color=#FF0000><b>TEXT</b>BLOCK</font>"));
+       snprintf(buf, sizeof(buf), "<font_size=35>Fo</font_size><font_size=45>nt Si</font_size><font_size=60>ze Test</font_size>");
+       edje_object_part_text_set(_EDJ(layout), "textblock3", _(buf));
+       snprintf(buf, sizeof(buf), "<font_size=%d>Fo</font_size><font_size=%d>nt Si</font_size><font_size=%d>ze Test</font_size>", (int)(35 * scale_factor), (int)(45 * scale_factor), (int)(60 * scale_factor));
+       edje_object_part_text_set(_EDJ(layout), "textblock4", _(buf));
+
+       // strike
+       edje_object_part_text_set(_EDJ(layout), "strike1", _("<strikethrough=on strikethrough_color=#FF0000>strike test</strikethrough>"));
+       edje_object_part_text_set(_EDJ(layout), "strike2", _("<strike>strike simple tag test</strike>"));
+
+       return layout;
+}
+
+void fonttest_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout, *scroller;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Font Test"), NULL, NULL, scroller, NULL);
+
+       layout = _create_fonttest(ad->nf);
+       elm_object_content_set(scroller, layout);
+}
diff --git a/live.viewer/dbox.app/src/gengrid.c b/live.viewer/dbox.app/src/gengrid.c
new file mode 100644 (file)
index 0000000..f742025
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+
+#include "gengrid.h"
+
+static Elm_Genlist_Item_Class itc={0,};
+static struct appdata *menu_ad;
+
+static struct _menu_item menu_its[] = {
+       { "Gengrid GalleryGrid Style", gengrid_gallerygrid_cb },
+       { "Gengrid MyfileGrid Style", gengrid_myfilegrid_cb },
+       { "Gengrid MyfileGridtext Style", gengrid_myfilegridtext_cb },
+       { "Group Style Sample", gengrid_groupindex_cb },
+       { "Customized Style Sample", gengrid_theme_cb },
+       { "Customized InCheck Sample", gengrid_incheck_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(menu_its[index].name);
+       }
+
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int)data;
+
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+       menu_its[index].func(menu_ad, NULL, NULL);
+       return;
+}
+
+static Evas_Object* _create_genlist(struct appdata* ad)
+{
+       Evas_Object *genlist;
+       int index;
+
+       if (ad == NULL) return NULL;
+
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       genlist = elm_genlist_add(ad->nf);
+
+       for (index = 0; menu_its[index].name; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *)index, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_sel, (void *)index);
+       }
+
+       return genlist;
+}
+
+void gengrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       menu_ad = ad;
+       genlist = _create_genlist(ad);
+       elm_naviframe_item_push(ad->nf, _("Gengrid"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/gengrid_customized_incheck.c b/live.viewer/dbox.app/src/gengrid_customized_incheck.c
new file mode 100644 (file)
index 0000000..3f85bbf
--- /dev/null
@@ -0,0 +1,542 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define IMAGE_MAX 79
+#define VIEW_MODE 0
+#define EDIT_MODE 1
+
+#define FONT_SIZE_INDEX_SMALL 24
+#define FONT_SIZE_INDEX_NORMAL 35
+#define FONT_SIZE_INDEX_LARGE 55
+#define FONT_SIZE_INDEX_HUGE 75
+#define FONT_SIZE_INDEX_GIANT 92
+#define BASE_GENGRID_HEIGHT 76 //As per reference of UX of Genlist Group Index.
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *text;
+       const char *path;
+       int index;
+       int checked;
+} Testitem;
+
+typedef enum {
+       SIZE_INDEX_SMALL = 0,
+       SIZE_INDEX_NORMAL,
+       SIZE_INDEX_LARGE,
+       SIZE_INDEX_HUGE,
+       SIZE_INDEX_GIANT
+} font_size_index;
+
+static int mode;
+static int total_count;
+static int checked_count;
+static Eina_Bool select_all_checked = EINA_FALSE;
+static Eina_Bool longpressed = EINA_FALSE;
+static Evas_Object *gengrid, *box;
+static Evas_Object *select_all_layout, *select_all_checkbox;
+static Elm_Gengrid_Item_Class *gic;
+static Elm_Gengrid_Item_Class ggic;
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *create_edit_toolbar(struct appdata *ad);
+static Evas_Object *create_del_done_toolbar(struct appdata *ad);
+
+char *index_names[] = {"Family", "Company", "Friend", "University", "Etc", NULL};
+
+static void
+grid_moved(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *moved_item = (Elm_Object_Item *)event_info;
+
+       printf("moved item index = %d\n", elm_gengrid_item_index_get(moved_item));
+}
+
+static void
+grid_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       const Elm_Gengrid_Item_Class *itc;
+       itc = elm_gengrid_item_item_class_get(event_info);
+
+       printf("item realized: %d\n", elm_gengrid_item_index_get(event_info));
+       if (mode == EDIT_MODE && (strcmp(itc->item_style, "group_index")))
+       {
+               Testitem *ti = (Testitem *)elm_object_item_data_get(event_info);
+               elm_object_item_signal_emit(event_info, "check,state,show", "");
+               if (ti->checked)
+                        elm_object_item_signal_emit(event_info, "check,state,on,no_effect", "");
+       }
+}
+
+static void
+grid_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+       longpressed = (mode == EDIT_MODE ? EINA_TRUE : EINA_FALSE);
+}
+
+static void
+_item_check_changed_cb(void *data, void *event_info)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (ti->checked)
+       {
+               checked_count++;
+               elm_object_item_signal_emit(ti->item, "check,state,on", "");
+       }
+       else
+       {
+               checked_count--;
+               elm_object_item_signal_emit(ti->item, "check,state,off", "");
+       }
+
+       if (select_all_layout) {
+               if (total_count == checked_count)
+                       select_all_checked = EINA_TRUE;
+               else
+                       select_all_checked = EINA_FALSE;
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+       }
+
+}
+
+static void
+_text_part_mouse_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       printf("text_clicked!!\n");
+}
+
+static char *
+grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.text"))
+               return strdup(ti->text);
+
+       return NULL;
+}
+
+static char *
+grid_groupindex_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       if (!strcmp(part, "elm.text")) {
+               return strdup(index_names[index]);
+       }
+       return NULL;
+}
+
+static void
+_size_set_on_font_resize() {
+       int x, h, w;
+       font_size_index font_index;
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       double scale = elm_config_scale_get();
+       font_index = x;
+
+       switch (font_index) {
+               case SIZE_INDEX_SMALL :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_SMALL + 1 /*extra pixel for overlapp check*/) * scale);
+                       break;
+               case SIZE_INDEX_NORMAL :
+                       h = (int)(BASE_GENGRID_HEIGHT * scale);
+                       break;
+               case SIZE_INDEX_LARGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_LARGE) * scale);
+                       break;
+               case SIZE_INDEX_HUGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_HUGE) * scale);
+                       break;
+               case SIZE_INDEX_GIANT :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_GIANT) * scale);
+                       break;
+               default:
+                       h = (int)(BASE_GENGRID_HEIGHT * scale ); //If no font size obtained, set the height to maximum
+       }
+       w = (int)(720 * scale);
+       elm_gengrid_group_item_size_set(gengrid, w, h);
+}
+
+static void
+_vconf_size_key_changed_cb()
+{
+       _size_set_on_font_resize();
+}
+
+static Evas_Object *
+grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.block") && mode == EDIT_MODE) {
+               Evas_Object *layout = elm_layout_add(obj);
+               elm_layout_theme_set(layout, "gengrid", "item", "block/default");
+               evas_object_propagate_events_set(layout, 0);
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _text_part_mouse_clicked_cb, ti);
+               return layout;
+       }
+
+       return NULL;
+}
+
+static void
+_show_selected_items(Testitem *ti)
+{
+       /*const Eina_List* list = elm_gengrid_selected_items_get(grid);
+       const Eina_List* l = NULL;
+       Elm_Object_Item *recv = NULL;
+       printf("--------------------------\nSelected Items :");
+       EINA_LIST_FOREACH(list, l, recv) {
+               Testitem *ti = (Testitem *)elm_object_item_data_get(recv);
+               printf("%d ",ti->index);
+       }
+       printf("\n--------------------------\n");*/
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Testitem *ti = (Testitem *)data;
+
+       printf("item selected: %p\n", event_info);
+
+       _show_selected_items(ti);
+       elm_gengrid_item_selected_set(ti->item, EINA_FALSE);
+
+    if (longpressed) {
+               longpressed = EINA_FALSE;
+               return;
+       }
+
+       if (mode == EDIT_MODE) {
+               ti->checked = !ti->checked;
+               _item_check_changed_cb(data, event_info);
+       }
+
+}
+
+static void
+_create_gengrid (void *data, Elm_Theme *th)
+{
+       struct appdata *ad = (struct appdata *)data;
+       int i, j, n, x, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX*25];
+
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       gengrid = elm_gengrid_add(ad->nf);
+       elm_object_theme_set(gengrid, th);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       w = h = 0;
+
+       double scale = elm_config_scale_get();
+       w = h = (int)(176 * scale); //176 as per UX ver 0.6
+       elm_gengrid_item_size_set(gengrid, w, h);
+       _size_set_on_font_resize();
+       elm_gengrid_align_set(gengrid, 0.5, 0.0);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+       elm_gengrid_cache_mode_set(gengrid, EINA_TRUE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       evas_object_smart_callback_add(gengrid, "moved", grid_moved, NULL);
+       evas_object_smart_callback_add(gengrid, "realized", grid_realized, NULL);
+       evas_object_smart_callback_add(gengrid, "longpressed", grid_longpress, NULL);
+
+       /******text myfile type******/
+       gic = elm_gengrid_item_class_new();
+       gic->item_style = "elm_demo_tizen/customized_incheck_style";
+       gic->func.text_get = grid_text_get;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       ggic.item_style = "group_index";
+       ggic.func.text_get = grid_groupindex_text_get;
+       ggic.func.content_get = NULL;
+       ggic.func.state_get = NULL;
+       ggic.func.del = NULL;
+
+       for (j = 0; j < 25; j++) {
+               for (i = 0; i < IMAGE_MAX; i++) {
+                       n = i+(j*IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i+1);
+                       ti[n].index = n;
+                       ti[n].path = eina_stringshare_add(buf);
+                       if (i == 0 || i == 11 || i == 22 || i == 33 || i == 44)
+                       {
+                               ti[i].item = elm_gengrid_item_append(gengrid, &ggic, (void *)(i%10), NULL, NULL);
+                               elm_gengrid_item_select_mode_set(ti[i].item, ELM_OBJECT_SELECT_MODE_NONE);
+                       } else
+                       {
+                               ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected, &(ti[n]));
+                               if (n%4 == 0)
+                                       ti[n].text = strdup("DavidRobinson.jpg");
+                               else if (n%4 == 1)
+                                       ti[n].text = strdup("CaptainFantasticFasterThanSupermanSpidermanBatmanWolverineHulkAndTheFlashCombined.jpg");
+                               else if (n%4 == 2)
+                                       ti[n].text = strdup("1.jpg");
+                               else
+                               ti[n].text = strdup("2.jpg");
+                       }
+                       ti[n].checked = EINA_FALSE;
+               }
+       }
+
+       total_count = n + 1;
+       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb, NULL) < 0) {
+               printf("\nFail to register VCONFKEY_SETAPPL_SOUND_STATUS_BOOL key callback");
+       }
+}
+
+static void
+_check_fields_update(Eina_Bool state)
+{
+       const Elm_Gengrid_Item_Class *itc;
+       Elm_Object_Item *it;
+       Eina_List *realize_its;
+
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if (strcmp(itc->item_style, "group_index"))
+               {
+                       if (state)
+                               elm_object_item_signal_emit(it, "check,state,show", "");
+                       else
+                               elm_object_item_signal_emit(it, "check,state,hide", "");
+               }
+       }
+}
+
+static void
+_check_select_all()
+{
+       Elm_Object_Item *it;
+       Testitem *ti;
+       const Elm_Gengrid_Item_Class *itc;
+       Eina_List *realize_its;
+
+       if (select_all_checked) checked_count = total_count;
+       else checked_count = 0;
+       it = elm_gengrid_first_item_get(gengrid);
+       while(it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if (strcmp(itc->item_style,"group_index")) {
+                       ti = elm_object_item_data_get(it);
+                       if (ti) ti->checked = select_all_checked;
+               }
+               it = elm_gengrid_item_next_get(it);
+       }
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if (strcmp(itc->item_style,"group_index")) {
+                       if (select_all_checked) elm_object_item_signal_emit(it, "check,state,on", "");
+                   else elm_object_item_signal_emit(it, "check,state,off", "");
+               }
+       }
+}
+
+static void
+_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       select_all_checked = !select_all_checked;
+       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+
+       _check_select_all();
+}
+
+static void _select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _check_select_all(data);
+}
+
+static Evas_Object *create_edit_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Edit", _edit_toolbar_cb, ad);
+
+       return obj;
+}
+
+static Evas_Object *create_del_done_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Delete", _del_toolbar_cb, ad);
+       elm_toolbar_item_append(obj, NULL, "Done", _done_toolbar_cb, ad);
+
+       return obj;
+}
+
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (mode == VIEW_MODE) {
+               mode = EDIT_MODE;
+               select_all_layout = elm_layout_add(box);
+               elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_mouse_down_cb, NULL);
+
+               select_all_checkbox = elm_check_add(select_all_layout);
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+               evas_object_smart_callback_add(select_all_checkbox, "changed", _select_all_check_changed_cb, NULL);
+               evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
+               elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
+
+               elm_object_part_text_set(select_all_layout, "elm.text", "Select All");
+               elm_box_pack_start(box, select_all_layout);
+               evas_object_show(select_all_layout);
+               elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE);
+       }
+
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+    _check_fields_update(EINA_TRUE);
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_del_done_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+       Testitem *ti;
+       Elm_Object_Item *it;
+       const Elm_Gengrid_Item_Class *itc;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               ti = (Testitem *)elm_object_item_data_get(it);
+               it = elm_gengrid_item_next_get(it);
+               if((strcmp(itc->item_style, "group_index") && ((ti) && (ti->checked)))) {
+                       elm_object_item_del(ti->item);
+                       total_count--;
+                       checked_count--;
+               }
+       }
+}
+
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if(mode == EDIT_MODE){
+               mode = VIEW_MODE;
+               elm_box_unpack(box, select_all_layout);
+               evas_object_del(select_all_layout);
+               select_all_layout = NULL;
+
+               elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       }
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+    _check_fields_update(EINA_FALSE);
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_edit_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb) < 0) {
+               printf("\nFail to unregister VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE key callback");
+       }
+
+       return EINA_TRUE;
+}
+
+void
+gengrid_incheck_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       mode = VIEW_MODE;
+
+       // Add customizaed theme
+       Elm_Theme *th = elm_theme_new();
+       elm_theme_ref_set(th, NULL); // refer to default theme
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+       _create_gengrid(ad, th);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("Myfile") , NULL, NULL, box, NULL);
+
+       toolbar =  create_edit_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/gengrid_customized_theme.c b/live.viewer/dbox.app/src/gengrid_customized_theme.c
new file mode 100644 (file)
index 0000000..18422ba
--- /dev/null
@@ -0,0 +1,481 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define IMAGE_MAX    16
+#define VIEW_MODE    0
+#define EDIT_MODE    1
+#define ITEM_SIZE_W  158
+#define ITEM_SIZE_H  158
+#define PHOTO_INNER  2
+#define PHOTO_REAL_W (ITEM_SIZE_W-(2*PHOTO_INNER))
+#define PHOTO_REAL_H (ITEM_SIZE_H-(2*PHOTO_INNER))
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *path;
+       int index;
+       int checked;
+} Testitem;
+
+static int mode;
+static int total_count;
+static int checked_count;
+static Eina_Bool select_all_checked = EINA_FALSE;
+static Eina_Bool longpressed = EINA_FALSE;
+static Evas_Object *gengrid, *toolbar, *edit_btn, *box;
+static Evas_Object *select_all_layout, *select_all_checkbox;
+static Elm_Object_Item *del_btn_item;
+static Elm_Gengrid_Item_Class *gic_default, *gic_photo;
+
+static void
+grid_moved(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *moved_item = (Elm_Object_Item *)event_info;
+
+       Testitem *moved_ti = (Testitem *)elm_object_item_data_get(moved_item);
+       printf("moved item index = %d", moved_ti->index);
+
+       if (elm_gengrid_item_prev_get(moved_item)) {
+               Testitem *prev_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_prev_get(moved_item));
+               printf(", prev index = %d", prev_ti->index);
+       }
+       if (elm_gengrid_item_next_get(moved_item)) {
+               Testitem *next_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_next_get(moved_item));
+               printf(", next index = %d", next_ti->index);
+       }
+       printf("\n");
+
+       // If you want change your data, you can here.
+}
+
+static void
+grid_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+       longpressed = (mode == EDIT_MODE ? EINA_TRUE : EINA_FALSE);
+}
+
+static void
+_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (longpressed) {
+               ti->checked = !elm_check_state_get(obj);
+               elm_check_state_set(obj, ti->checked);
+               longpressed = EINA_FALSE;
+       } else {
+               ti->checked = elm_check_state_get(obj);
+
+               if (ti->checked) checked_count++;
+               else checked_count--;
+
+               if (select_all_layout) {
+                       if (total_count == checked_count)
+                               select_all_checked = EINA_TRUE;
+                       else
+                               select_all_checked = EINA_FALSE;
+
+                       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+               }
+       }
+
+       elm_gengrid_item_selected_set(ti->item, ti->checked);
+}
+
+static Evas_Object *
+grid_default_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+       if (ti->index == 0) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+           elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.end") && mode == EDIT_MODE) {
+               Evas_Object *ck = elm_check_add(obj);
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, 1);
+               elm_check_state_set(ck, ti->checked);
+               elm_gengrid_item_selected_set(ti->item, ti->checked);
+               evas_object_smart_callback_add(ck, "changed", _item_check_changed_cb, data);
+               evas_object_show(ck);
+               return ck;
+       }
+       return NULL;
+}
+
+static Evas_Object *
+grid_photo_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (ti->index == 0) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.swallow.icon")) {
+               int w, h, iw, ih;
+
+               Evas_Object *image = evas_object_image_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(image, PHOTO_REAL_W, PHOTO_REAL_H);
+               evas_object_image_file_set(image, ti->path, NULL);
+               evas_object_image_size_get(image, &w, &h);
+
+               double scale = elm_config_scale_get();
+               if (w > PHOTO_REAL_W || h > PHOTO_REAL_H)
+               {
+                       if (w >= h)
+                       {
+                               iw = PHOTO_REAL_W;
+                               ih = (int)((h * iw) / w);
+                       }
+                       else
+                       {
+                               ih = PHOTO_REAL_H;
+                               iw = (int)((w * ih) / h);
+                       }
+               }
+               else
+               {
+                       iw = w;
+                       ih = h;
+               }
+
+               iw = iw * scale;
+               ih = ih * scale;
+
+               evas_object_image_fill_set(image, 0, 0, iw, ih);
+               evas_object_resize(image, iw, ih);
+               evas_object_size_hint_min_set(image, iw, ih);
+
+               return image;
+       } else if (!strcmp(part, "elm.swallow.end") && mode == EDIT_MODE) {
+               Evas_Object *ck = elm_check_add(obj);
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, 1);
+               elm_check_state_set(ck, ti->checked);
+               elm_gengrid_item_selected_set(ti->item, ti->checked);
+               evas_object_smart_callback_add(ck, "changed", _item_check_changed_cb, data);
+               evas_object_show(ck);
+               return ck;
+       }
+
+       return NULL;
+}
+
+static void
+_show_selected_items(Testitem *ti)
+{
+       /*const Eina_List* list = elm_gengrid_selected_items_get(grid);
+       const Eina_List* l = NULL;
+       Elm_Object_Item *recv = NULL;
+       printf("--------------------------\nSelected Items :");
+       EINA_LIST_FOREACH(list, l, recv) {
+               Testitem *ti = (Testitem *)elm_object_item_data_get(recv);
+               printf("%d ",ti->index);
+       }
+       printf("\n--------------------------\n");*/
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Testitem *ti = (Testitem *)data;
+
+       _show_selected_items(ti);
+
+       if (mode == VIEW_MODE)
+               elm_gengrid_item_selected_set(ti->item, EINA_FALSE);
+}
+
+static void _on_rotation_changed(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *gengrid = data;
+       Elm_Object_Item *it;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       rot = elm_win_rotation_get(win);
+       while(it) {
+               if (rot == 90 || rot == 270)
+                       elm_gengrid_item_item_class_update(it, gic_default);
+               else
+                       elm_gengrid_item_item_class_update(it, gic_photo);
+               it = elm_gengrid_item_next_get(it);
+       }
+}
+
+static void
+_create_gengrid (void *data, Elm_Theme *th)
+{
+       struct appdata *ad = (struct appdata *)data;
+       int i;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX+6];
+
+       gengrid = elm_gengrid_add(ad->nf);
+       elm_object_theme_set(gengrid, th);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       double scale = elm_config_scale_get();
+       int w = (int)((10*scale)+(158*scale)+(10*scale)); // width 10+158+10
+       int h = (int)((24*scale)+(158*scale)); // height 24+158
+       elm_gengrid_item_size_set(gengrid, w, h);
+       elm_gengrid_align_set(gengrid, 0.0, 0.0);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       evas_object_smart_callback_add(gengrid, "moved", grid_moved, NULL);
+       evas_object_smart_callback_add(gengrid, "longpressed", grid_longpress, NULL);
+       evas_object_smart_callback_add(elm_object_top_widget_get(gengrid), "rotation,changed", _on_rotation_changed, gengrid);
+
+       gic_default = elm_gengrid_item_class_new();
+       gic_default->item_style = "elm_demo_tizen/customized_default_style";
+       gic_default->func.text_get = NULL;
+       gic_default->func.content_get = grid_default_content_get;
+       gic_default->func.state_get = NULL;
+       gic_default->func.del = NULL;
+
+       gic_photo = elm_gengrid_item_class_new();
+       gic_photo->item_style = "elm_demo_tizen/customized_photo_style";
+       gic_photo->func.text_get = NULL;
+       gic_photo->func.content_get = grid_photo_content_get;
+       gic_photo->func.state_get = NULL;
+       gic_photo->func.del = NULL;
+
+       for (i = 0; i < IMAGE_MAX; i++) {
+               snprintf(buf, sizeof(buf), "%s/Albums_Item/Albums_Item%d.jpg", ICON_DIR, i+1);
+               ti[i].index = i;
+               ti[i].path = eina_stringshare_add(buf);
+               ti[i].item = elm_gengrid_item_append(gengrid, gic_photo, &(ti[i]), _item_selected, &(ti[i]));
+               ti[i].checked = EINA_FALSE;
+       }
+
+       i++;
+       snprintf(buf, sizeof(buf), "%s/grid_image/1_raw.jpg", ICON_DIR);
+       ti[i].index = i;
+       ti[i].path = eina_stringshare_add(buf);
+       ti[i].item = elm_gengrid_item_append(gengrid, gic_photo, &(ti[i]), _item_selected, &(ti[i]));
+       ti[i].checked = EINA_FALSE;
+       i++;
+        snprintf(buf, sizeof(buf), "%s/genlist/taeyon50.jpg", ICON_DIR);
+        ti[i].index = i;
+        ti[i].path = eina_stringshare_add(buf);
+        ti[i].item = elm_gengrid_item_append(gengrid, gic_photo, &(ti[i]), _item_selected, &(ti[i]));
+        ti[i].checked = EINA_FALSE;
+       i++;
+        snprintf(buf, sizeof(buf), "%s/image_slider.png", ICON_DIR);
+        ti[i].index = i;
+        ti[i].path = eina_stringshare_add(buf);
+        ti[i].item = elm_gengrid_item_append(gengrid, gic_photo, &(ti[i]), _item_selected, &(ti[i]));
+        ti[i].checked = EINA_FALSE;
+
+       i++;
+        snprintf(buf, sizeof(buf), "%s/grid_image/3_raw.jpg", ICON_DIR);
+        ti[i].index = i;
+        ti[i].path = eina_stringshare_add(buf);
+        ti[i].item = elm_gengrid_item_append(gengrid, gic_default, &(ti[i]), _item_selected, &(ti[i]));
+        ti[i].checked = EINA_FALSE;
+
+       total_count = i + 1;
+}
+
+static void
+_check_select_all()
+{
+       Elm_Object_Item *it;
+       Testitem *ti;
+
+       if (select_all_checked) checked_count = total_count;
+       else checked_count = 0;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while(it) {
+               ti = elm_object_item_data_get(it);
+               if (ti) ti->checked = select_all_checked;
+               elm_gengrid_item_selected_set(it, select_all_checked);
+               elm_gengrid_item_update (it);
+               it = elm_gengrid_item_next_get(it);
+       }
+}
+
+static void
+_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       select_all_checked = !select_all_checked;
+       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+
+       _check_select_all();
+}
+
+static void _select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _check_select_all(data);
+}
+
+static void _delete_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Testitem *ti;
+       Elm_Object_Item *it;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               ti = (Testitem *)elm_object_item_data_get(it);
+               it = elm_gengrid_item_next_get(it);
+
+               if ((ti) && (ti->checked)) {
+                       elm_object_item_del(ti->item);
+                       total_count--;
+                       checked_count--;
+               }
+       }
+}
+
+static void
+_edit_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *del_btn;
+
+       if (mode == VIEW_MODE) {
+               mode = EDIT_MODE;
+               elm_object_text_set(edit_btn, _("Done"));
+
+               del_btn = elm_button_add(toolbar);
+               elm_object_style_set(del_btn, "style1");
+               evas_object_size_hint_weight_set(del_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(del_btn, EVAS_HINT_FILL, 0.5);
+               elm_object_text_set(del_btn, _("Delete"));
+               evas_object_smart_callback_add(del_btn, "clicked", _delete_button_cb, NULL);
+               evas_object_show(del_btn);
+
+               del_btn_item = elm_toolbar_item_prepend(toolbar, NULL, NULL, NULL, NULL);
+               elm_object_item_part_content_set(del_btn_item, "object", del_btn);
+
+               select_all_layout = elm_layout_add(box);
+               elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_mouse_down_cb, NULL);
+
+               select_all_checkbox = elm_check_add(select_all_layout);
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+               evas_object_smart_callback_add(select_all_checkbox, "changed", _select_all_check_changed_cb, NULL);
+               evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
+               elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
+
+               elm_object_part_text_set(select_all_layout, "elm.text", "Select All");
+               elm_box_pack_start(box, select_all_layout);
+               evas_object_show(select_all_layout);
+
+               elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE);
+       } else {
+               mode = VIEW_MODE;
+               elm_object_text_set(edit_btn, _("Edit"));
+
+               elm_object_item_del(del_btn_item);
+
+               elm_box_unpack(box, select_all_layout);
+               evas_object_del(select_all_layout);
+               select_all_layout = NULL;
+
+               elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       }
+
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       Elm_Theme *th = data;
+       // Free customized theme
+       elm_theme_free(th);
+
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       return EINA_TRUE;
+}
+
+void
+gengrid_theme_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *item;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       mode = VIEW_MODE;
+
+       toolbar = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_object_style_set(toolbar, "naviframe");
+
+       edit_btn = elm_button_add(toolbar);
+       evas_object_smart_callback_add(edit_btn, "clicked", _edit_btn_cb, ad);
+       elm_object_style_set(edit_btn, "style1");
+       evas_object_size_hint_weight_set(edit_btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(edit_btn, EVAS_HINT_FILL, 0.5);
+       elm_object_text_set(edit_btn, _("Edit"));
+       evas_object_show(edit_btn);
+
+       item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+       elm_object_item_part_content_set(item, "object", edit_btn);
+
+       // Add customizaed theme
+       Elm_Theme *th = elm_theme_new();
+       elm_theme_ref_set(th, NULL); // refer to default theme
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+
+       _create_gengrid(ad, th);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("Customized Style Sample") , NULL, NULL, box, NULL);
+
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, th);
+}
diff --git a/live.viewer/dbox.app/src/gengrid_default.c b/live.viewer/dbox.app/src/gengrid_default.c
new file mode 100644 (file)
index 0000000..2bb0960
--- /dev/null
@@ -0,0 +1,701 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define IMAGE_MAX 79
+#define VIEW_MODE 0
+#define EDIT_MODE 1
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *path;
+       const char *text;
+       int index;
+       int checked;
+} Testitem;
+
+typedef struct View_Data
+{
+       struct appdata *ad;
+       int w;
+       int h;
+       char *type;
+       Evas_Object *ctx;
+} View_Data;
+
+static Elm_Win_Indicator_Opacity_Mode indi_o_mode;
+static Elm_Win_Indicator_Mode indi_mode;
+static Eina_Bool overlap_mode;
+
+static int mode;
+static int total_count;
+static int checked_count;
+static Eina_Bool rotate_flag = EINA_FALSE;
+static Eina_Bool select_all_checked = EINA_FALSE;
+static Eina_Bool longpressed = EINA_FALSE;
+static Evas_Object *gengrid, *box;
+static Evas_Object *select_all_layout, *select_all_checkbox;
+static Elm_Gengrid_Item_Class *gic;
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *create_edit_toolbar(struct appdata *ad);
+static Evas_Object *create_del_done_toolbar(struct appdata *ad);
+static void _normal_indi_cb(void *data);
+static void _transparent_indi_cb(void *data);
+
+static void
+grid_moved(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *moved_item = (Elm_Object_Item *)event_info;
+
+       Testitem *moved_ti = (Testitem *)elm_object_item_data_get(moved_item);
+       printf("moved item index = %d", moved_ti->index);
+
+       if (elm_gengrid_item_prev_get(moved_item)) {
+               Testitem *prev_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_prev_get(moved_item));
+               printf(", prev index = %d", prev_ti->index);
+       }
+       if (elm_gengrid_item_next_get(moved_item)) {
+               Testitem *next_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_next_get(moved_item));
+               printf(", next index = %d", next_ti->index);
+       }
+       printf("\n");
+
+       // If you want change your data, you can here.
+}
+
+static void
+grid_longpress(void *data, Evas_Object *obj, void *ei)
+{
+       if (mode == EDIT_MODE) {
+               longpressed = EINA_TRUE;
+               printf("Item(%p) Reorder enabled\n", ei);
+       } else {
+               longpressed = EINA_FALSE;
+               printf("Item(%p) disabled\n", ei);
+       }
+
+       // If you need to cancel select status when longpress is called(e.g. popup)
+       // set elm_gengrid_item_selected_set as EINA_FALSE.
+       // elm_gengrid_item_selected_set(ei, EINA_FALSE);
+
+}
+
+static void
+_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Eina_Bool state;
+
+       state = elm_check_state_get(obj);
+
+       if (state) checked_count++;
+       else checked_count--;
+
+       if (select_all_layout) {
+               if (total_count == checked_count)
+                       select_all_checked = EINA_TRUE;
+               else
+                       select_all_checked = EINA_FALSE;
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+       }
+
+}
+
+static Evas_Object *
+grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+       Elm_Object_Item *it = elm_gengrid_last_item_get(obj);
+       int last_idx = elm_gengrid_item_index_get(it);
+
+       if (ti->index == last_idx) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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_size_hint_min_set(progressbar, 150, 150);
+                       evas_object_show(progressbar);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.end") && mode == EDIT_MODE) {
+               Evas_Object *ck = elm_check_add(obj);
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+               elm_check_state_set(ck, ti->checked);
+               evas_object_repeat_events_set(ck, EINA_TRUE);
+               elm_access_object_unregister(ck);
+
+               evas_object_show(ck);
+               return ck;
+       }
+
+       return NULL;
+}
+
+static void
+_show_selected_items(Testitem *ti)
+{
+       /*const Eina_List* list = elm_gengrid_selected_items_get(grid);
+       const Eina_List* l = NULL;
+       Elm_Object_Item *recv = NULL;
+       printf("--------------------------\nSelected Items :");
+       EINA_LIST_FOREACH(list, l, recv) {
+               Testitem *ti = (Testitem *)elm_object_item_data_get(recv);
+               printf("%d ",ti->index);
+       }
+       printf("\n--------------------------\n");*/
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ck;
+       Testitem *ti = (Testitem *)data;
+       ck = elm_object_item_part_content_get(event_info, "elm.swallow.end");
+
+       printf("item selected: %p\n", event_info);
+
+       _show_selected_items(ti);
+
+       elm_gengrid_item_selected_set(ti->item, EINA_FALSE);
+
+       if (longpressed) {
+               longpressed = EINA_FALSE;
+               return;
+       }
+
+       ti->checked = !(elm_check_state_get(ck));
+       elm_check_state_set(ck, ti->checked);
+
+       _item_check_changed_cb(data, ck, NULL);
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       printf("[%s][%d]\n", __func__, __LINE__);
+}
+
+static void
+_create_gengrid (void *data, char *type)
+{
+       struct View_Data *vd = data;
+       struct appdata *ad = vd->ad;
+       int i, j, n, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX*25];
+
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       double scale = elm_config_scale_get();
+       w = (int)(vd->w * scale); //177 as per UX ver 1.7.
+       h = (int)(vd->h * scale);
+       elm_gengrid_item_size_set(gengrid, w, h);
+       elm_gengrid_align_set(gengrid, 0.5, 0.5);
+       elm_gengrid_horizontal_set(gengrid, EINA_TRUE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       evas_object_smart_callback_add(gengrid, "moved", grid_moved, NULL);
+       evas_object_smart_callback_add(gengrid, "longpressed", grid_longpress, NULL);
+       evas_object_smart_callback_add(gengrid, "realized", _realized, NULL);
+
+       gic = elm_gengrid_item_class_new();
+       gic->item_style=type;
+
+       gic->func.text_get = NULL;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       for (j = 0; j < 25; j++) {
+               for (i = 0; i < IMAGE_MAX; i++) {
+                       n = i+(j*IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i+1);
+                       ti[n].index = n;
+                       ti[n].path = eina_stringshare_add(buf);
+                       //TODO: check the func data
+                       ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected, &(ti[n]));
+                       ti[n].checked = EINA_FALSE;
+               }
+       }
+       total_count = n + 1;
+}
+
+static void
+_check_field_update()
+{
+       Elm_Object_Item *it;
+       Eina_List *realize_its;
+
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               elm_gengrid_item_fields_update(it, "elm.swallow.end", ELM_GENGRID_ITEM_FIELD_CONTENT);
+       }
+}
+
+static void
+_check_select_all()
+{
+       Elm_Object_Item *it;
+       Testitem *ti;
+       Eina_List *realize_its;
+
+       if (select_all_checked) checked_count = total_count;
+       else checked_count = 0;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while(it) {
+               ti = elm_object_item_data_get(it);
+               if (ti) ti->checked = select_all_checked;
+               it = elm_gengrid_item_next_get(it);
+       }
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               const char *type = NULL;
+               Evas_Object *ck = elm_object_item_part_content_get(it, "elm.swallow.end");
+               if (ck) type = elm_object_widget_type_get(ck);
+               if (type && !strcmp(type, "elm_check")) {
+                       elm_check_state_set(ck, select_all_checked);
+               }
+       }
+}
+
+static void
+_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       select_all_checked = !select_all_checked;
+       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+
+       _check_select_all();
+}
+
+static void _select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _check_select_all(data);
+}
+
+static Evas_Object *create_edit_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Edit", _edit_toolbar_cb, ad);
+
+       return obj;
+}
+
+static Evas_Object *create_del_done_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Delete", _del_toolbar_cb, ad);
+       elm_toolbar_item_append(obj, NULL, "Done", _done_toolbar_cb, ad);
+
+       return obj;
+}
+
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (mode == VIEW_MODE) {
+               mode = EDIT_MODE;
+               select_all_layout = elm_layout_add(box);
+               elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_mouse_down_cb, NULL);
+
+               select_all_checkbox = elm_check_add(select_all_layout);
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+               evas_object_smart_callback_add(select_all_checkbox, "changed", _select_all_check_changed_cb, NULL);
+               evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
+               elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
+
+               elm_object_part_text_set(select_all_layout, "elm.text", "Select All");
+               elm_box_pack_end(box, select_all_layout);
+               evas_object_show(select_all_layout);
+               elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE);
+       }
+
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+       _check_field_update();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_del_done_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+       Testitem *ti;
+       Elm_Object_Item *it;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               ti = (Testitem *)elm_object_item_data_get(it);
+               it = elm_gengrid_item_next_get(it);
+               if ((ti) && (ti->checked)) {
+                       elm_object_item_del(ti->item);
+                       total_count--;
+                       checked_count--;
+               }
+       }
+}
+
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+    Evas_Object *toolbar;
+    Elm_Object_Item *navi_it;
+    struct appdata *ad;
+    ad = (struct appdata *) data;
+    if(ad == NULL) return;
+
+       if(mode == EDIT_MODE) {
+               mode = VIEW_MODE;
+               elm_box_unpack(box, select_all_layout);
+               evas_object_del(select_all_layout);
+               select_all_layout = NULL;
+               elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       }
+
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+       _check_field_update();
+
+    navi_it = elm_naviframe_top_item_get(ad->nf);
+    toolbar = create_edit_toolbar(ad);
+    elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (!data) return EINA_TRUE;
+       View_Data *vd = data;
+       _normal_indi_cb(vd->ad);
+
+       if(vd->ctx) {
+               evas_object_del(vd->ctx);
+               vd->ctx = NULL;
+       }
+
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+       elm_object_style_set(vd->ad->bg, "default");
+
+       if (vd) free(vd);
+
+       return EINA_TRUE;
+}
+
+static void
+_extpopup_cb(void *data, Evas_Object *obj, void *event)
+{
+       if ((!data) || (!obj)) return;
+       View_Data *vd;
+       struct appdata *ad;
+       Elm_Object_Item *it = NULL;
+       vd = (struct View_Data *) data;
+
+       ad = vd->ad;
+    Elm_Object_Item *navi_it;
+       const char *label = elm_object_item_text_get((Elm_Object_Item *) event);
+
+       if (label) {
+               if (!strcmp(label, "Small Size")) {
+                       vd->w = 177;
+                       vd->h = 133;
+               } else if (!strcmp(label, "Middle Size")) {
+                       vd->w = 238;
+                       vd->h = 178;
+               } else  if (!strcmp(label, "Large Size")) {
+                       vd->w = 357;
+                       vd->h = 267;
+               }
+     }
+
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       _create_gengrid(vd, vd->type);
+       it = elm_gengrid_last_item_get(gengrid);
+       elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       elm_object_item_content_set(navi_it, box);
+       evas_object_del(obj);
+}
+
+static void
+_move_ctx(void *data, Evas_Object *obj)
+{
+       if(!data) return;
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+       Evas_Coord w, h;
+       int pos = -1;
+
+#if DESKTOP
+       evas_object_geometry_get(vd->ad->win_main, NULL, NULL, &w, &h);
+#else
+       elm_win_screen_size_get(vd->ad->win_main, NULL, NULL, &w, &h);
+#endif
+       pos = elm_win_rotation_get(vd->ad->win_main);
+       switch (pos) {
+               case 0:
+               case 180:
+                       evas_object_move(ctx, 0, h);
+                       break;
+               case 90:
+                       evas_object_move(ctx, 0, w);
+                       break;
+               case 270:
+                       evas_object_move(ctx, h, w);
+                       break;
+       }
+}
+
+static void
+_dismissed_cb(void *data, Evas_Object *obj , void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+
+               if (!rotate_flag) {
+                       evas_object_del(ctx);
+               }
+               else {
+                       _move_ctx(vd, ctx);
+                       evas_object_show(ctx);
+                       rotate_flag = EINA_FALSE;
+               }
+}
+
+static void
+_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ctx = (Evas_Object *)data;
+
+       if (ctx)
+               rotate_flag = EINA_TRUE;
+       else
+               rotate_flag = EINA_FALSE;
+}
+
+static void
+_rotate_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = vd->ctx;
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+
+static void _delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *navi = vd->ad->nf;
+       Evas_Object *ctx = obj;
+
+       evas_object_event_callback_del_full(navi, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_del_full(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+       evas_object_smart_callback_del(ctx, "dismissed", _dismissed_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL, _delete_cb, navi);
+}
+
+
+static void
+_create_more_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *ctx;
+       View_Data *vd = data;
+       struct appdata *ad;
+       ad = vd->ad;
+       double s = elm_config_scale_get();
+
+       ctx = elm_ctxpopup_add(ad->nf);
+       elm_object_style_set(ctx, "more/default");
+       ea_object_event_callback_add(ctx, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       evas_object_smart_callback_add(ctx,"dismissed", _dismissed_cb, vd);
+       evas_object_event_callback_add(ctx, EVAS_CALLBACK_DEL, _delete_cb, vd);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+       elm_ctxpopup_item_append(ctx, "Small Size", NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, "Middle Size", NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, "Large Size", NULL, _extpopup_cb, vd);
+       evas_object_size_hint_max_set(ctx, s*500, s*600);
+       elm_ctxpopup_direction_priority_set(ctx, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+void
+gengrid_create_cb(void *data, char *type)
+{
+       struct appdata *ad;
+       View_Data *vd;
+       Evas_Object *toolbar;
+       Evas_Object *btn;
+       Elm_Object_Item *navi_it;
+       Elm_Object_Item *it = NULL;
+
+       vd = (struct View_Data *) data;
+       if (vd == NULL) return;
+       ad = vd->ad;
+
+       if(!strcmp(type, "gallery")) _transparent_indi_cb(vd->ad);
+       mode = VIEW_MODE;
+
+       _create_gengrid(vd, type);
+       it = elm_gengrid_last_item_get(gengrid);
+       elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("Default") , NULL, NULL, box, NULL);
+
+       toolbar = create_edit_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, vd);
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/more/default");
+       evas_object_smart_callback_add(btn, "clicked", _create_more_btn_cb, vd);
+       elm_object_item_part_content_set(navi_it, "toolbar_more_btn", btn);
+}
+
+static void
+_transparent_indi_cb(void *data)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *win, *conform;
+
+       if ((!ad->win_main) || (!ad->conform))
+       {
+               printf("[%s]:We can't get conformant\n", __FUNCTION__);
+               return;
+       }
+       win     = ad->win_main;
+       conform = ad->conform;
+
+       /*App have to manage indicator type, layout, etc...
+       save all value related with indicator,
+       because we have to rollback if my view disappeared (like ug or etc)
+       1. change indicator type into transparent indicator.
+       2. change indicator bg into transparent.
+       3. set layout start position to (0,0)
+       */
+
+       //nooverlap mode is layout start <0,60(indicator height). This is default.
+       //overlap mode is layout start <0,0>
+       //if layout start (0,60), nooverlap_mode is null.
+
+       elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+       elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSPARENT);
+
+       //if you change your layout to nooverlap_mode(to locate layout 0,0)
+       //you should emit signal and set data of "nooverlap"
+       elm_object_signal_emit(conform, "elm,state,indicator,overlap", "");
+       evas_object_data_set(conform, "overlap", (void *)EINA_TRUE);
+}
+
+static void
+_normal_indi_cb(void *data)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *win, *conform;
+
+       if ((!ad->win_main) || (!ad->conform))
+       {
+               printf("[%s]:We can't get conformant\n", __FUNCTION__);
+               return;
+       }
+       win     = ad->win_main;
+       conform = ad->conform;
+
+       //recover indicator mode and type when your view disappeared.
+       elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+       elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+
+       elm_object_signal_emit(conform, "elm,state,indicator,nooverlap", "");
+
+       evas_object_data_set(conform, "overlap", NULL);
+       printf("[%s][%d] trans indi mode=%d opacity=%d over(0,0)=%d\n", __FUNCTION__, __LINE__, indi_mode, indi_o_mode, (int)overlap_mode);
+}
+
+
+void
+gengrid_gallerygrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd;
+       vd = calloc(1, sizeof(View_Data));
+       vd->ad = (struct appdata *)data;
+       vd->w = 357;
+       vd->h = 267;
+       vd->type = "gallery";
+       gengrid_create_cb(vd, vd->type);
+}
diff --git a/live.viewer/dbox.app/src/gengrid_gridtext.c b/live.viewer/dbox.app/src/gengrid_gridtext.c
new file mode 100644 (file)
index 0000000..7f1325d
--- /dev/null
@@ -0,0 +1,670 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define IMAGE_MAX 79
+#define VIEW_MODE 0
+#define EDIT_MODE 1
+
+#define FONT_SIZE_INDEX_SMALL 24
+#define FONT_SIZE_INDEX_NORMAL 35
+#define FONT_SIZE_INDEX_LARGE 55
+#define FONT_SIZE_INDEX_HUGE 75
+#define FONT_SIZE_INDEX_GIANT 92
+#define BASE_GENGRID_HEIGHT 76 //As per reference of UX of Genlist Group Index.
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *text;
+       const char *path;
+       int index;
+       int checked;
+} Testitem;
+
+typedef enum {
+       SIZE_INDEX_SMALL = 0,
+       SIZE_INDEX_NORMAL,
+       SIZE_INDEX_LARGE,
+       SIZE_INDEX_HUGE,
+       SIZE_INDEX_GIANT
+} font_size_index;
+
+static int mode;
+static int total_count;
+static int checked_count;
+static Eina_Bool select_all_checked = EINA_FALSE;
+static Eina_Bool longpressed = EINA_FALSE;
+static Evas_Object *gengrid, *box;
+static Evas_Object *select_all_layout, *select_all_checkbox;
+static Elm_Gengrid_Item_Class *gic, *ngic, *vgic;
+static Elm_Gengrid_Item_Class ggic;
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *create_edit_toolbar(struct appdata *ad);
+static Evas_Object *create_del_done_toolbar(struct appdata *ad);
+
+char *groupindex_names[] = {"A", "B", "C", "g", "y", NULL};
+
+static void
+grid_moved(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *moved_item = (Elm_Object_Item *)event_info;
+
+       Testitem *moved_ti = (Testitem *)elm_object_item_data_get(moved_item);
+       printf("moved item index = %d", moved_ti->index);
+
+       if (elm_gengrid_item_prev_get(moved_item)) {
+               Testitem *prev_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_prev_get(moved_item));
+               printf(", prev index = %d", prev_ti->index);
+       }
+       if (elm_gengrid_item_next_get(moved_item)) {
+               Testitem *next_ti = (Testitem *)elm_object_item_data_get(elm_gengrid_item_next_get(moved_item));
+               printf(", next index = %d", next_ti->index);
+       }
+       printf("\n");
+
+       // If you want change your data, you can here.
+}
+
+static void
+grid_longpress(void *data, Evas_Object *obj, void *event_info)
+{
+       longpressed = (mode == EDIT_MODE ? EINA_TRUE : EINA_FALSE);
+
+       // If you need to cancel select status when longpress is called(e.g. popup)
+       // set elm_gengrid_item_selected_set as EINA_FALSE.
+       // elm_gengrid_item_selected_set(event_info, EINA_FALSE);
+}
+
+static void
+_item_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Eina_Bool state;
+
+       state = elm_check_state_get(obj);
+
+       if (state) checked_count++;
+       else checked_count--;
+
+       if (select_all_layout) {
+               if (total_count == checked_count)
+                       select_all_checked = EINA_TRUE;
+               else
+                       select_all_checked = EINA_FALSE;
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+       }
+
+}
+
+static void
+_text_part_mouse_clicked_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       printf("text_clicked!!\n");
+}
+
+static char *
+grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.text"))
+               return strdup(ti->text);
+
+       return NULL;
+}
+
+static char *
+grid_text_video_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.text"))
+               return strdup(ti->text);
+       else if (!strcmp(part, "elm.text.video"))
+               return strdup("00:00:00");
+       return NULL;
+}
+
+static char *
+grid_video_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text.video"))
+               return strdup("00:00:00");
+       return NULL;
+}
+
+static char *
+grid_groupindex_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       if (!strcmp(part, "elm.text")) {
+               return strdup(groupindex_names[index]);
+       }
+       return NULL;
+}
+
+static void
+_size_set_on_font_resize() {
+       int x, h, w;
+       font_size_index font_index;
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       double scale = elm_config_scale_get();
+       font_index = x;
+
+       switch (font_index) {
+               case SIZE_INDEX_SMALL :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_SMALL + 1 /*extra pixel for overlapp check*/) * scale);
+                       break;
+               case SIZE_INDEX_NORMAL :
+                       h = (int)(BASE_GENGRID_HEIGHT * scale);
+                       break;
+               case SIZE_INDEX_LARGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_LARGE) * scale);
+                       break;
+               case SIZE_INDEX_HUGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_HUGE) * scale);
+                       break;
+               case SIZE_INDEX_GIANT :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_GIANT) * scale);
+                       break;
+               default:
+                       h = (int)(BASE_GENGRID_HEIGHT * scale ); //If no font size obtained, set the height to maximum
+       }
+       w = (int)(720 * scale);
+       elm_gengrid_group_item_size_set(gengrid, w, h);
+}
+
+static void
+_vconf_size_key_changed_cb()
+{
+       _size_set_on_font_resize();
+}
+
+static Evas_Object *
+grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (ti->index == 1) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else  if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.block") && mode == EDIT_MODE) {
+               Evas_Object *layout = elm_layout_add(obj);
+               elm_layout_theme_set(layout, "gengrid", "item", "block/default");
+               evas_object_propagate_events_set(layout, 0);
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _text_part_mouse_clicked_cb, ti);
+               return layout;
+       } else if (!strcmp(part, "elm.swallow.end") && mode == EDIT_MODE) {
+               Evas_Object *ck = elm_check_add(obj);
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+               elm_check_state_set(ck, ti->checked);
+               evas_object_repeat_events_set(ck, EINA_TRUE);
+               elm_access_object_unregister(ck);
+
+               evas_object_show(ck);
+               return ck;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *
+grid_video_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (ti->index == 1) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       elm_object_item_signal_emit(ti->item, "elm,state,end,visible", "elm");
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else  if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.block") && mode == EDIT_MODE) {
+               Evas_Object *layout = elm_layout_add(obj);
+               elm_layout_theme_set(layout, "gengrid", "item", "block/default");
+               evas_object_propagate_events_set(layout, 0);
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _text_part_mouse_clicked_cb, ti);
+               return layout;
+       }  else if (!strcmp(part, "elm.swallow.end") && mode == EDIT_MODE) {
+               Evas_Object *ck = elm_check_add(obj);
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, EINA_FALSE);
+               elm_check_state_set(ck, ti->checked);
+               evas_object_repeat_events_set(ck, EINA_TRUE);
+               elm_access_object_unregister(ck);
+
+               evas_object_show(ck);
+               return ck;
+       } else if (!strcmp(part, "elm.swallow.video")) {
+               Evas_Object *video_play = elm_image_add(obj);
+        elm_image_file_set(video_play, ICON_DIR"/00_video_play.png", NULL);
+               elm_image_aspect_fixed_set(video_play, EINA_TRUE);
+               elm_image_resizable_set(video_play, EINA_FALSE, EINA_FALSE);
+               elm_image_preload_disabled_set(video_play, EINA_FALSE);
+               evas_object_show(video_play);
+               return video_play;
+       }
+
+       return NULL;
+}
+static void
+_show_selected_items(Testitem *ti)
+{
+       /*const Eina_List* list = elm_gengrid_selected_items_get(grid);
+       const Eina_List* l = NULL;
+       Elm_Object_Item *recv = NULL;
+       printf("--------------------------\nSelected Items :");
+       EINA_LIST_FOREACH(list, l, recv) {
+               Testitem *ti = (Testitem *)elm_object_item_data_get(recv);
+               printf("%d ",ti->index);
+       }
+       printf("\n--------------------------\n");*/
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ck;
+       Testitem *ti = (Testitem *)data;
+       ck = elm_object_item_part_content_get(event_info, "elm.swallow.end");
+
+       printf("item selected: %p\n", event_info);
+
+       _show_selected_items(ti);
+       elm_gengrid_item_selected_set(ti->item, EINA_FALSE);
+
+       if (longpressed) {
+               longpressed = EINA_FALSE;
+               return;
+       }
+
+
+       ti->checked = !(elm_check_state_get(ck));
+       elm_check_state_set(ck, ti->checked);
+
+       _item_check_changed_cb(data, ck, NULL);
+
+}
+
+static void
+_create_gengrid (void *data, char *type)
+{
+       struct appdata *ad = (struct appdata *)data;
+       int i, j, n, x, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX*25];
+
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       w = h = 0;
+
+       double scale = elm_config_scale_get();
+       if (!strcmp(type, "myfile/text")) {
+               w = (int)(176 * scale); //176 as per UX ver 0.6
+               h = (int)((176 + 64) * scale); //64 for textas per UX ver 0.6
+       }
+       else if (!strcmp(type, "myfile")) {
+               w = h = (int)(176 * scale); //176 as per UX ver 0.6
+       }
+       elm_gengrid_item_size_set(gengrid, w, h);
+       _size_set_on_font_resize();
+       elm_gengrid_align_set(gengrid, 0.5, 0.0);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       evas_object_smart_callback_add(gengrid, "moved", grid_moved, NULL);
+       evas_object_smart_callback_add(gengrid, "longpressed", grid_longpress, NULL);
+
+       /******text myfile type******/
+       gic = elm_gengrid_item_class_new();
+       gic->item_style = type;
+       gic->func.text_get = grid_text_get;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       /*****no text myfile type****/
+       ngic = elm_gengrid_item_class_new();
+       ngic->item_style = type;
+       ngic->func.text_get = NULL;
+       ngic->func.content_get = grid_content_get;
+       ngic->func.state_get = NULL;
+       ngic->func.del = NULL;
+
+       /****video play grid type****/
+       vgic = elm_gengrid_item_class_new();
+       if (!strcmp(type, "myfile"))
+       {
+               vgic->item_style = "myfile_video";
+               vgic->func.text_get = grid_video_text_get;
+       } else if (!strcmp(type, "myfile/text")){
+               vgic->item_style = "myfile_video/text";
+               vgic->func.text_get = grid_text_video_text_get;
+       }
+       vgic->func.content_get = grid_video_content_get;
+       vgic->func.state_get = NULL;
+       vgic->func.del = NULL;
+
+       ggic.item_style = "group_index";
+       ggic.func.text_get = grid_groupindex_text_get;
+       ggic.func.content_get = NULL;
+       ggic.func.state_get = NULL;
+       ggic.func.del = NULL;
+
+       for (j = 0; j < 25; j++) {
+               for (i = 0; i < IMAGE_MAX; i++) {
+                       n = i+(j*IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i+1);
+                       ti[n].index = n;
+                       ti[n].path = eina_stringshare_add(buf);
+                       if (i == 0 || i == 11 || i == 22 || i == 33 || i == 44)
+                       {
+                               ti[i].item = elm_gengrid_item_append(gengrid, &ggic, (void *)(i%10), NULL, NULL);
+                               elm_gengrid_item_select_mode_set(ti[i].item, ELM_OBJECT_SELECT_MODE_NONE);
+                       } else if(!(n % 7))
+                       {
+                               ti[n].item = elm_gengrid_item_append(gengrid, vgic, &(ti[n]), _item_selected, &(ti[n]));
+                               ti[n].text = strdup("video.mp4");
+                       } else if((!(n % 6)) && !strcmp(type, "myfile"))
+                       {
+                               ti[n].item = elm_gengrid_item_append(gengrid, ngic, &(ti[n]), _item_selected, &(ti[n]));
+                       } else
+                       {
+                               ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected, &(ti[n]));
+                               if (n%4 == 0)
+                                       ti[n].text = strdup("DavidRobinson.jpg");
+                               else if (n%4 == 1)
+                                       ti[n].text = strdup("CaptainFantasticFasterThanSupermanSpidermanBatmanWolverineHulkAndTheFlashCombined.jpg");
+                               else if (n%4 == 2)
+                                       ti[n].text = strdup("1.jpg");
+                               else
+                               ti[n].text = strdup("2.jpg");
+                       }
+                       ti[n].checked = EINA_FALSE;
+               }
+       }
+
+       total_count = n + 1;
+       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb, NULL) < 0) {
+               printf("\nFail to register VCONFKEY_SETAPPL_SOUND_STATUS_BOOL key callback");
+       }
+}
+
+static void
+_check_fields_update()
+{
+       const Elm_Gengrid_Item_Class *itc;
+       Elm_Object_Item *it;
+       Eina_List *realize_its;
+
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if(strcmp(itc->item_style, "group_index"))
+                       elm_gengrid_item_fields_update(it, "elm.swallow.end", ELM_GENGRID_ITEM_FIELD_CONTENT);
+       }
+}
+
+static void
+_check_select_all()
+{
+       Elm_Object_Item *it;
+       Testitem *ti;
+       const Elm_Gengrid_Item_Class *itc;
+       Eina_List *realize_its;
+
+       if (select_all_checked) checked_count = total_count;
+       else checked_count = 0;
+       it = elm_gengrid_first_item_get(gengrid);
+       while(it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if(strcmp(itc->item_style,"group_index")){
+                       ti = elm_object_item_data_get(it);
+                       if (ti) ti->checked = select_all_checked;
+               }
+               it = elm_gengrid_item_next_get(it);
+       }
+       realize_its = elm_gengrid_realized_items_get(gengrid);
+
+       EINA_LIST_FREE(realize_its, it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               if(strcmp(itc->item_style,"group_index")){
+                       const char *type = NULL;
+                       Evas_Object *ck = elm_object_item_part_content_get(it, "elm.swallow.end");
+                       if (ck) type = elm_object_widget_type_get(ck);
+                       if (type && !strcmp(type, "elm_check")) {
+                               elm_check_state_set(ck, select_all_checked);
+                       }
+               }
+       }
+}
+
+static void
+_select_all_layout_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       select_all_checked = !select_all_checked;
+       elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+
+       _check_select_all();
+}
+
+static void _select_all_check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _check_select_all(data);
+}
+
+static Evas_Object *create_edit_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Edit", _edit_toolbar_cb, ad);
+
+       return obj;
+}
+
+static Evas_Object *create_del_done_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Delete", _del_toolbar_cb, ad);
+       elm_toolbar_item_append(obj, NULL, "Done", _done_toolbar_cb, ad);
+
+       return obj;
+}
+
+static void _edit_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (mode == VIEW_MODE) {
+               mode = EDIT_MODE;
+               select_all_layout = elm_layout_add(box);
+               elm_layout_theme_set(select_all_layout, "genlist", "item", "select_all/default");
+               evas_object_size_hint_weight_set(select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+               evas_object_size_hint_align_set(select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_event_callback_add(select_all_layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_mouse_down_cb, NULL);
+
+               select_all_checkbox = elm_check_add(select_all_layout);
+               elm_check_state_pointer_set(select_all_checkbox, &select_all_checked);
+               evas_object_smart_callback_add(select_all_checkbox, "changed", _select_all_check_changed_cb, NULL);
+               evas_object_propagate_events_set(select_all_checkbox, EINA_FALSE);
+               elm_object_part_content_set(select_all_layout, "elm.icon", select_all_checkbox);
+
+               elm_object_part_text_set(select_all_layout, "elm.text", "Select All");
+               elm_box_pack_start(box, select_all_layout);
+               evas_object_show(select_all_layout);
+               elm_gengrid_reorder_mode_set(gengrid, EINA_TRUE);
+       }
+
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+    _check_fields_update();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_del_done_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+       Testitem *ti;
+       Elm_Object_Item *it;
+       const Elm_Gengrid_Item_Class *itc;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               itc = elm_gengrid_item_item_class_get(it);
+               ti = (Testitem *)elm_object_item_data_get(it);
+               it = elm_gengrid_item_next_get(it);
+               if((strcmp(itc->item_style, "group_index") && ((ti) && (ti->checked)))) {
+                       elm_object_item_del(ti->item);
+                       total_count--;
+                       checked_count--;
+               }
+       }
+}
+
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *envent_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if(mode == EDIT_MODE){
+               mode = VIEW_MODE;
+               elm_box_unpack(box, select_all_layout);
+               evas_object_del(select_all_layout);
+               select_all_layout = NULL;
+
+               elm_gengrid_reorder_mode_set(gengrid, EINA_FALSE);
+       }
+       select_all_checked = EINA_FALSE;
+       _check_select_all();
+    _check_fields_update();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_edit_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb) < 0) {
+               printf("\nFail to unregister VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE key callback");
+       }
+
+       return EINA_TRUE;
+}
+
+static void
+gengrid_create_view(void *data, char *type)
+{
+       struct appdata *ad;
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       mode = VIEW_MODE;
+
+       _create_gengrid(ad, type);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("Myfile") , NULL, NULL, box, NULL);
+
+       toolbar =  create_edit_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
+
+void
+gengrid_myfilegrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       gengrid_create_view(data, "myfile");
+}
+
+void
+gengrid_myfilegridtext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       gengrid_create_view(data, "myfile/text");
+}
diff --git a/live.viewer/dbox.app/src/gengrid_groupindex.c b/live.viewer/dbox.app/src/gengrid_groupindex.c
new file mode 100644 (file)
index 0000000..c869b6b
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define IMAGE_MAX 79
+#define FONT_SIZE_INDEX_SMALL 24
+#define FONT_SIZE_INDEX_NORMAL 35
+#define FONT_SIZE_INDEX_LARGE 55
+#define FONT_SIZE_INDEX_HUGE 75
+#define FONT_SIZE_INDEX_GIANT 92
+#define BASE_GENGRID_HEIGHT 76 //As per reference of UX of Genlist Group Index.
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *path;
+       int index;
+       int checked;
+} Testitem;
+
+typedef enum {
+       SIZE_INDEX_SMALL = 0,
+       SIZE_INDEX_NORMAL,
+       SIZE_INDEX_LARGE,
+       SIZE_INDEX_HUGE,
+       SIZE_INDEX_GIANT
+} font_size_index;
+
+static int total_count;
+static Evas_Object *gengrid, *box;
+static Elm_Gengrid_Item_Class *gic;
+static Elm_Gengrid_Item_Class ggic;
+
+char *group_names[] = {"A", "B", "C", "g", "y", NULL};
+
+static Evas_Object *
+grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (ti->index == 1) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       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);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("--------------------------\nSelected Items :");
+}
+
+
+static char *
+grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       if (!strcmp(part, "elm.text")) {
+               return strdup(group_names[index]);
+       }
+       return NULL;
+}
+
+static void
+_size_set_on_font_resize() {
+       int x, h, w;
+       font_size_index font_index;
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       double scale = elm_config_scale_get();
+       font_index = x;
+
+       switch (font_index) {
+               case SIZE_INDEX_SMALL :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_SMALL + 1 /*extra pixel for overlapp check*/) * scale);
+                       break;
+               case SIZE_INDEX_NORMAL :
+                       h = (int)(BASE_GENGRID_HEIGHT * scale);
+                       break;
+               case SIZE_INDEX_LARGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_LARGE) * scale);
+                       break;
+               case SIZE_INDEX_HUGE :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_HUGE) * scale);
+                       break;
+               case SIZE_INDEX_GIANT :
+                       h = (int)((BASE_GENGRID_HEIGHT - FONT_SIZE_INDEX_NORMAL + FONT_SIZE_INDEX_GIANT) * scale);
+                       break;
+               default:
+                       h = (int)(BASE_GENGRID_HEIGHT * scale ); //If no font size obtained, set the height to maximum
+       }
+       w = (int)(720 * scale);
+       elm_gengrid_group_item_size_set(gengrid, w, h);
+}
+
+static void
+_vconf_size_key_changed_cb()
+{
+       _size_set_on_font_resize();
+}
+
+static void
+_create_gengrid (void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       int i, j, n, x, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX*25];
+
+       vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &x);
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       double scale = elm_config_scale_get();
+       w = h = (int)(177 * scale); //177 as per UX ver 1.7.
+       elm_gengrid_item_size_set(gengrid, w, h);
+       _size_set_on_font_resize();
+       elm_gengrid_align_set(gengrid, 0.0, 0.0);
+       elm_gengrid_horizontal_set(gengrid, EINA_FALSE);
+
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+
+       gic = elm_gengrid_item_class_new();
+       gic->item_style="default_grid";
+
+       gic->func.text_get = NULL;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       ggic.item_style = "group_index";
+       ggic.func.text_get = grid_text_get;
+       ggic.func.content_get = NULL;
+       ggic.func.state_get = NULL;
+       ggic.func.del = NULL;
+
+       for (j = 0; j < 25; j++) {
+               for (i = 0; i < IMAGE_MAX; i++) {
+                       n = i+(j*IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i+1);
+                       ti[n].index = n;
+                       ti[n].path = eina_stringshare_add(buf);
+                       if (i == 0 || i == 11 || i == 22 || i == 33 || i == 44)
+                         ti[i].item = elm_gengrid_item_append(gengrid, &ggic, (void *)(i%10), NULL, NULL);
+                       else
+                         ti[i].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected, &(ti[i]));
+                       ti[n].checked = EINA_FALSE;
+               }
+       }
+
+       total_count = n + 1;
+       if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb, NULL) < 0) {
+               printf("\nFail to register VCONFKEY_SETAPPL_SOUND_STATUS_BOOL key callback");
+       }
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, _vconf_size_key_changed_cb) < 0) {
+               printf("\nFail to unregister VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE key callback");
+       }
+
+       return EINA_TRUE;
+}
+
+void
+gengrid_groupindex_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       _create_gengrid(ad);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("Group Index Sample") , NULL, NULL, box, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/genlist/genlist.c b/live.viewer/dbox.app/src/genlist/genlist.c
new file mode 100644 (file)
index 0000000..9b263c7
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+char *genlist_long_texts[] = {
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee"
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee",
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee",
+       "This is very long string text of email style style styleee",
+       "This is very long string text of email style style styleeeee",
+       "This is very long string text of email style style styleeeeeee",
+       "This is very long string text of email style style styleeeeeeeee",
+       "This is very long string text of email style style styleeeeeeeeeeee",
+       NULL
+};
+
+char *genlist_demo_names[] = {
+       "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "CaptainFantasticFasterThanSupermanSpidermanBatmanWolverineHulkAndTheFlashCombined",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson",
+       "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson",
+       NULL
+};
+
+char *demo_country_names[] = {
+       "Greece", "Hong Kong", "Hungary", "India", "Iran",
+       "Finland", "Algeria", "Andorra", "Argentina", "Australia",
+       "Canada", "Chad", "Chile", "Cuba ", "Denmark",
+        "Sweden", "Taiwan", "Tanzania", "Uganda", "Zimbabwe",
+       "Ethiopia", "Fiji", "France", "Germany", "Ghana",
+       "Iraq", "Hafiz", "Italy", "Jordan", "Kuwait",
+       "Bahamas", "Bangladesh", "Belgium", "Benin", "Bosnia",
+       "Dominican Republic", "Egypt", "England", "Europa Island", "China",
+       "Macau", "Mexico ", "Panama", "Poland", "Peru",
+       "Russia", "Scotland", "Slovakia", "South Korea", "Sri Lanka",
+       NULL
+};
+
+char *genlist_times[] = {"10:00 AM", "10:01 AM", "10:02 AM", "10:03 AM", "10:04 AM", "10:05 AM",
+       "3:50 PM", "3:51 PM", "3:52 PM", "3:53 PM"};
+
+char *genlist_messages[] = {"Good morning!",
+       "It's you again. How do you do this?",
+       "This is the princess who fell from the sky into my arms.",
+       "Yes. We keep meeting like this. You just suddenly show up.",
+       "We could make plans to meet.",
+       "No, it's nicer this way. I hope we meet again suddenly.",
+       "Don't you know that it takes so little to make me happy?",
+       "Good morning, Princess!",
+       "This is incredible. You owe me an explanation.",
+       "No, you're the one who owes me an explanation. You've really got a crush on me. Where shall we go, Princess?"
+};
+
+static struct appdata *menu_ad;
+
+static struct _group_menu_item menu_its[] = {
+       { EINA_TRUE, "Item Styles", NULL },
+       { EINA_FALSE, "Normal", genlist_normal_cb },
+       { EINA_FALSE, "Dialogue Group", genlist_dialogue_cb },
+       { EINA_FALSE, "Editfield", genlist_editfield_cb },
+       { EINA_FALSE, "Separator", genlist_separator_cb },
+       { EINA_TRUE, "Features", NULL }, // group title
+       { EINA_FALSE, "Edit Mode/Reorder/Sorting", genlist_edit_mode_cb },
+       { EINA_FALSE, "Expandable (Dialogue)", genlist_expandable_cb },
+       { EINA_FALSE, "Expandable (Normal)", genlist_ndepth_expandable_cb },
+       { EINA_FALSE, "Fast Scroll", genlist_fastscroll_cb },
+       { EINA_FALSE, "Swipe", genlist_swipe_cb },
+       { EINA_FALSE, "Collection", genlist_collection_cb },
+       { EINA_FALSE, "Scroll Jump", genlist_scroll_jump_cb },
+       { EINA_FALSE, "Homogenous", genlist_homogenous_cb },
+       { EINA_FALSE, "Animator", genlist_animator_cb },
+       { EINA_TRUE, "Samples", NULL }, // group title
+       { EINA_FALSE, "Genlist with Check", genlist_check_cb },
+       { EINA_FALSE, "Genlist with Radio", genlist_radio_cb },
+       { EINA_FALSE, "Variable Height", genlist_variable_height_cb },
+       { EINA_FALSE, "Dynamic Color Change", genlist_color_cb },
+       { EINA_TRUE, "Themes", NULL }, // group title
+       { EINA_FALSE, "Default", genlist_theme_default_cb },
+       { EINA_FALSE, "No_Effect", genlist_theme_no_effect_cb },
+       /* do not delete below */
+       { EINA_FALSE, NULL, NULL }
+};
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(menu_its[index].name);
+       }
+
+       return NULL;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int)data;
+
+       elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+       menu_its[index].func(menu_ad, NULL, NULL);
+       return;
+}
+
+static void _track_resize(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       int idx;
+       Evas_Coord w, h;
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       idx = elm_genlist_item_index_get(data);
+       printf("track resize: %d: w:%d h:%d\n", idx, w, h);
+}
+
+static void _track_move(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       int idx;
+       Evas_Coord x, y;
+       evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+       idx = elm_genlist_item_index_get(data);
+       printf("track move: %d: x:%d y:%d\n", idx, x, y);
+}
+
+static void
+_realized(void *data, Evas_Object *obj, void *ei)
+{
+       int index = (int)elm_object_item_data_get(ei);
+       if (((sizeof(menu_its)/sizeof(menu_its[0])) != index) && (menu_its[index + 1].is_group == EINA_TRUE))
+               elm_object_item_signal_emit(ei, "elm,state,bottomline,hide", "");
+
+       // track usage
+       Evas_Object *track = elm_object_item_track(ei);
+       evas_object_event_callback_add(track, EVAS_CALLBACK_RESIZE, _track_resize, ei);
+       evas_object_event_callback_add(track, EVAS_CALLBACK_MOVE, _track_move, ei);
+}
+
+static Evas_Object* _create_genlist(struct appdata* ad)
+{
+       Evas_Object *genlist;
+       Elm_Object_Item *git = NULL;
+       int index;
+
+       if (ad == NULL) return NULL;
+
+       Elm_Genlist_Item_Class *itc =elm_genlist_item_class_new();
+       Elm_Genlist_Item_Class *itc_group =elm_genlist_item_class_new();
+       itc->item_style = "default";
+       itc->func.text_get = _gl_text_get;
+
+       itc_group->item_style = "groupindex";
+       itc_group->func.text_get = _gl_text_get;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_realization_mode_set(genlist, EINA_TRUE);
+       evas_object_smart_callback_add(genlist, "realized", _realized, NULL);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       for (index = 0; menu_its[index].name; index++) {
+               if (menu_its[index].is_group == EINA_TRUE) {
+                       git = elm_genlist_item_append(genlist, itc_group, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       elm_genlist_item_append(genlist, itc, (void *)index, git,
+                                       ELM_GENLIST_ITEM_NONE, _gl_sel, (void *)index);
+               }
+       }
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc_group);
+
+       return genlist;
+}
+
+void genlist_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       menu_ad = ad;
+       genlist = _create_genlist(ad);
+       elm_naviframe_item_push(ad->nf, _("Genlist"), NULL, NULL, genlist, NULL);
+}
+
+char** genlist_get_demo_names(void)
+{
+       return genlist_demo_names;
+}
+
+char** genlist_get_demo_country_names(void)
+{
+       return demo_country_names;
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_check.c b/live.viewer/dbox.app/src/genlist/genlist_check.c
new file mode 100644 (file)
index 0000000..de09b67
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Check
+ ********************************************************/
+#define NUM_OF_ITEMS 2000
+Evas_Object *box, *select_all_layout, *genlist;
+static int checked_count = 0;
+static Eina_Bool state_pointer[NUM_OF_ITEMS] = {0};//check states
+static char **genlist_demo_names = NULL;
+
+static void _select_all_chk_changed_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Eina_Bool state = elm_check_state_get(obj);
+
+       if (state) checked_count = elm_genlist_items_count(genlist);
+       else checked_count = 0;
+
+       Elm_Object_Item *it = elm_genlist_first_item_get(genlist);
+       while(it) {
+               int index = (int)elm_object_item_data_get(it);
+               // For realized items, set state of real check object
+               Evas_Object *ck = elm_object_item_part_content_get(it, "elm.icon");
+               if (ck) elm_check_state_set(ck, state);
+               // For all items (include unrealized), just set pointer state
+               state_pointer[index] = state;
+               it = elm_genlist_item_next_get(it);
+       }
+}
+
+static void _select_all_layout_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       printf("select all layout clicked\n");
+       Evas_Object *check = elm_object_part_content_get(select_all_layout, "elm.icon");
+       Eina_Bool state = elm_check_state_get(check);
+       elm_check_state_set(check, !state);
+       _select_all_chk_changed_cb(data, check, NULL);
+}
+
+static Evas_Object *
+_create_select_all_layout(Evas_Object *parent)
+{
+       Evas_Object *layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_down_cb, NULL);
+       evas_object_show(layout);
+
+       Evas_Object *check = elm_check_add(layout);
+       evas_object_propagate_events_set(check, EINA_FALSE);
+       evas_object_smart_callback_add(check, "changed", _select_all_chk_changed_cb, NULL);
+       elm_object_part_content_set(layout, "elm.icon", check);
+       elm_object_part_text_set(layout, "elm.text", "Select All");
+       return layout;
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int) data) % NUM_OF_GENLIST_DEMO_NAMES;
+
+       if (!strcmp(part, "elm.text")) {
+               if (!index) {
+                       return strdup(_("Select All"));
+               } else {
+                       return strdup(genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               }
+       }
+       return NULL;
+}
+
+static void _chk_changed_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Eina_Bool state;
+
+       state = elm_check_state_get(obj);
+       if (state) checked_count++;
+       else checked_count--;
+       printf("check changed, count: %d\n", checked_count);
+
+       Evas_Object *check = elm_object_part_content_get(select_all_layout, "elm.icon");
+       if (elm_genlist_items_count(genlist) == checked_count)
+               elm_check_state_set(check, EINA_TRUE);
+       else elm_check_state_set(check, EINA_FALSE);
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       Elm_Object_Item *item = ei;
+
+       printf("item selected\n");
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       // Update check button
+       Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.icon");
+       Eina_Bool state = elm_check_state_get(ck);
+       elm_check_state_set(ck, !state);
+
+       _chk_changed_cb(data, ck, NULL);
+}
+
+static void
+_check_cb(void *data, Evas_Object *obj, const char *emission, const char* src)
+{
+       int index = (int)data;
+       printf("Check show finished callback Item: %d \n",index);
+}
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       Evas_Object *check;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               check = elm_check_add(obj);
+               elm_object_style_set(check, "default/genlist");
+               //set the State pointer to keep the current UI state of Checkbox.
+               elm_check_state_pointer_set(check, &(state_pointer[index]));
+               // Repeat events to below object (genlist)
+               // So that if check is clicked, genlist can be clicked.
+               evas_object_repeat_events_set(check, EINA_TRUE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               elm_object_signal_callback_add(check, "elm,action,show,finished", "elm",
+                               _check_cb, (void *)index);
+
+               // If no divider, unregister access object
+               elm_access_object_unregister(check);
+               return check;
+       }
+       return NULL;
+}
+
+static Evas_Object * _create_genlist(Evas_Object *parent)
+{
+       int index;
+       Evas_Object *genlist;
+       Elm_Object_Item *git;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+       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);
+
+       Elm_Genlist_Item_Class *itc_sa = elm_genlist_item_class_new();
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       // Set genlist item class for "select all"
+       //itc_sa.item_style = "selectall_check";
+       itc_sa->item_style = "elm_demo_tizen/select_all";
+       itc_sa->func.text_get = _gl_text_get;
+       itc_sa->func.content_get = _gl_content_get;
+
+       // Set genlist item class
+       itc->item_style = "1text.1icon.3";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+
+       git = elm_genlist_item_append(genlist, itc_sa, (void *) 0, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+
+       // Append items
+       for (index = 1; index < NUM_OF_ITEMS; index++) {
+               elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               (void *) index,         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL
+               );
+       }
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc_sa);
+
+       return genlist;
+}
+
+void genlist_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       select_all_layout =_create_select_all_layout(box);
+       evas_object_show(select_all_layout);
+       elm_box_pack_end(box, select_all_layout);
+
+       genlist = _create_genlist(box);
+       evas_object_show(genlist);
+       elm_box_pack_end(box, genlist);
+       evas_object_show(box);
+
+       elm_naviframe_item_push(ad->nf, _("Genlist with Check"), NULL, NULL, box, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_collection.c b/live.viewer/dbox.app/src/genlist/genlist_collection.c
new file mode 100644 (file)
index 0000000..f3a1324
--- /dev/null
@@ -0,0 +1,697 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+#define NUM_OF_NAMES 50
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+
+#define APPEND                  "Append Item"
+#define PREPEND                 "Prepend Item"
+#define INSERT_AFTER            "Insert After"
+#define INSERT_BEFORE           "Insert Before"
+#define DEL_ITEM                "Delete Item"
+#define HIDE_ITEM               "Hide Item"
+#define DISABLE_ITEM            "Disable Item"
+#define CLEAR_ITEMS             "Clear Items"
+#define CLEAR_SUB_ITEMS         "Clear Sub Items"
+#define UPDATE_CLASS            "Update Item Class"
+#define UPDATE_ITEM             "Update Item"
+#define EXPAND_ITEM             "Expand Item"
+#define CONTRACT_ITEM           "Contract Item"
+#define SHOW_FIRST_ITEM         "Show First Item"
+#define BRING_IN_LAST_ITEM      "Bring in Last Item"
+#define BRING_IN_RANDOM_ITEM    "Bring in Random Item"
+
+#define CHANGE_SELECT_MODE      "Change Select Mode"
+#define MULTI_SELECT_MODE       "Multi Select Mode"
+#define CHANGE_ITEM_SELECT_MODE "Change Item Select Mode"
+#define DECORATE_MODE           "Decorate all Mode"
+#define ITEM_DECORATE_MODE      "Item Decorate Mode"
+#define REORDER_MODE            "Reorder Mode"
+#define RANDOM_TEST             "Random Test"
+
+const char *random_tests[] = {
+       APPEND, PREPEND, INSERT_AFTER, INSERT_BEFORE,
+       DEL_ITEM, HIDE_ITEM, DISABLE_ITEM, CLEAR_ITEMS, CLEAR_SUB_ITEMS,
+       UPDATE_CLASS, UPDATE_ITEM, EXPAND_ITEM, CONTRACT_ITEM,
+       SHOW_FIRST_ITEM, BRING_IN_LAST_ITEM, BRING_IN_RANDOM_ITEM,
+       CHANGE_SELECT_MODE, MULTI_SELECT_MODE, CHANGE_SELECT_MODE,
+       DECORATE_MODE, ITEM_DECORATE_MODE, REORDER_MODE
+};
+
+#define CHANGE_LIST_MODE        "Change List Mode"
+#define MAX_LEN 128
+#define NUM_OF_ITEMS 2000
+#define ITC_MAX 10
+#define WIDTH 600
+#define HEIGHT 800
+static char **genlist_demo_names;
+
+typedef struct _View_Data {
+       struct appdata *ad;
+
+       Evas_Object *box;
+       Evas_Object *select_all_layout;
+       Evas_Object *genlist;
+       Evas_Object *ctx;
+       Elm_Object_Item *navi_it;
+       int itc_cnt;
+       Elm_Object_Select_Mode select_mode;
+       Ecore_Timer *test_timer;
+       Elm_List_Mode list_mode;
+       Elm_Genlist_Item_Class *itc[ITC_MAX];
+       int g_idx;
+} View_Data;
+
+typedef struct _Item_Data
+{
+       int idx;
+} Item_Data;
+
+static Eina_Bool rotate_flag = EINA_FALSE;
+
+static void _print_item(Elm_Object_Item *it)
+{
+       if (!it) {
+               printf("print_item: Item is NULL\n");
+               return;
+       }
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       Item_Data *id = elm_object_item_data_get(it);
+       if (!txt)
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       printf(" %p, text(%s), data(%d), index[%d]\n", it, txt, id->idx, elm_genlist_item_index_get(it));
+}
+
+static void _print_selected_items(Evas_Object *obj)
+{
+       Eina_List *l, *sel;
+       Elm_Object_Item *it;
+
+       sel = elm_genlist_selected_items_get(obj);
+       printf("----- Selected items ------\n");
+       EINA_LIST_FOREACH(sel, l, it) _print_item(it);
+       printf("---------------------------\n");
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       View_Data *vd = data;
+       int i = 0;
+       if (vd->test_timer) ecore_timer_del(vd->test_timer);
+
+       for (i = 0; i < ITC_MAX; i++) {
+               elm_genlist_item_class_free(vd->itc[i]);
+       }
+
+       elm_object_style_set(vd->ad->bg, "default");
+       free(vd);
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: unrealized callback will be called after this.
+       // accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static void _selected(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Selected, ");
+       _print_item(ei);
+       _print_selected_items(obj);
+}
+
+static void _unselected(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Unselected, ");
+       _print_item(ei);
+       _print_selected_items(obj);
+}
+
+static void _longpressed(void *data, Evas_Object *obj, void *ei)
+{
+       printf("lonpressed, ");
+       _print_item(ei);
+       _print_selected_items(obj);
+}
+
+static void _con(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Contracted, ");
+       _print_item(ei);
+       elm_genlist_item_subitems_clear(ei);
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Item Selected, ");
+       _print_item(ei);
+}
+
+static void _exp(void *data, Evas_Object *genlist, void *ei)
+{
+       View_Data *vd = data;
+       Item_Data *id;
+       int depth = elm_genlist_item_expanded_depth_get(ei);
+       printf("Expanded: depth[%d]\n",  depth);
+       _print_item(ei);
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->idx = vd->g_idx;
+       vd->g_idx++;
+       elm_genlist_item_append(genlist, vd->itc[0], id, ei,
+                       ELM_GENLIST_ITEM_TREE, _gl_sel, id);
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->idx = vd->g_idx;
+       vd->g_idx++;
+       elm_genlist_item_append(genlist, vd->itc[0], id, ei,
+                       ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       snprintf(buf, 1023, "%d, %s", id->idx, part);
+       printf("text_get: %s\n", buf);
+       return strdup(buf);}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.slide.swallow.1")) {
+               Evas_Object *button = elm_button_add(obj);
+               elm_object_style_set(button, "sweep");
+               elm_object_text_set(button, "Sweep");
+               return button;
+       }
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static void
+_move_ctx(void *data, Evas_Object *obj)
+{
+       if(!data) return;
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+       Evas_Coord w, h;
+       int pos = -1;
+
+       elm_win_screen_size_get(vd->ad->win_main, NULL, NULL, &w, &h);
+       pos = elm_win_rotation_get(vd->ad->win_main);
+
+       switch (pos) {
+               case 0:
+               case 180:
+                       evas_object_move(ctx, 0, h);
+                       break;
+               case 90:
+                       evas_object_move(ctx, 0, w);
+                       break;
+               case 270:
+                       evas_object_move(ctx, h, w);
+               break;
+       }
+}
+
+static void
+_dismissed_cb(void *data __UNUSED__, Evas_Object *obj , void *event __UNUSED__)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+
+       if (!rotate_flag) {
+               evas_object_del(ctx);
+               ctx = NULL;
+       }
+       else {
+               _move_ctx(vd, ctx);
+               evas_object_show(ctx);
+               rotate_flag = EINA_FALSE;
+       }
+}
+
+static void
+_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ctx = (Evas_Object *)data;
+
+       if (ctx)
+               rotate_flag = EINA_TRUE;
+       else
+               rotate_flag = EINA_FALSE;
+}
+
+static void
+_rotate_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = vd->ctx;
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+
+static void _delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *navi = vd->ad->nf;
+       Evas_Object *ctx = obj;
+
+       evas_object_event_callback_del_full(navi, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_del_full(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+       evas_object_smart_callback_del(ctx, "dismissed", _dismissed_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL, _delete_cb, navi);
+}
+
+static void
+_genlist_test(const char *label, View_Data *vd)
+{
+       Elm_Object_Item *it;
+       printf("============================\n");
+       printf("%s: ", label);
+       if (!strcmp(label, _(APPEND))) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->idx = vd->g_idx;
+               vd->g_idx++;
+               it = elm_genlist_item_append(vd->genlist, vd->itc[0], id, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+               _print_item(it);
+       } else if (!strcmp(label, _(PREPEND))) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->idx = vd->g_idx;
+               vd->g_idx++;
+               it = elm_genlist_item_prepend(vd->genlist, vd->itc[0], id, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+               _print_item(it);
+       } else if (!strcmp(label, _(INSERT_AFTER))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       Elm_Object_Item *before = eina_list_data_get(eina_list_last(list));
+                       Item_Data *id = calloc(sizeof(Item_Data), 1);
+                       id->idx = vd->g_idx;
+                       vd->g_idx++;
+                       it = elm_genlist_item_insert_after(vd->genlist, vd->itc[0], id,
+                                       NULL , before, ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(INSERT_BEFORE))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       Elm_Object_Item *before = eina_list_data_get(eina_list_last(list));
+                       Item_Data *id = calloc(sizeof(Item_Data), 1);
+                       id->idx = vd->g_idx;
+                       vd->g_idx++;
+                       it = elm_genlist_item_insert_before(vd->genlist, vd->itc[0], id,
+                                       NULL , before, ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(DEL_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               Eina_List *ll, *l;
+               while (list) {
+                       it = eina_list_data_get(list);
+                       list = eina_list_next(list);
+                       printf("Item(%p) is going to be deleted\n", it);
+                       _print_item(it);
+                       elm_object_item_del(it);
+               }
+       } else if (!strcmp(label, _(HIDE_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       _print_item(it);
+                       elm_genlist_item_hide_set(it, EINA_TRUE);
+               }
+       } else if (!strcmp(label, _(DISABLE_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       _print_item(it);
+                       elm_object_item_disabled_set(it, EINA_TRUE);
+                       //printf("Item(%p) is disabled\n", it);
+               }
+       } else if (!strcmp(label, _(CLEAR_ITEMS))) {
+               elm_genlist_clear(vd->genlist);
+       } else if (!strcmp(label, _(CLEAR_SUB_ITEMS))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       elm_genlist_item_subitems_clear(it);
+               }
+       } else if (!strcmp(label, _(UPDATE_CLASS))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       vd->itc_cnt++;
+                       if (vd->itc_cnt >= ITC_MAX) vd->itc_cnt = 0;
+                       elm_genlist_item_item_class_update(it, vd->itc[vd->itc_cnt]);
+                       printf("New item style [%s]\n", vd->itc[vd->itc_cnt]->item_style);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(UPDATE_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       Item_Data *id = elm_object_item_data_get(it);
+                       id->idx++;
+                       elm_genlist_item_update(it);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(EXPAND_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       elm_genlist_item_expanded_set(it, EINA_TRUE);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(CONTRACT_ITEM))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       elm_genlist_item_expanded_set(it, EINA_FALSE);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(SHOW_FIRST_ITEM))) {
+               Elm_Object_Item *it = elm_genlist_first_item_get(vd->genlist);
+               elm_genlist_item_show(it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+               _print_item(it);
+       } else if (!strcmp(label, _(BRING_IN_LAST_ITEM))) {
+               Elm_Object_Item *it = elm_genlist_last_item_get(vd->genlist);
+               elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+               _print_item(it);
+       } else if (!strcmp(label, _(BRING_IN_RANDOM_ITEM))) {
+               int idx = 0, i = 0;
+               int cnt = elm_genlist_items_count(vd->genlist);
+               if (cnt) idx = rand() % cnt;
+               int type = ELM_GENLIST_ITEM_SCROLLTO_IN << (rand() % 3);
+
+               Elm_Object_Item *it = elm_genlist_first_item_get(vd->genlist);
+               for (i = 0 ; i < idx ; i++) {
+                       it = elm_genlist_item_next_get(it);
+               }
+               elm_genlist_item_bring_in(it, type);
+               _print_item(it);
+       } else if (!strcmp(label, _(CHANGE_SELECT_MODE))) {
+               Elm_Object_Select_Mode mode = elm_genlist_select_mode_get(vd->genlist);
+               mode++;
+               if (mode >ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) mode = 0;
+               elm_genlist_select_mode_set(vd->genlist, mode);
+               printf("Select mode is changed to %d\n", mode);
+       } else if (!strcmp(label, _(MULTI_SELECT_MODE))) {
+               Eina_Bool multi = elm_genlist_multi_select_get(vd->genlist);
+               elm_genlist_multi_select_set(vd->genlist, !multi);
+       } else if (!strcmp(label, _(CHANGE_ITEM_SELECT_MODE))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       Elm_Object_Select_Mode mode = elm_genlist_item_select_mode_get(it);
+                       mode++;
+                       if (mode >ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) mode = 0;
+                       elm_genlist_item_select_mode_set(it, mode);
+                       printf("New select mode: %d\n", mode);
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(DECORATE_MODE))) {
+               Eina_Bool mode = elm_genlist_decorate_mode_get(vd->genlist);
+               elm_genlist_decorate_mode_set(vd->genlist, !mode);
+               printf("Decorate mode is changed to %d\n", !mode);
+       } else if (!strcmp(label, _(ITEM_DECORATE_MODE))) {
+               Eina_List *list = elm_genlist_selected_items_get(vd->genlist);
+               if (list) {
+                       it = eina_list_data_get(eina_list_last(list));
+                       const char *mode = elm_genlist_item_decorate_mode_get(it);
+                       Elm_Object_Item *it2 = elm_genlist_decorated_item_get(vd->genlist);
+                       if (it2 && (it == it2)) {
+                               elm_genlist_item_decorate_mode_set(it, NULL, EINA_FALSE);
+                               printf("Item[%p]: Decorate mode is disabled from %s\n",
+                                               it, mode);
+                       } else {
+                               elm_genlist_item_decorate_mode_set(it, "slide", EINA_TRUE);
+                               printf("Item[%p]: Decorate mode is enabled slide from %s\n",
+                                               it, mode);
+                       }
+                       _print_item(it);
+               }
+       } else if (!strcmp(label, _(REORDER_MODE))) {
+               Eina_Bool mode = elm_genlist_reorder_mode_get(vd->genlist);
+               elm_genlist_reorder_mode_set(vd->genlist, !mode);
+               printf("Reorder is %d\n", mode);
+       } else if (!strcmp(label, _(CHANGE_LIST_MODE))) {
+               elm_genlist_mode_set(vd->genlist, vd->list_mode);
+               printf("List mode is %d\n", vd->list_mode);
+               vd->list_mode++;
+               if (vd->list_mode >= ELM_LIST_LAST)
+                       vd->list_mode = ELM_LIST_COMPRESS;
+       }
+       printf("\n");
+}
+
+static Eina_Bool
+_random_test(void *data)
+{
+       int len = sizeof(random_tests)/sizeof(random_tests[0]);
+       View_Data *vd = data;
+       int r = rand()%len;
+       _genlist_test(random_tests[r], vd);
+       return EINA_TRUE;
+}
+
+static void
+_extpopup_cb(void *data, Evas_Object *obj, void *event)
+{
+       if ((!data) || (!obj)) return;
+       View_Data *vd = data;
+       const char *label = elm_object_item_text_get((Elm_Object_Item *) event);
+
+       if (label) {
+               if (!strcmp(label, _(RANDOM_TEST))) {
+                       if (vd->test_timer)     {
+                               ecore_timer_del(vd->test_timer);
+                               vd->test_timer = NULL;
+                       }
+                       else vd->test_timer = ecore_timer_add(0.1, _random_test, vd);
+               } else _genlist_test(label, vd);
+       }
+       evas_object_del(obj);
+}
+
+static void
+_menu_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *ctx;
+       Evas_Coord x, y, w, h;
+       View_Data *vd = data;
+       double s = elm_config_scale_get();
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+       ctx = elm_ctxpopup_add(vd->ad->nf);
+       evas_object_smart_callback_add(ctx,"dismissed", _dismissed_cb, NULL);
+       elm_ctxpopup_item_append(ctx, _(APPEND), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(PREPEND), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(INSERT_AFTER), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(INSERT_BEFORE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(DEL_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(HIDE_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(DISABLE_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(UPDATE_CLASS), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(UPDATE_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(EXPAND_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(CONTRACT_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(SHOW_FIRST_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(BRING_IN_LAST_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(BRING_IN_RANDOM_ITEM), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(CLEAR_ITEMS), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(CLEAR_SUB_ITEMS), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(CHANGE_SELECT_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(MULTI_SELECT_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(CHANGE_ITEM_SELECT_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(DECORATE_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(ITEM_DECORATE_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(REORDER_MODE), NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, _(RANDOM_TEST), NULL, _extpopup_cb, vd);
+
+       evas_object_size_hint_max_set(ctx, s*WIDTH, s*HEIGHT);
+       evas_object_move(ctx, x+w/2, y+h/2);
+       evas_object_show(ctx);
+}
+
+static void _menu_more_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *ctx;
+       View_Data *vd = data;
+       struct appdata *ad;
+       ad = vd->ad;
+       double s = elm_config_scale_get();
+
+       ctx = elm_ctxpopup_add(ad->nf);
+       elm_object_style_set(ctx, "more/default");
+       evas_object_smart_callback_add(ctx,"dismissed", _dismissed_cb, vd);
+       evas_object_event_callback_add(ctx, EVAS_CALLBACK_DEL, _delete_cb, vd);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+
+       elm_ctxpopup_item_append(ctx, _(CHANGE_LIST_MODE), NULL, _extpopup_cb, vd);
+       evas_object_size_hint_max_set(ctx, s*WIDTH, s*HEIGHT);
+       elm_ctxpopup_direction_priority_set(ctx, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                       ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                       ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                       ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+
+static Evas_Object *_create_menu_toolbar(View_Data *vd)
+{
+       Evas_Object *obj, *seg_btn;
+       Elm_Object_Item *item = NULL;
+       /*create toolbar */
+       obj = elm_toolbar_add(vd->ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       seg_btn = elm_button_add(obj);
+       elm_object_style_set(seg_btn, "style1");
+       elm_object_text_set(seg_btn, _("Menu"));
+       item = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+       elm_object_item_part_content_set(item, "object", seg_btn);
+       evas_object_smart_callback_add(seg_btn, "clicked", _menu_toolbar_cb, vd);
+       return obj;
+}
+
+static Evas_Object *_create_menu_more_button(View_Data *vd)
+{
+       Evas_Object *button;
+
+       button = elm_button_add(vd->ad->nf);
+       elm_object_style_set(button, "naviframe/more/default");
+       evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+       elm_object_text_set(button, _("Menu"));
+       evas_object_show(button);
+       evas_object_smart_callback_add(button, "clicked", _menu_more_btn_clicked_cb, vd);
+       return button;
+}
+
+static Evas_Object *_create_genlist(View_Data *vd, Evas_Object *parent)
+{
+       Evas_Object *genlist;
+       Elm_Object_Item *it;
+       int idx = 0;
+
+       for (idx = 0; idx < ITC_MAX; idx++) {
+               vd->itc[idx] = elm_genlist_item_class_new();
+               vd->itc[idx]->func.text_get = _gl_text_get;
+               vd->itc[idx]->func.content_get = _gl_content_get;
+               vd->itc[idx]->decorate_item_style = "mode/slide";
+               vd->itc[idx]->decorate_all_item_style = "edit";
+               vd->itc[idx]->func.del = _gl_del;
+       }
+
+       vd->itc[0]->item_style = "1text";
+       vd->itc[1]->item_style = "2text";
+       vd->itc[2]->item_style = "1text.3icon";
+       vd->itc[3]->item_style = "3text.1icon.2";
+       vd->itc[4]->item_style = "4text.1icon.3";
+       vd->itc[5]->item_style = "1text.2icon";
+       vd->itc[6]->item_style = "dialogue/2text.5";
+       vd->itc[7]->item_style = "dialogue/3text.2icon";
+       vd->itc[8]->item_style = "dialogue/multiline/2text";
+       vd->itc[9]->item_style = "dialogue/3text.1icon/expandable";
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_smart_callback_add(genlist, "selected", _selected, NULL);
+       evas_object_smart_callback_add(genlist, "unselected", _unselected, NULL);
+       evas_object_smart_callback_add(genlist, "longpressed", _longpressed, NULL);
+       evas_object_smart_callback_add(genlist, "expanded", _exp, vd);
+       evas_object_smart_callback_add(genlist, "contracted", _con, vd);
+       evas_object_data_set(genlist, "view_data", vd);
+       for (idx = 0 ; idx < 32; idx++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->idx = vd->g_idx;
+               vd->g_idx++;
+               it = elm_genlist_item_append(genlist, vd->itc[0], id, NULL,
+                                       ELM_GENLIST_ITEM_TREE, _gl_sel, id);
+       }
+       it = elm_genlist_first_item_get(genlist);
+       if (it) {
+               printf("First Item, ");
+               _print_item(it);
+       }
+       it = elm_genlist_last_item_get(genlist);
+       if (it) {
+               printf("Last Item, ");
+               _print_item(it);
+       }
+       return genlist;
+}
+
+void genlist_collection_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       View_Data *vd;
+       struct appdata *ad = data;
+
+       genlist_demo_names = genlist_get_demo_names();
+       // Create layout data for this view
+       vd = calloc(1, sizeof(View_Data));
+       vd->g_idx = 0;
+       vd->ad = ad;
+       vd->box = elm_box_add(ad->nf);
+       vd->genlist = _create_genlist(vd, ad->nf);
+       evas_object_show(vd->genlist);
+       elm_box_pack_end(vd->box, vd->genlist);
+       vd->navi_it = elm_naviframe_item_push(ad->nf, _("Collection"),
+                                       NULL, NULL, vd->box, NULL);
+       evas_object_event_callback_add(vd->box, EVAS_CALLBACK_FREE, _view_free_cb, vd);
+       elm_object_item_part_content_set(vd->navi_it, "toolbar", _create_menu_toolbar(vd));
+       elm_object_item_part_content_set(vd->navi_it, "toolbar_more_btn", _create_menu_more_button(vd));
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_color.c b/live.viewer/dbox.app/src/genlist/genlist_color.c
new file mode 100644 (file)
index 0000000..3f4f507
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+#include <stdlib.h>
+#include <time.h>
+
+/*********************************************************
+  Genlist Color
+ ********************************************************/
+
+#define NUM_OF_ITEMS 2000
+typedef struct _Item_Data {
+       Elm_Object_Item *item;
+       int bg_r, bg_g, bg_b, bg_a;
+       char *name;
+       char *country;
+       char *photo_path;
+} Item_Data;
+
+#define NUM_OF_PHOTO 9
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu100.jpg", "iu2-100.jpg", "koo100.jpg", "top100.jpg",
+       "boa100.jpg", "kimtaehee100.jpg", "moon100.jpg", "taeyon100.jpg",
+       NULL
+};
+
+static char **genlist_demo_names = NULL;
+static char **genlist_demo_country_names = NULL;
+
+static void
+_view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       Elm_Theme *th = data;
+       // Free customized theme
+       elm_theme_free(th);
+}
+
+static void _change_color_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Item_Data *item_data = (Item_Data *)elm_object_item_data_get(data);
+       item_data->bg_r = rand() % 255;
+       item_data->bg_g = rand() % 255;
+       item_data->bg_b = rand() % 255;
+       item_data->bg_a = 255;
+       elm_genlist_item_update(data);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *item_data = (Item_Data *)data;
+
+       if (item_data) {
+               if (!strcmp(part, "elm.text")) {
+                       return strdup(item_data->name);
+               } else if (!strcmp(part, "elm.text.sub")) {
+                       return strdup(item_data->country);
+               }
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *item_data = (Item_Data *)data;
+       Evas_Object *image, *rect, *button;
+
+        if (item_data) {
+             if (!strcmp(part, "elm.thumbnail")) {
+                  image = evas_object_image_add(evas_object_evas_get(obj));
+                  evas_object_image_load_size_set(image, 100 * elm_config_scale_get(),
+                                                  100 * elm_config_scale_get());
+                  evas_object_image_fill_set(image, 0, 0, 100 * elm_config_scale_get(),
+                                             100 * elm_config_scale_get());
+                  evas_object_image_file_set(image, item_data->photo_path, NULL);
+                  return image;
+             } else if (!strcmp(part, "elm.swallow.color.bg")) {
+                  rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+                  evas_object_color_set(rect, item_data->bg_r, item_data->bg_g, item_data->bg_b, item_data->bg_a);
+                  return rect;
+             } else if (!strcmp(part, "elm.swallow.end")) {
+                  button = elm_button_add(obj);
+                  elm_object_text_set(button, _("Change Color"));
+                  evas_object_propagate_events_set(button, EINA_FALSE);
+                  evas_object_smart_callback_add(button, "clicked", _change_color_button_cb, item_data->item);
+                  return button;
+             }
+        }
+
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       Item_Data *item_data = (Item_Data *)data;
+       if (item_data) {
+               if (item_data->photo_path)
+                       free(item_data->photo_path);
+               free(item_data);
+       }
+}
+
+static char *_get_name(int index)
+{
+       int num = index;
+       if (num < 0)
+               num = 0;
+       return genlist_demo_names[(num % NUM_OF_GENLIST_DEMO_NAMES)];
+}
+
+static char *_get_country(int index)
+{
+       int num = index;
+       if (num < 0)
+               num = 0;
+       return genlist_demo_country_names[(num % NUM_OF_GENLIST_DEMO_COUNTRY_NAMES)];
+}
+
+static char *_get_photo_path(int index)
+{
+       char *path = NULL;
+       path = calloc(1, PATH_MAX);
+       sprintf(path, ICON_DIR"/genlist/%s", photo_path[(index % NUM_OF_PHOTO)]);
+       return path;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (event_info)
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+}
+
+static Evas_Object *_create_genlist(Evas_Object *parent, Elm_Theme *th)
+{
+       int index = 0;
+       Evas_Object *genlist;
+       Elm_Object_Item *item;
+       Item_Data *item_data;
+
+       genlist_demo_names = genlist_get_demo_names();
+       genlist_demo_country_names = genlist_get_demo_country_names();
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       // Use the new theme for genlist
+       elm_object_theme_set(genlist, th);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       // Set genlist item class
+       itc->item_style = "elm_demo_tizen/dynamic_text_style_change";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = _gl_state_get;
+       itc->func.del = _gl_del;
+
+       // Genlist item append
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               // Create a user data for each item
+               // This should be freed in _gl_del
+               item_data = calloc(1, sizeof(Item_Data));
+
+               // Set item's user data
+               item_data->name = _get_name(index);
+               item_data->country = _get_country(index);
+               item_data->photo_path = _get_photo_path(index);
+               item_data->bg_r = rand() % 255;
+               item_data->bg_g = rand() % 255;
+               item_data->bg_b = rand() % 255;
+               item_data->bg_a = 255;
+
+               // Append a genlist item
+               item = elm_genlist_item_append(genlist, // Genlist
+                               itc,                           // Item Class
+                               item_data,                      // User data
+                               NULL,                           // Parent
+                               ELM_GENLIST_ITEM_NONE,          // Item flags
+                               _gl_sel,                        // Selected Callback
+                               NULL                            // Selected Callback Parameter
+                               );
+
+               // Save item's pointer to use it later
+               item_data->item = item;
+       }
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void genlist_color_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist;
+       struct appdata *ad;
+       Elm_Theme *th;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       // Set random seed
+       srand(time(NULL));
+
+       /* Use of Elm_Theme *th
+               This is for performance enhancement. Genlist in this sample uses
+               customized styles, so we need to use customized edc. If we just add/del
+               extension theme, all created widgets will be refreshed
+               (_theme_hook call). But using a separate Elm_Theme, only genlist will be
+               refreshed. This enhances performance dramatically.
+        **/
+
+       // Create a new theme for customized genlist
+       th = elm_theme_new();
+       // New theme will refer the default theme
+       elm_theme_ref_set(th, NULL);
+       // Extend the new theme to use customized styles as well
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+
+       // Create Genlist
+       genlist = _create_genlist(ad->nf, th);
+
+       elm_naviframe_item_push(ad->nf, "Dynamic Color Change", NULL, NULL, genlist, NULL);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, th);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_dialogue.c b/live.viewer/dbox.app/src/genlist/genlist_dialogue.c
new file mode 100644 (file)
index 0000000..12cec97
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Dialogue Style
+ ********************************************************/
+
+static struct _menu_item menu_its[] = {
+       { "Items", genlist_dialogue_item_cb },
+       { "Application Items (Background)", genlist_dialogue_appitem_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+void genlist_dialogue_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i].name; i++) {
+               elm_list_item_append(list, menu_its[i].name, NULL, NULL,
+                               menu_its[i].func, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Dialogue Group"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_dialogue_appitem.c b/live.viewer/dbox.app/src/genlist/genlist_dialogue_appitem.c
new file mode 100644 (file)
index 0000000..2eeb608
--- /dev/null
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Dialogue Appitem
+ ********************************************************/
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info);
+
+static struct _menu_item menu_its[] = {
+       { "contact - 2text.1icon", _create_genlist },
+       { "contact - 3text.2icon", _create_genlist },
+       { NULL, NULL }
+};
+
+#define NUM_OF_ITEMS 10
+#define NUM_OF_TIMES 10
+static Eina_Bool dialoque_bg;
+
+#define NUM_OF_GROUPS 5
+static char *title[] = {
+       NULL, N_("Colleagues"), NULL, NULL, N_("Classmates")
+};
+
+#define NUM_OF_NAMES 40
+static char **genlist_demo_names = NULL;
+
+static void _list_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       if (data) free(data);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_NAMES;
+       return strdup(genlist_demo_names[index]);
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj,
+               const char *part)
+{
+       int index = ((int)data / 5) % NUM_OF_GROUPS;
+       return strdup(title[index]);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_list_photo_default.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       return icon;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (event_info)
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+}
+
+static char *_accinfo_cb(void *data, Evas_Object *acc)
+{
+       char *dup = NULL;
+       Elm_Object_Item *it = data;
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       if (!txt) {
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       }
+       if (txt) dup = strdup(txt);
+       return dup;
+}
+
+static void _gl_realized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       int index = (int)elm_object_item_data_get(ei);
+       //
+       // ===== Accessibility ====
+       if (elm_config_access_get()) {
+               // Register bg_dialogue image instead whole item
+               Evas_Object *acc = elm_object_item_part_access_register(ei, "bg_dialogue");
+               elm_access_info_cb_set(acc, ELM_ACCESS_INFO, _accinfo_cb, ei);
+       }
+
+       if (index == 0){
+               elm_object_item_signal_emit(ei, "elm,state,top", "");
+               fprintf(stderr, "top item realized\n");
+       } else if (index == (NUM_OF_ITEMS-1)) {
+               elm_object_item_signal_emit(ei, "elm,state,bottom", "");
+               fprintf(stderr, "bottom item realized\n");
+       } else  {
+               elm_object_item_signal_emit(ei, "elm,state,center", "");
+               fprintf(stderr, "center item realized\n");
+       }
+}
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       const char *style = elm_object_item_text_get((Elm_Object_Item *)event_info);
+       char *str = calloc(128, sizeof(char));
+       sprintf(str, "dialogue/bg/%s", style+10);
+       dialoque_bg = EINA_TRUE;
+
+       int index;
+       struct appdata *ad = data;
+       Elm_Object_Item *item = NULL;
+       Evas_Object *genlist;
+       Elm_Genlist_Item_Class *itc, *itc2, *itc3;
+
+       itc = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+
+       itc->item_style = str;
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+
+       // Set item class for dialogue separator
+       itc2->item_style = "dialogue/seperator";
+
+       // Set item class for dialogue title
+       itc3->item_style = "dialogue/grouptitle";
+       itc3->func.text_get = _gl_text_get_title;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0 && !dialoque_bg) {
+                       if (title[index/5%NUM_OF_GROUPS])
+                               item = elm_genlist_item_append(genlist, itc3, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       else
+                               item = elm_genlist_item_append(genlist, itc2, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       item = elm_genlist_item_append(genlist, itc, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+               if (index == 0)
+                       elm_object_item_disabled_set(item, EINA_TRUE);
+       }
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+
+       elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, genlist, NULL);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, str);
+}
+
+void genlist_dialogue_appitem_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+       dialoque_bg = EINA_FALSE;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i].name; i++) {
+               elm_list_item_append(list, menu_its[i].name, NULL, NULL, menu_its[i].func, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Application Items"), NULL, NULL, list, NULL);
+
+       genlist_demo_names = genlist_get_demo_names();
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_dialogue_item.c b/live.viewer/dbox.app/src/genlist/genlist_dialogue_item.c
new file mode 100644 (file)
index 0000000..b51b88e
--- /dev/null
@@ -0,0 +1,838 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Dialogue Group
+ ********************************************************/
+#define NUM_OF_ITEMS 2000
+#define NUM_OF_NAMES 50
+#define NUM_OF_GROUPS 5
+
+typedef struct _Item_Data
+{
+       int index;
+       int highlighted;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static char *menu_its[] = {
+       "1icon",
+       "1icon/no_padding",
+       "1text",
+       "1text.1icon",
+       "1text.1icon.2",
+       "1text.1icon.2.tb",
+       "1text.2icon",
+       "2text.1icon.6",
+       "2text.1icon.6.tb",
+       "1text.1icon.3",
+       "1text.1icon.3.tb",
+       "1text.2icon.2",
+       "1text.3icon",
+       "1text.1icon.5",
+       "2text.1icon.4",
+       "2text.1icon.4.tb",
+       "2text.6",
+       "2text.9",
+       "2text.4",
+       "2text.4.tb",
+       "1text.3icon.2",
+       "1text.1icon.4",
+       "2text.5",
+       "multiline/1text.1icon",
+       "1text.1icon.divider",
+       "1text.2icon.divider",
+       "1text.2icon.10",
+       "2text",
+       "2text.2",
+       "2text.3",
+       "2text.1icon.2",
+       "2text.1icon.3",
+       "2text.3icon",
+       "2text.2icon",
+       "2text.2icon.2",
+       "2text.2icon.3",
+       "2text.2icon.3.tb",
+       "2text.1icon.5",
+       "multiline/1title.1text",
+       "multiline/1title.2text",
+       "1text.4icon",
+       "2text.2icon.4",
+       "2text.2icon.4.tb",
+       "2text.1icon.10",
+       "2text.1icon.10.tb",
+       "2text.1icon.7",
+       "2text.1icon.8",
+       "multiline/2text",
+       "2text.1icon.15",
+       "2text.1icon.divider",
+       "3text.2icon",
+       "grouptitle",
+       "multiline/1text",
+       "2text/expandable",
+       "2text.2/expandable",
+       "2text.3/expandable",
+       "2text.1icon/expandable",
+       "3text.1icon/expandable",
+       "1text/expandable",
+       NULL
+};
+
+static char *title[] =
+{ "Family", "Friends", "Colleagues", "Club", "Classmates" };
+
+static char *help_dialogue_message =
+       "Help message<br>1. Activate Wi-Fi on your device<br>"
+       "2. Find name in your network list.<br>"
+       "3. Connect name by entering password in WPA field.";
+
+static char **genlist_demo_names;
+
+static const char *color_set[5] =
+{
+       "#ff0000ff",
+       "#00ff00ff",
+       "#0000ffff",
+       "#ff00ffff",
+       "#00ffffff"
+};
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: unrealized callback will be called after this.
+       // accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static void _list_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static char *
+_gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       index = (index / 5) % NUM_OF_GROUPS;
+       return strdup(title[index]);
+}
+
+static char *
+_gl_text_get_password(void *data, Evas_Object *obj, const char *part)
+{
+       return strdup("password");
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       char buf[1024];
+
+       if (!strcmp(part, "elm.text.2")) index+=2;
+
+       snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_NAMES]);
+       return strdup(buf);
+}
+
+static char *
+_gl_text_multline_2text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       char buf[2048];
+
+       if (!strcmp(part, "elm.text.1")) {
+               snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_NAMES]);
+               return strdup(buf);
+       } else {
+               int size = (index % 30)*4 + 32;
+               const char *color = color_set[index % 5];
+               sprintf(buf, "<font_size=%d><color=%s>%s</color></font_size>",
+                               size, color, genlist_demo_names[index%NUM_OF_NAMES]);
+               return strdup(buf);
+       }
+}
+
+static char *_gl_text_get_textblock(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index % NUM_OF_NAMES;
+       char buf[PATH_MAX] = {0, };
+       int size;
+       const char *color;
+
+       size = (index % 30)*4 + 32;
+       color = color_set[index % 5];
+       // FIXME: textblock is too slow....
+       if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.2")) {
+               sprintf(buf, "<font_size=%d><color=%s>%s</color></font_size>",
+                               size, color, genlist_demo_names[index]);
+       } else
+               sprintf(buf, "<color=%s>%s</color>",
+                               color, genlist_demo_names[index]);
+
+       return strdup(buf);
+}
+
+static char *_gl_text_help_dialogue_get(void *data, Evas_Object *obj, const char *part)
+{
+       return strdup(help_dialogue_message);
+}
+
+static Evas_Object *_gl_minus_btn_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object * icon = elm_button_add(obj);
+       elm_object_style_set(icon, "minus");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_colorbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       if (index%3 == 0) evas_object_color_set(icon, 80, 107, 207, 255);
+       else if (index%3 == 1) evas_object_color_set(icon, 72, 136, 42, 255);
+       else if (index%3 == 2) evas_object_color_set(icon, 204, 52, 52, 255);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_progressbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+
+       Evas_Object *icon = elm_progressbar_add(obj);
+       elm_object_style_set(icon, "pending_list");
+       elm_progressbar_horizontal_set(icon, EINA_TRUE);
+       elm_progressbar_pulse(icon, EINA_TRUE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_style_set(icon, "reveal");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_check_state_set(icon, EINA_TRUE);
+       elm_object_style_set(icon, "on&off");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_object_style_set(icon, "default/genlist");
+       elm_check_state_set(icon, EINA_TRUE);
+       evas_object_repeat_events_set(icon, EINA_TRUE);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_text_set(icon, "Text Button");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/iu.jpg", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_photo_get(void *data, Evas_Object *obj, const char *part)
+{
+
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+
+       Item_Data *id = data;
+       int index = id->index % (sizeof(photo_path)/sizeof(*photo_path));
+       char buf[PATH_MAX];
+       Evas_Object *icon = elm_image_add(obj);
+       sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index]);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+       else if (!strcmp(part, "elm.swallow.end")) {
+               return _gl_icon_reveal_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               return _gl_icon_colorbar_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               return _gl_icon_progressbar_get(data, obj, part);
+       }
+       return _gl_icon_get(data, obj, part);
+}
+
+static Evas_Object *_gl_content_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data;
+       if (!strcmp(part, "elm.icon") && index == 0) {
+               Evas_Object *progressbar  = elm_progressbar_add(obj);
+               elm_object_style_set(progressbar, "list_process_small");
+               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+               elm_progressbar_pulse(progressbar, EINA_TRUE);
+               return progressbar;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_icon_grouptitle_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       if (!strcmp(part, "elm.icon") && ((index % 4) == 0)) {
+               Evas_Object *progressbar  = elm_progressbar_add(obj);
+               elm_object_style_set(progressbar, "list_process_small");
+               elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+               elm_progressbar_pulse(progressbar, EINA_TRUE);
+               return progressbar;
+       }
+       return NULL;
+}
+
+static Evas_Object *
+_gl_2icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_onoff_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_3icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon.3"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icons_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index % 7;
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+       else if (!strcmp(part, "elm.swallow.end")) {
+               return _gl_icon_reveal_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               return _gl_icon_colorbar_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               return _gl_icon_progressbar_get(data, obj, part);
+       }
+
+       if (0 == index) {
+               icon = _gl_icon_progressbar_get(data, obj, part);
+       } else if (1 == index) {
+               icon = _gl_icon_reveal_get(data, obj, part);
+       } else if (2 == index) {
+               icon = _gl_icon_onoff_get(data, obj, part);
+       } else if (3 == index) {
+               icon = _gl_icon_btn_text_get(data, obj, part);
+       } else if (4 == index) {
+               icon = _gl_icon_chk_get(data, obj, part);
+       } else {
+               icon = _gl_icon_photo_get(data, obj, part);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_slider_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *slider, *icon, *icon2;
+
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+
+       slider = elm_slider_add(obj);
+       elm_slider_indicator_show_set(slider, EINA_TRUE);
+       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+       elm_slider_indicator_format_set(slider, "%1.0f");
+
+       icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/00_slider_button_volume_01.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_object_content_set(slider, icon);
+       icon2 = elm_image_add(obj);
+       elm_image_file_set(icon2, ICON_DIR"/00_slider_button_volume_02.png", NULL);
+       evas_object_size_hint_aspect_set(icon2, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_object_part_content_set(slider, "end", icon2);
+       evas_object_propagate_events_set(slider, EINA_FALSE);
+
+       return slider;
+}
+
+static Evas_Object *
+_gl_icon_entry_get(void *data, Evas_Object *obj, const char *part)
+{
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+       Evas_Object *en = elm_entry_add(obj);
+       ea_entry_selection_back_event_allow_set(en, EINA_TRUE);
+       evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(en, 1, EVAS_HINT_FILL);
+
+       limit_filter_data.max_byte_count = 0;
+       limit_filter_data.max_char_count = 1;
+       elm_entry_markup_filter_append(en, elm_entry_filter_limit_size,
+               &limit_filter_data);
+
+       elm_entry_single_line_set(en, EINA_TRUE);
+       elm_entry_password_set(en, EINA_TRUE);
+       elm_object_style_set(en, "list");
+       //elm_entry_entry_set(en, "pass");
+       elm_entry_cursor_end_set(en);
+       return en;
+}
+
+static char *_accinfo_cb(void *data, Evas_Object *acc)
+{
+       char *dup = NULL;
+       Elm_Object_Item *it = data;
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       if (!txt) {
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       }
+       if (txt) dup = strdup(txt);
+       return dup;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("Select callback: %s\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+
+       // Make item as unselected
+       elm_genlist_item_selected_set(ei, EINA_FALSE);
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "dialogue/1text.1icon.3") ||
+               !strcmp(itc->item_style, "dialogue/1text.1icon") ||
+               !strcmp(itc->item_style, "dialogue/1text.2icon.2") ||
+               !strcmp(itc->item_style, "dialogue/1text.3icon") ||
+               !strcmp(itc->item_style, "dialogue/1text.3icon.2") ||
+               !strcmp(itc->item_style, "dialogue/multiline/1text.1icon") ||
+               !strcmp(itc->item_style, "dialogue/1text.2icon.10") ||
+               !strcmp(itc->item_style, "dialogue/2text.1icon.10") ||
+               !strcmp(itc->item_style, "dialogue/2text.1icon.10.tb") ||
+               !strcmp(itc->item_style, "dialogue/2text.2icon")) {
+               printf("update check\n");
+               // Update check button
+               Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.icon");
+               if (!ck) ck = elm_object_item_part_content_get(ei, "elm.icon.1");
+               if (ck) {
+                       Eina_Bool state = elm_check_state_get(ck);
+                       elm_check_state_set(ck, !state);
+               }
+       }
+
+}
+
+static void _access_activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item)
+{
+       //Eina_Bool state;
+
+       elm_genlist_item_selected_set(data, EINA_TRUE);
+       //state = elm_check_state_get(data);
+       //elm_check_state_set(data, !state);
+}
+
+static void _gl_realized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Item_Data *id = elm_object_item_data_get(ei);
+       int index = id->index;
+
+       // ===== Accessibility ====
+       if (elm_config_access_get()) {
+               const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(ei);
+
+               // Register bg_dialogue image to be highlighted instead of whole item
+               if (strcmp(itc->item_style, "dialogue/grouptitle")) {
+                       Evas_Object *acc = elm_object_item_part_access_register(ei, "bg_dialogue");
+                       elm_access_info_cb_set(acc, ELM_ACCESS_INFO, _accinfo_cb, ei);
+                       elm_access_activate_cb_set(acc, _access_activate_cb, ei);
+               }
+
+               // Unregister item not to be highglihted
+               if (!strcmp(itc->item_style, "dialogue/1icon/no_padding")) {
+                       elm_object_item_access_unregister(ei);
+               }
+
+               // if icon is not appended yet, register icon to be highglihted
+               if (!strcmp(itc->item_style, "dialogue/1icon") ||
+                               !strcmp(itc->item_style, "dialogue/1icon/no_padding")) {
+                       const Eina_List *org = elm_object_item_access_order_get(ei);
+                       Evas_Object *content =
+                               elm_object_item_part_content_get(ei, "elm.icon");
+                       if (content &&  !eina_list_data_find(org, content)) {
+                               Evas_Object *tmp;
+                               Eina_List *l;
+                               Eina_List *items = NULL;
+
+                               // Duplicate original access order
+                               EINA_LIST_FOREACH((Eina_List *)org, l, tmp)
+                                       items = eina_list_append(items, tmp);
+
+                               Evas_Object *ao = elm_access_object_register(content, obj);
+                               items = eina_list_append(items, ao);
+                               elm_object_item_access_order_set(ei, items);
+                       }
+               }
+
+               // Remove progress from access order not to be highlighted
+               if (!strcmp(itc->item_style, "dialogue/grouptitle")) {
+                       printf("laskjdasf\n");
+                       const Eina_List *org = elm_object_item_access_order_get(ei);
+                       Evas_Object *content =
+                               elm_object_item_part_content_get(ei, "elm.icon");
+                       printf("content: %p\n", content);
+
+                       if (content && eina_list_data_find(org, content)) {
+                               Evas_Object *tmp;
+                               Eina_List *l;
+                               Eina_List *items = NULL;
+
+                               // Duplicate original access order
+                               EINA_LIST_FOREACH((Eina_List *)org, l, tmp)
+                                       items = eina_list_append(items, tmp);
+
+                               items = eina_list_remove(items, content);
+                               elm_object_item_access_order_set(ei, items);
+                       }
+               }
+       }
+
+       if (index == 3) {
+               elm_object_item_signal_emit(ei, "elm,state,edit,enabled", "");
+       }
+
+       if (index == 0) {
+               elm_object_item_signal_emit(ei, "elm,state,normal", "");
+       } else if (index % 6 == 3) {// right after title
+               elm_object_item_signal_emit(ei, "elm,state,top", "");
+       } else if (index % 6 == 0) {
+               elm_object_item_signal_emit(ei, "elm,state,bottom", "");
+       } else {
+               elm_object_item_signal_emit(ei, "elm,state,center", "");
+       }
+
+
+}
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int index;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+       const char *style = elm_object_item_text_get(event_info);
+
+       char str[256];
+       sprintf(str, "dialogue/%s", style);
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc, *itc2, *itc3;
+       itc = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+
+       // Set item class for dialogue normal items
+       // If str is heap memory, not static, use stringshare add.
+       itc->item_style = eina_stringshare_add(str);
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.del = _gl_del;
+
+       // Set item class for dialogue separator
+       itc2->item_style = "dialogue/separator";
+       itc2->func.del = _gl_del;
+
+       // Set item class for dialogue title
+       itc3->item_style = "dialogue/grouptitle";
+       itc3->func.text_get = _gl_text_get_title;
+       itc3->func.content_get = _gl_content_get_title;
+       itc3->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       // Optimize your application with appropriate genlist block size.
+       elm_genlist_block_count_set(genlist, 14);
+
+       // COMPRESS MODE
+       // If multiline text (entry, textblock, sliding mode) is used, use compress mode for
+       // compressing width.
+       if (strstr(style, ".tb") || strstr(style, "multiline")) {
+               printf("Compress mode enabled\n");
+               elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       }
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       if (!strstr(style, ".tb") && !strstr(style, "multiline")) {
+               printf("Homogeneous mode enabled\n");
+               elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       }
+       // REALIZATION MODE
+       // password part is entry, for resize entry
+       // Use realization mode
+       if (!strcmp(style, "1text.4icon")) {
+               elm_genlist_realization_mode_set(genlist, EINA_TRUE);
+       }
+
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+
+       if (strstr(style, ".tb"))
+               itc->func.text_get = _gl_text_get_textblock;
+       else if (!strcmp(style, "multiline/1text")) {
+               eina_stringshare_del(itc->item_style);
+               itc->item_style = eina_stringshare_add(style);
+               itc->func.text_get = _gl_text_help_dialogue_get;
+       }
+
+       if (strstr(style, ".thumb."))
+               itc->func.content_get = _gl_icon_photo_get;
+
+       if (!strcmp(style, "1icon") || !strcmp(style, "1icon/no_padding"))
+               itc->func.content_get = _gl_icons_get;
+       else if (!strcmp(style, "multiline/1text.1icon"))
+               itc->func.content_get = _gl_icon_chk_get;
+       else if (!strcmp(style, "1text.1icon") || !strcmp(style, "1text.2icon") ||
+                        !strcmp(style, "1text.1icon.divider") ||
+                        !strcmp(style, "1text.2icon.divider") ||
+                        !strcmp(style, "2text.1icon.divider") ||
+                        !strcmp(style, "2text.1icon.10") ||
+                        !strcmp(style, "2text.1icon.10.tb"))
+               itc->func.content_get = _gl_2icon_onoff_get;
+       else if (!strcmp(style, "1text.1icon.5"))
+               itc->func.content_get = _gl_icon_slider_get;
+       else if (!strcmp(style, "2text.1icon.4") ||
+                       !strcmp(style, "2text.1icon.4.tb"))
+               itc->func.content_get = _gl_icon_progressbar_get;
+       else if (!strcmp(style, "1text.1icon.3") ||
+                        !strcmp(style, "1text.2icon.10") ||
+                        !strcmp(style, "2text.2icon"))
+               itc->func.content_get = _gl_2icon_chk_get;
+       else if (!strcmp(style, "2text.2icon.3") ||
+                        !strcmp(style, "2text.2icon.3.tb"))
+               itc->func.content_get = _gl_2icon_reveal_get;
+       else if (!strcmp(style, "grouptitle"))
+               itc->func.content_get = _gl_icon_grouptitle_get;
+       else if (!strcmp(style, "1text.2icon.2"))
+               itc->func.content_get = _gl_2icon_chk_reveal_get;
+       else if (!strcmp(style, "1text.3icon") ||
+                        !strcmp(style, "1text.3icon.2"))
+               itc->func.content_get = _gl_3icon_chk_reveal_get;
+
+       int num = NUM_OF_ITEMS;
+       if (!strcmp(style, "1text.4icon")) {
+               num = 20;
+               itc->func.text_get = _gl_text_get_password;
+               itc->func.content_get = _gl_icon_entry_get;
+       } else if (!strcmp(style, "multiline/2text"))
+               itc->func.text_get = _gl_text_multline_2text_get;
+
+       for (index = 0; index < num; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               if (index == 0) {
+                       item = elm_genlist_item_append(genlist,
+                                       itc,
+                                       id,
+                                       NULL,
+                                       ELM_GENLIST_ITEM_NONE,
+                                       _gl_sel,
+                                       NULL);
+               } else if (index % 6 == 1) { // Separator
+                       item = elm_genlist_item_append(genlist,
+                                       itc2,
+                                       id,
+                                       NULL,
+                                       ELM_GENLIST_ITEM_NONE,
+                                       _gl_sel,
+                                       NULL);
+                       elm_genlist_item_select_mode_set(item,
+                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else if (index % 6 == 2) { // Title
+                       item = elm_genlist_item_append(
+                                       genlist,
+                                       itc3,
+                                       id,
+                                       NULL,
+                                       ELM_GENLIST_ITEM_NONE,
+                                       _gl_sel,
+                                       NULL);
+                       elm_genlist_item_select_mode_set(item,
+                                       ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       // Normal item
+                       item = elm_genlist_item_append(
+                                       genlist,
+                                       itc,
+                                       id, NULL,
+                                       ELM_GENLIST_ITEM_NONE,
+                                       _gl_sel,
+                                       NULL);
+               }
+               if (index == 0) elm_object_item_disabled_set(item, EINA_TRUE);
+               id->item = item;
+       }
+       // Unref item class
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+
+       elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, genlist, NULL);
+}
+
+void genlist_dialogue_item_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i]; i++) {
+               elm_list_item_append(list, menu_its[i], NULL, NULL, _create_genlist, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Items"), NULL, NULL, list, NULL);
+
+       genlist_demo_names = genlist_get_demo_names();
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_edit.c b/live.viewer/dbox.app/src/genlist/genlist_edit.c
new file mode 100644 (file)
index 0000000..40982fd
--- /dev/null
@@ -0,0 +1,921 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+#include "efl_assist.h"
+
+/*********************************************************
+  Genlist Edit
+ ********************************************************/
+
+#define NUM_OF_ITEMS 1000
+#define EDITMODE "Edit Mode"
+#define REORDER  "Reorder"
+#define EDIT_REORDER "Edit Reorder"
+#define WIDTH 500
+#define HEIGHT 600
+#define ZOOM_TOLERANCE 0.4
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+
+typedef struct _View_Data {
+       struct appdata *ad;
+       char** genlist_demo_country_names;
+
+       Evas_Object *genlist;
+       Evas_Object *box;
+       Elm_Object_Item *navi_it;
+
+       Evas_Object *select_all_layout;
+
+       Elm_Object_Item *renamed_it;
+       int checked_count;
+       Evas_Object *ctx;
+       Elm_Object_Item *pinch_zoom_it;
+       Eina_Bool pinch_zoomed;
+} View_Data;
+
+typedef struct _Item_Data {
+       View_Data *vd;
+       int index;
+       Elm_Object_Item *it;  // Genlist Item pointer
+       char *label;
+       Eina_Bool checked;     // Check status
+} Item_Data;
+
+static Eina_Bool rotate_flag = EINA_FALSE;
+static Evas_Object *create_del_done_toolbar(View_Data *vd);
+static Evas_Object *create_done_toolbar(View_Data *vd);
+static void _del_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _done_toolbar_cb(void *data, Evas_Object *obj, void *event_info);
+static void _maxlength_reached_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("Maxlength reached!\n");
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       View_Data *vd = data;
+       if(vd && vd->ad) elm_object_style_set(vd->ad->bg, "default");
+       if (vd) free(vd);
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: unrealized callback will be called after this.
+       // accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id && id->label) free(id->label);
+       if (id) free(id);
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info) // This callback is for showing(hiding) X marked button.
+{
+       Item_Data *id = data;
+       if (id->label) free(id->label);
+       id->label = strdup(elm_entry_entry_get(obj));
+}
+
+static void _unset_rename(Evas_Object *genlist)
+{
+       View_Data *vd = evas_object_data_get(genlist, "view_data");
+
+       if ((vd) && (vd->renamed_it) && (elm_genlist_item_flip_get(vd->renamed_it))) {
+               printf("rename stop\n");
+               //elm_genlist_decorate_mode_set(vd->genlist, EINA_FALSE);
+               elm_genlist_item_flip_set(vd->renamed_it, EINA_FALSE);
+               elm_genlist_item_select_mode_set(vd->renamed_it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+               vd->renamed_it = NULL;
+       }
+}
+
+static void _rename_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *genlist = elm_object_item_widget_get(data);
+       View_Data *vd = evas_object_data_get(genlist, "view_data");
+
+       if (vd) {
+               printf("rename start\n");
+               _unset_rename(genlist);
+               vd->renamed_it = data;
+               elm_genlist_item_flip_set(vd->renamed_it, EINA_TRUE);
+               elm_genlist_item_select_mode_set(vd->renamed_it, ELM_OBJECT_SELECT_MODE_NONE);
+       }
+}
+
+static void
+_navi_text_update(View_Data *vd)
+{
+       char buf[1024];
+       snprintf(buf, 1023, "%d selectded", vd->checked_count);
+       elm_object_item_part_text_set(vd->navi_it, NULL, buf);
+}
+
+static void
+_cancel_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist = data;
+       _unset_rename(genlist);
+}
+
+static void _check_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       // For accessibility, because accessbility activate events cannot be propagated.
+       if (elm_config_access_get()) {
+               Item_Data *it_data = elm_object_item_data_get(data);
+               Eina_Bool state = elm_check_state_get(obj);
+               if (state) it_data->vd->checked_count++;
+               else it_data->vd->checked_count--;
+               printf("check changed, count: %d\n", it_data->vd->checked_count);
+               if (it_data->vd->select_all_layout) {
+                       Evas_Object *check =
+                               elm_object_part_content_get(it_data->vd->select_all_layout,
+                                               "elm.icon");
+                       if (elm_genlist_items_count(it_data->vd->genlist) ==
+                                       it_data->vd->checked_count)
+                               elm_check_state_set(check, EINA_TRUE);
+                       else elm_check_state_set(check, EINA_FALSE);
+               }
+               _navi_text_update(it_data->vd);
+       }
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       Elm_Object_Item *item = ei;
+       Item_Data *it_data = data;
+       Eina_Bool state = EINA_FALSE;
+
+       _unset_rename(obj);
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+       printf("item(%p) selected\n", item);
+
+       if (elm_genlist_item_flip_get(item)) return;
+       if (!elm_genlist_decorate_mode_get(obj)) return;
+
+       Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.edit.icon.1");
+       if (ck) {
+               state = elm_check_state_get(ck);
+               elm_check_state_set(ck, !state);
+               if (!state) it_data->vd->checked_count++;
+               else it_data->vd->checked_count--;
+               printf("check changed, count: %d\n", it_data->vd->checked_count);
+               if (it_data->vd->select_all_layout) {
+                       Evas_Object *check =
+                               elm_object_part_content_get(it_data->vd->select_all_layout,
+                                               "elm.icon");
+                       if (elm_genlist_items_count(it_data->vd->genlist) ==
+                                       it_data->vd->checked_count)
+                               elm_check_state_set(check, EINA_TRUE);
+                       else elm_check_state_set(check, EINA_FALSE);
+               }
+               _navi_text_update(it_data->vd);
+       }
+}
+
+static char *
+_create_label(View_Data *vd, int index)
+{
+       int num = index % NUM_OF_GENLIST_DEMO_COUNTRY_NAMES;
+       return strdup(vd->genlist_demo_country_names[num]);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       return strdup(id->label);
+}
+
+static Evas_Object *
+_gl_icon_photo_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index % (sizeof(photo_path)/sizeof(*photo_path));
+       char buf[PATH_MAX];
+       Evas_Object *icon = elm_image_add(obj);
+       sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index]);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static void
+_entry_edit_mode_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       evas_object_event_callback_del(obj, EVAS_CALLBACK_SHOW, _entry_edit_mode_show_cb);
+       elm_object_focus_set(obj, EINA_TRUE);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *content = NULL;
+       Item_Data *id = data;
+
+       // "edit_default" EDC layout is like below. each part is swallow part.
+       // the existing item is swllowed to  elm.swallow.decorate.content part.
+       // --------------------------------------------------------------------
+       // | elm.edit.icon.1 | elm.swallow.decorate.content | elm.edit.icon,2 |
+       // --------------------------------------------------------------------
+       // if flip mode is enabled, genlist shows below swallow part
+       // ------------------------------------------------------
+       // | elm.flip.content |  elm.flip.icon |
+       // ------------------------------------------------------
+
+       if (elm_genlist_decorate_mode_get(obj)) {
+               if (!strcmp(part, "elm.flip.content")) {
+                       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+                       Evas_Object *entry;
+                       entry = ea_editfield_add(obj, EA_EDITFIELD_SCROLL_SINGLELINE);
+                       evas_object_smart_callback_add(entry, "changed", _changed_cb, id);
+                       evas_object_smart_callback_add(entry, "preedit,changed", _changed_cb, id);
+                       evas_object_smart_callback_add(entry, "maxlength,reached", _maxlength_reached_cb, NULL);
+
+                       // the below is sample code for control entry. It is not mandatory.
+                       limit_filter_data.max_char_count = 0;
+                       limit_filter_data.max_byte_count = 30;
+                       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+
+                       // Set entry's text as saved text
+                       elm_entry_entry_set(entry, id->label);
+                       elm_entry_cursor_end_set(entry);
+                       evas_object_event_callback_add(entry, EVAS_CALLBACK_SHOW, _entry_edit_mode_show_cb, NULL);
+                       return entry;
+               } else if (!strcmp(part, "elm.flip.icon")) {
+                       content = elm_button_add(obj);
+                       elm_object_text_set(content, _("Done"));
+                       evas_object_smart_callback_add(content, "clicked", _cancel_clicked, obj);
+                       evas_object_propagate_events_set(content, EINA_FALSE);
+               } else if (!strcmp(part, "elm.edit.icon.1")) {
+                       // swallow checkbox or radio button
+                       content = elm_check_add(obj);
+                       elm_object_style_set(content, "default/genlist");
+                       // keep & revoke the state from integer pointer
+                       elm_check_state_pointer_set(content, &id->checked);
+                       // Repeat events to below (genlist)
+                       // So that if check is clicked, genlist can be clicked.
+                       evas_object_repeat_events_set(content, EINA_TRUE);
+                       evas_object_propagate_events_set(content, EINA_FALSE);
+                       if (id->it) evas_object_smart_callback_add(content, "changed",
+                                       _check_change_cb, id->it);
+               } else if (!strcmp(part, "elm.edit.icon.2")) {
+                       // swallow rename button if need
+                       content = elm_button_add(obj);
+                       elm_object_style_set(content, "rename");
+                       evas_object_propagate_events_set(content, EINA_FALSE);
+                       if (id->it) evas_object_smart_callback_add(content, "clicked",
+                                                                                                       _rename_button_cb, id->it);
+               }
+               else return _gl_icon_photo_get(data, obj, part);
+       } else return _gl_icon_photo_get(data, obj, part);
+       return content;
+}
+
+static void _realized_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = elm_object_item_data_get(ei);
+       printf("Realized (%d)\n", id->index);
+}
+
+static void _unrealized_cb(void *data, Evas_Object *obj, void *ei)
+{
+       // FIXME: _gl_del callback will be called before this.
+       // So id already be freed
+       Item_Data *id = elm_object_item_data_get(ei);
+       printf("Unrealized (%d)\n", id->index);
+}
+
+static void _item_down_cb(void *data, Evas_Object *obj, void *ei)
+{
+       View_Data *vd = data;
+       vd->pinch_zoom_it = ei;
+}
+
+static void _items_hide(Evas_Object *obj, Eina_Bool enabled)
+{
+       View_Data *vd = (View_Data*)obj;
+       Elm_Object_Item *it = elm_genlist_first_item_get(vd->genlist);
+       while (it) {
+               if (elm_genlist_item_type_get(it) != ELM_GENLIST_ITEM_GROUP) {
+                       if (enabled)
+                               elm_genlist_item_hide_set(it, EINA_TRUE);
+                       else
+                               elm_genlist_item_hide_set(it, EINA_FALSE);
+               }
+
+               it = elm_genlist_item_next_get(it);
+       }
+}
+
+static Evas_Event_Flags
+_pinch_zoom_cb(void *data, void *event_info)
+{
+   View_Data *vd = data;
+   Elm_Gesture_Zoom_Info *p = (Elm_Gesture_Zoom_Info *) event_info;
+
+   if (p->zoom > 1.0 + ZOOM_TOLERANCE)
+     {
+               if (!vd->pinch_zoomed) return EVAS_EVENT_FLAG_NONE;
+
+               printf("PINCH ZOOM OUT \n");
+
+               vd->pinch_zoomed = EINA_FALSE;
+               _items_hide(data, EINA_FALSE);
+               elm_genlist_item_show(vd->pinch_zoom_it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+
+     }
+   else if (p->zoom < 1.0 - ZOOM_TOLERANCE)
+     {
+               if (vd->pinch_zoomed) return EVAS_EVENT_FLAG_NONE;
+
+               printf("PINCH ZOOM IN \n");
+
+               vd->pinch_zoomed = EINA_TRUE;
+               _items_hide(data, EINA_TRUE);
+     }
+
+   return EVAS_EVENT_FLAG_NONE;
+}
+
+// Create genlist and append items
+static Evas_Object *_create_genlist(View_Data *vd, Evas_Object *parent)
+{
+       Item_Data *id;
+       Elm_Object_Item *pit = NULL;
+       int index = 0;
+       Evas_Object *genlist;
+
+       Elm_Theme *th = elm_theme_new();
+       elm_theme_ref_set(th, NULL);
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+
+       vd->genlist_demo_country_names = genlist_get_demo_country_names();
+
+#define ITC_MAX 4
+       Elm_Genlist_Item_Class *itc[ITC_MAX], *itch;
+       for (index = 0; index < ITC_MAX ; index++) {
+               itc[index] = elm_genlist_item_class_new();
+       }
+       itch = elm_genlist_item_class_new();
+
+       itc[0]->item_style = "1text";
+       itc[0]->func.text_get = _gl_text_get;
+       itc[0]->func.content_get = _gl_content_get;
+       itc[0]->func.del = _gl_del;
+       //itc[0]->decorate_all_item_style = "edit_default";
+
+       itc[1]->item_style = "1text.1icon.5.thumb.circle";
+       itc[1]->func.text_get = _gl_text_get;
+       itc[1]->func.content_get = _gl_content_get;
+       itc[1]->func.del = _gl_del;
+       itc[1]->decorate_all_item_style = "edit_default";
+
+       itc[2]->item_style = "1text.1icon.2.thumb.square";
+       itc[2]->func.text_get = _gl_text_get;
+       itc[2]->func.content_get = _gl_content_get;
+       itc[2]->func.del = _gl_del;
+       itc[2]->decorate_all_item_style = "edit_default";
+
+       itc[3]->item_style = "1text.1icon.3";
+       itc[3]->func.text_get = _gl_text_get;
+       itc[3]->func.content_get = _gl_content_get;
+       itc[3]->func.del = _gl_del;
+       itc[3]->decorate_all_item_style = "edit_default";
+
+       itch->item_style = "groupindex";
+       itch->func.text_get = _gl_text_get;
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       elm_object_theme_set(genlist, th);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _realized_cb, vd);
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, vd);
+       evas_object_smart_callback_add(genlist, "pressed", _item_down_cb, vd);
+       evas_object_data_set(genlist, "view_data", vd);
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               // Create Item_Data
+               id = calloc(1, sizeof(Item_Data));
+               id->vd = vd;
+               id->index = index;
+               id->label = _create_label(vd, index);
+               if ((index % 10) == 0) {
+                       id->it = elm_genlist_item_append(genlist, itch, id, NULL,
+                                       ELM_GENLIST_ITEM_GROUP, NULL, id);
+                       elm_genlist_item_select_mode_set(id->it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       pit = id->it;
+               } else {
+                       id->it = elm_genlist_item_append(genlist, itc[index%ITC_MAX], id, pit,
+                                       ELM_GENLIST_ITEM_NONE, _gl_sel, id);
+               }
+       }
+       evas_object_show(genlist);
+
+       for (index = 0; index < ITC_MAX ; index++) {
+               elm_genlist_item_class_free(itc[index]);
+       }
+       elm_genlist_item_class_free(itch);
+
+       return genlist;
+}
+
+static void _select_all_chk_changed_cb(void *data, Evas_Object *obj, void *ei)
+{
+       View_Data *vd = data;
+       Eina_Bool state = elm_check_state_get(obj);
+       int cnt = 0;
+
+       Elm_Object_Item *it = elm_genlist_first_item_get(vd->genlist);
+       while(it) {
+               Item_Data *id = elm_object_item_data_get(it);
+               const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(it);
+               if (itc->decorate_all_item_style) {
+                       // For realized items, set state of real check object
+                       Evas_Object *ck = elm_object_item_part_content_get(it, "elm.edit.icon.1");
+                       if (ck) elm_check_state_set(ck, state);
+                       // For all items (include unrealized), just set pointer state
+                       id->checked = state;
+                       if (state) cnt++;
+               }
+               it = elm_genlist_item_next_get(it);
+       }
+       vd->checked_count = cnt;
+       _navi_text_update(vd);
+}
+
+static void _select_all_layout_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       printf("select all layout clicked\n");
+       View_Data *vd = data;
+       Evas_Object *check = elm_object_part_content_get(vd->select_all_layout, "elm.icon");
+       Eina_Bool state = elm_check_state_get(check);
+       elm_check_state_set(check, !state);
+       _select_all_chk_changed_cb(data, check, NULL);
+}
+
+static void
+_navi_btn_clicked_cb(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Naviframe button clicked\n");
+       View_Data *vd = data;
+       Evas_Object *check = elm_object_part_content_get(vd->select_all_layout, "elm.icon");
+       Eina_Bool state = elm_check_state_get(check);
+       elm_check_state_set(check, !state);
+       _select_all_chk_changed_cb(data, check, NULL);
+
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+    const char *txt = NULL;
+       txt = elm_object_part_text_get(data, "elm.text");
+       if (!txt) return NULL;
+
+       return strdup(_(txt));
+}
+
+static Eina_Bool _access_activate_cb(void *data, Evas_Object *obj, Elm_Access_Action_Info *ai)
+{
+       _select_all_layout_down_cb(data, NULL, NULL, NULL);
+       return EINA_TRUE;
+}
+
+static Evas_Object *
+_create_select_all_layout(View_Data *vd)
+{
+       Evas_Object *layout = elm_layout_add(vd->box);
+       elm_layout_theme_set(layout, "genlist", "item", "select_all/default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+       evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _select_all_layout_down_cb, vd);
+       evas_object_propagate_events_set(layout, EINA_FALSE);
+       evas_object_show(layout);
+
+       Evas_Object *check = elm_check_add(layout);
+       evas_object_propagate_events_set(check, EINA_FALSE);
+       evas_object_smart_callback_add(check, "changed", _select_all_chk_changed_cb, vd);
+       elm_object_part_content_set(layout, "elm.icon", check);
+       elm_object_part_text_set(layout, "elm.text", "Select All");
+
+       // ============== Accessibility
+       Evas_Object *ao = elm_access_object_register(layout, layout);
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, layout);
+    elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_ACTIVATE, _access_activate_cb, vd);
+       elm_object_focus_custom_chain_append(layout, ao, NULL);
+
+       return layout;
+}
+
+static Evas_Object *create_del_done_toolbar(View_Data *vd)
+{
+       Evas_Object *obj;
+
+       /*create toolbar */
+       obj = elm_toolbar_add(vd->ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Delete", _del_toolbar_cb, vd);
+       elm_toolbar_item_append(obj, NULL, "Done", _done_toolbar_cb, vd);
+       return obj;
+}
+
+static Evas_Object *create_done_toolbar(View_Data *vd)
+{
+       Evas_Object *obj;
+       struct appdata *ad;
+       ad = vd->ad;
+
+       /*create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       elm_toolbar_item_append(obj, NULL, "Done", _done_toolbar_cb, vd);
+       return obj;
+}
+
+static Evas_Object *_create_navi_title_btn(View_Data *vd)
+{
+       Evas_Object *ic;
+       Evas_Object *btn = elm_button_add(vd->ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       ic = elm_image_add(btn);
+       elm_image_file_set(ic, ICON_DIR"/00_icon_select_all.png", NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", ic);
+       evas_object_smart_callback_add(btn, "clicked", _navi_btn_clicked_cb, vd);
+       return btn;
+}
+
+void _del_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       View_Data *vd =data;
+
+       Elm_Object_Item *it = elm_genlist_first_item_get(vd->genlist);
+       while (it) {
+               Item_Data *id = elm_object_item_data_get(it);
+               // For unrealized items, use check pointer
+               if (id->checked) {
+                       // Before delete, get next item.
+                       Elm_Object_Item *del_it = it;
+                       it = elm_genlist_item_next_get(it);
+
+                       elm_object_item_del(del_it);
+                       vd->checked_count--;
+               } else it = elm_genlist_item_next_get(it);
+       }
+}
+
+void _done_toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       View_Data *vd = data;
+       Evas_Object *tmp;
+
+       struct appdata *ad;
+       ad = vd->ad;
+       if (!ad) return;
+
+       // Delete select all layout
+       if (vd->select_all_layout) {
+               elm_box_unpack(vd->box, vd->select_all_layout);
+               evas_object_del(vd->select_all_layout);
+               vd->select_all_layout = NULL;
+       }
+
+       // Delete naviframe button
+       elm_object_item_part_text_set(vd->navi_it, NULL, "Edit Mode");
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "title_right_btn");
+       if (tmp) evas_object_del(tmp);
+
+    elm_genlist_decorate_mode_set(vd->genlist, EINA_FALSE);
+       elm_genlist_reorder_mode_set(vd->genlist, EINA_FALSE);
+
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "toolbar");
+       if(tmp) evas_object_del(tmp);
+}
+
+static void
+_edit_on(void *data)
+{
+       if (!data) return;
+       View_Data *vd = data;
+       struct appdata *ad = vd->ad;
+       Evas_Object *tmp;
+
+       if (elm_genlist_decorate_mode_get(vd->genlist) &&
+               !elm_genlist_reorder_mode_get(vd->genlist)) return;
+
+       if (elm_genlist_reorder_mode_get(vd->genlist))
+               elm_genlist_reorder_mode_set(vd->genlist, EINA_FALSE);
+
+       // Change bg style as editmode
+       elm_object_style_set(ad->bg, "edit_mode");
+
+       // Create select all layout
+       if (!vd->select_all_layout) {
+               vd->select_all_layout = _create_select_all_layout(vd);
+               elm_box_pack_start(vd->box, vd->select_all_layout);
+       }
+
+       // Create toolbars
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "toolbar");
+       if (tmp) evas_object_del(tmp);
+       elm_object_item_part_content_set(vd->navi_it, "toolbar",
+                       create_del_done_toolbar(vd));
+
+       // Create naviframe select all button
+       if (!elm_object_item_part_content_get(vd->navi_it, "title_right_btn")) {
+               elm_object_item_part_text_set(vd->navi_it, NULL, "Select Items");
+               elm_object_item_part_content_set(vd->navi_it, "title_right_btn",
+                               _create_navi_title_btn(vd));
+       }
+
+       // Set decoreate mode
+       elm_genlist_decorate_mode_set(vd->genlist, EINA_TRUE);
+       printf("Edit Mode on\n");
+}
+
+static void
+_edit_reorder_on(void *data)
+{
+       if (!data) return;
+       View_Data *vd = data;
+       Evas_Object *tmp;
+       struct appdata *ad = vd->ad;
+
+       if (elm_genlist_decorate_mode_get(vd->genlist) &&
+               elm_genlist_reorder_mode_get(vd->genlist)) return;
+
+       elm_object_style_set(ad->bg, "edit_mode");
+
+       // Create select all layout
+       if (!vd->select_all_layout) {
+               vd->select_all_layout = _create_select_all_layout(vd);
+               elm_box_pack_start(vd->box, vd->select_all_layout);
+       }
+
+       // Create toolbars
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "toolbar");
+       if (tmp) evas_object_del(tmp);
+       elm_object_item_part_content_set(vd->navi_it, "toolbar",
+                       create_del_done_toolbar(vd));
+
+       // Create naviframe select all button
+       if (!elm_object_item_part_content_get(vd->navi_it, "title_right_btn")) {
+               elm_object_item_part_text_set(vd->navi_it, NULL, "Select Items");
+               elm_object_item_part_content_set(vd->navi_it, "title_right_btn",
+                               _create_navi_title_btn(vd));
+       }
+
+       if (!elm_genlist_decorate_mode_get(vd->genlist))
+               elm_genlist_decorate_mode_set(vd->genlist, EINA_TRUE);
+
+       if (!elm_genlist_reorder_mode_get(vd->genlist))
+               elm_genlist_reorder_mode_set(vd->genlist, EINA_TRUE);
+       printf("Edit Reorder Mode on\n");
+}
+
+static void
+_reorder_on(void *data)
+{
+       if (!data) return;
+       View_Data *vd = data;
+       Evas_Object *tmp;
+
+       if (!elm_genlist_decorate_mode_get(vd->genlist) &&
+               elm_genlist_reorder_mode_get(vd->genlist)) return;
+
+       if (elm_genlist_decorate_mode_get(vd->genlist))
+               elm_genlist_decorate_mode_set(vd->genlist, EINA_FALSE);
+
+       // Delete select all layout
+       if (vd->select_all_layout) {
+               elm_box_unpack(vd->box, vd->select_all_layout);
+               evas_object_del(vd->select_all_layout);
+               vd->select_all_layout = NULL;
+       }
+
+       // Create toolbars
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "toolbar");
+       if (tmp) evas_object_del(tmp);
+       elm_object_item_part_content_set(vd->navi_it, "toolbar",
+                                                                       create_done_toolbar(vd));
+
+       // Delete naviframe button
+       elm_object_item_part_text_set(vd->navi_it, NULL, "Edit Mode");
+       tmp = elm_object_item_part_content_unset(vd->navi_it, "title_right_btn");
+       if (tmp) evas_object_del(tmp);
+
+       elm_genlist_reorder_mode_set(vd->genlist, EINA_TRUE);
+       printf("Reorder Mode on\n");
+}
+
+static void
+_extpopup_cb(void *data, Evas_Object *obj, void *event)
+{
+       if ((!data) || (!obj)) return;
+       View_Data *vd = data;
+       const char *label = elm_object_item_text_get((Elm_Object_Item *) event);
+
+       if (label) {
+               if (!strcmp(label, EDITMODE)) {
+                       _edit_on(vd);
+               } else if (!strcmp(label, REORDER)) {
+                       _reorder_on(vd);
+               } else  if (!strcmp(label, EDIT_REORDER)) {
+                       _edit_reorder_on(vd);
+               }
+     }
+       evas_object_del(obj);
+}
+
+static void
+_move_ctx(void *data, Evas_Object *obj)
+{
+       if(!data) return;
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+       Evas_Coord w, h;
+       int pos = -1;
+
+#if DESKTOP
+       evas_object_geometry_get(vd->ad->win_main, NULL, NULL, &w, &h);
+#else
+       elm_win_screen_size_get(vd->ad->win_main, NULL, NULL, &w, &h);
+#endif
+       pos = elm_win_rotation_get(vd->ad->win_main);
+       switch (pos) {
+               case 0:
+               case 180:
+                       evas_object_move(ctx, 0, h);
+                       break;
+               case 90:
+                       evas_object_move(ctx, 0, w);
+                       break;
+               case 270:
+                       evas_object_move(ctx, h, w);
+                       break;
+       }
+}
+
+static void
+_dismissed_cb(void *data, Evas_Object *obj , void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = obj;
+
+               if (!rotate_flag) {
+                       evas_object_del(ctx);
+               }
+               else {
+                       _move_ctx(vd, ctx);
+                       evas_object_show(ctx);
+                       rotate_flag = EINA_FALSE;
+               }
+}
+
+static void
+_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ctx = (Evas_Object *)data;
+
+       if (ctx)
+               rotate_flag = EINA_TRUE;
+       else
+               rotate_flag = EINA_FALSE;
+}
+
+static void
+_rotate_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *ctx = vd->ctx;
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+
+static void _delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd = data;
+       Evas_Object *navi = vd->ad->nf;
+       Evas_Object *ctx = obj;
+
+       evas_object_event_callback_del_full(navi, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_del_full(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+       evas_object_smart_callback_del(ctx, "dismissed", _dismissed_cb);
+       evas_object_event_callback_del_full(ctx, EVAS_CALLBACK_DEL, _delete_cb, navi);
+}
+
+
+static void
+_menu_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *ctx;
+       View_Data *vd = data;
+       struct appdata *ad;
+       ad = vd->ad;
+       double s = elm_config_scale_get();
+
+       ctx = elm_ctxpopup_add(ad->nf);
+       elm_object_style_set(ctx, "more/default");
+       evas_object_smart_callback_add(ctx,"dismissed", _dismissed_cb, vd);
+       evas_object_event_callback_add(ctx, EVAS_CALLBACK_DEL, _delete_cb, vd);
+       evas_object_event_callback_add(ad->nf, EVAS_CALLBACK_RESIZE, _resize_cb, ctx);
+       evas_object_smart_callback_add(elm_object_top_widget_get(ctx), "rotation,changed", _rotate_cb, vd);
+       elm_ctxpopup_item_append(ctx, EDITMODE, NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, REORDER, NULL, _extpopup_cb, vd);
+       elm_ctxpopup_item_append(ctx, EDIT_REORDER, NULL, _extpopup_cb, vd);
+       evas_object_size_hint_max_set(ctx, s*WIDTH, s*HEIGHT);
+       elm_ctxpopup_direction_priority_set(ctx, ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UNKNOWN);
+
+       _move_ctx(vd, ctx);
+       evas_object_show(ctx);
+}
+
+static Evas_Object *_create_menu_button(View_Data *vd)
+{
+       Evas_Object *button;
+
+       button = elm_button_add(vd->ad->nf);
+       elm_object_style_set(button, "naviframe/more/default");
+       evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+       elm_object_text_set(button, _("Menu"));
+       evas_object_show(button);
+       evas_object_smart_callback_add(button, "clicked", _menu_btn_clicked_cb, vd);
+       return button;
+}
+
+void genlist_edit_mode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       View_Data *vd;
+       struct appdata *ad = data;
+       Evas_Object *g_layer;
+
+       // Create layout data for this view
+       vd = calloc(1, sizeof(View_Data));
+       vd->ad = ad;
+
+       vd->box = elm_box_add(vd->ad->nf);
+       evas_object_size_hint_weight_set(vd->box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(vd->box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       vd->genlist = _create_genlist(vd, vd->box);
+       elm_box_pack_end(vd->box, vd->genlist);
+       evas_object_show(vd->box);
+
+       g_layer = elm_gesture_layer_add(vd->genlist);
+       if (g_layer) {
+          elm_gesture_layer_attach(g_layer, vd->genlist);
+          elm_gesture_layer_cb_set
+             (g_layer, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_MOVE, _pinch_zoom_cb, vd);
+       }
+
+       vd->navi_it = elm_naviframe_item_push(ad->nf, _("Edit Mode"), NULL, NULL, vd->box, NULL);
+       evas_object_event_callback_add(vd->box, EVAS_CALLBACK_FREE, _view_free_cb, vd);
+       elm_object_item_part_content_set(vd->navi_it, "toolbar_more_btn",
+                                       _create_menu_button(vd));
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_editfield.c b/live.viewer/dbox.app/src/genlist/genlist_editfield.c
new file mode 100644 (file)
index 0000000..590cc2b
--- /dev/null
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Dialogue Editfield
+ ********************************************************/
+
+typedef struct _Item_Data
+{
+       Elm_Object_Item *item;
+       int dial;
+       int title;
+} Item_Data;
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: Unrealized callback can be called after this.
+       // Accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char* _gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) return strdup("Title");
+       return NULL;
+}
+
+static char* _gl_title_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       if (!strcmp(part, "elm.text")) {
+               if (id->title == 1)
+                       return strdup("Single Line");
+               else if (id->title == 2)
+                       return strdup("Multi Line");
+               else if (id->title == 3)
+                       return strdup("With transparent background");
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_minus_btn_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object * icon = elm_button_add(obj);
+       elm_object_style_set(icon, "minus");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.entry")) { // Add elm_entry to current editfield genlist item.
+               Evas_Object *entry = ea_editfield_add(obj, EA_EDITFIELD_SCROLL_SINGLELINE);
+               elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_EDIT"); // Add guide text to elm_entry.
+
+               return entry;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_multiline_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.edit"))
+               return _gl_minus_btn_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.entry")) { // Add elm_entry to current editfield genlist item.
+               Evas_Object *entry = ea_editfield_add(obj, EA_EDITFIELD_MULTILINE);
+               ea_editfield_clear_button_disabled_set(entry, EINA_TRUE);
+               elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_EDIT"); // Add guide text to elm_entry.
+
+               return entry;
+       }
+       return NULL;
+}
+
+static char *_accinfo_cb(void *data, Evas_Object *acc)
+{
+       char *dup = NULL;
+       Elm_Object_Item *it = data;
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       if (!txt) {
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       }
+       if (txt) dup = strdup(txt);
+       return dup;
+}
+
+static void _realized_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = elm_object_item_data_get(ei);
+
+       printf("Realized: ");
+       if (!id) {
+               printf("Separator\n");
+               return;
+       }
+    else if (id->title > 0) printf("Title[%d]\n", id->title);
+       else printf("Editfield item[%d]\n", id->dial);
+
+       // if dialogue styles
+       if (id->dial == 1) elm_object_item_signal_emit(ei, "elm,state,top", "");
+       else if (id->dial == 2) elm_object_item_signal_emit(ei, "elm,state,center", "");
+       else if (id->dial == 3) elm_object_item_signal_emit(ei, "elm,state,center", "");
+       else if (id->dial == 4) elm_object_item_signal_emit(ei, "elm,state,bottom", "");
+       if (id->dial == 3 || id->dial == 4)
+               elm_object_item_signal_emit(ei, "elm,state,edit,enabled", "");
+
+       if (elm_config_access_get()) {
+               // ===== Accessibility ====
+               const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(ei);
+               if (strstr(itc->item_style, "dialogue/") &&
+                       strcmp(itc->item_style, "dialogue/grouptitle")) {
+                       // Register bg_dialogue image instead whole item
+                       Evas_Object *acc = elm_object_item_part_access_register(ei, "bg_dialogue");
+                       elm_access_info_cb_set(acc, ELM_ACCESS_INFO, _accinfo_cb, ei);
+               }
+       }
+}
+
+
+static void _unrealized_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = elm_object_item_data_get(ei);
+       printf("Unrealized: ");
+       if (!id) {
+               printf("Separator\n");
+               return;
+       }
+    else if (id->title > 0) printf("Title[%d]\n", id->title);
+       else printf("Editfield item\n");
+}
+
+void genlist_editfield_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       Item_Data *id = NULL;
+       Elm_Object_Item *item = NULL;
+       Evas_Object *genlist;
+
+       Elm_Genlist_Item_Class *itc, *itc0, *itc1, *itc2, *itc3, *itc4, *itc5, *itc6, *itc7, *itc8, *itca, *itcb, *itcc;
+       itc = elm_genlist_item_class_new();
+       itc0 = elm_genlist_item_class_new();
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+       itc6 = elm_genlist_item_class_new();
+       itc7 = elm_genlist_item_class_new();
+       itc8 = elm_genlist_item_class_new();
+       itca = elm_genlist_item_class_new();
+       itcb = elm_genlist_item_class_new();
+       itcc = elm_genlist_item_class_new();
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_realization_mode_set(genlist, EINA_TRUE);
+
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       evas_object_smart_callback_add(genlist, "realized", _realized_cb, NULL);
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+       // Title & Separator
+       itc->item_style = "grouptitle";
+       itc->func.text_get = _gl_title_get;
+       itc->func.del = _gl_del;
+
+       itc0->item_style = "dialogue/separator";
+       itc0->func.del = _gl_del;
+
+       // Normal editfield
+       itca->item_style = "editfield/no_bg";
+       itca->func.content_get = _gl_content_get;
+       itca->func.del = _gl_del;
+
+       itcb->item_style = "editfield/title/no_bg";
+       itcb->func.text_get = _gl_text_get;
+       itcb->func.content_get = _gl_content_get;
+       itcb->func.del = _gl_del;
+
+       itcc->item_style = "editfield/no_bg_line";
+       itcc->func.content_get = _gl_content_get;
+       itcc->func.del = _gl_del;
+
+       // Normal editfield
+       itc1->item_style = "editfield";
+       itc1->func.content_get = _gl_content_get;
+       itc1->func.del = _gl_del;
+
+       itc2->item_style = "editfield/title";
+       itc2->func.text_get = _gl_text_get;
+       itc2->func.content_get = _gl_content_get;
+       itc2->func.del = _gl_del;
+
+       // Dialogue editfield
+       itc3->item_style = "dialogue/editfield";
+       itc3->func.content_get = _gl_content_get;
+       itc3->func.del = _gl_del;
+
+       itc4->item_style = "dialogue/editfield/title";
+       itc4->func.text_get = _gl_text_get;
+       itc4->func.content_get = _gl_content_get;
+       itc4->func.del = _gl_del;
+
+       // Multiline editfield
+       itc5->item_style = "editfield";
+       itc5->func.text_get = NULL;
+       itc5->func.content_get = _gl_multiline_content_get;
+       itc5->func.del = _gl_del;
+
+       itc6->item_style = "editfield/title";
+       itc6->func.text_get = _gl_text_get;
+       itc6->func.content_get = _gl_multiline_content_get;
+       itc6->func.del = _gl_del;
+
+       itc7->item_style = "dialogue/editfield";
+       itc7->func.content_get = _gl_multiline_content_get;
+       itc7->func.del = _gl_del;
+
+       itc8->item_style = "dialogue/editfield/title";
+       itc8->func.text_get = _gl_text_get;
+       itc8->func.content_get = _gl_multiline_content_get;
+       itc8->func.del = _gl_del;;
+
+       // ************************** Singline Editfield
+       id = calloc(sizeof(Item_Data), 1);
+       id->title = 1;
+       item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Editfields in Normal styles
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itc1, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itc2, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // Editfields in Dialogue styles
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 1;
+       item = elm_genlist_item_append(genlist, itc3, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 2;
+       item = elm_genlist_item_append(genlist, itc4, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // Editfields in Dialogue styles with editmode
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 3;
+       item = elm_genlist_item_append(genlist, itc3, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 4;
+       item = elm_genlist_item_append(genlist, itc4, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // Separator
+       item = elm_genlist_item_append(genlist, itc0, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       //************************************** Multiline Editfield
+       id = calloc(sizeof(Item_Data), 1);
+       id->title = 2;
+       item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Editfields in Normal styles
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itc5, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itc6, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // Editfields in Dialogue styles
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 1;
+       item = elm_genlist_item_append(genlist, itc7, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 2;
+       item = elm_genlist_item_append(genlist, itc8, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // Editfields in Dialogue styles with editmode
+       id = calloc(sizeof(Item_Data), 1);
+       id->dial = 3;
+       item = elm_genlist_item_append(genlist, itc7, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       // ************************** Without (with transparent) background
+       id = calloc(sizeof(Item_Data), 1);
+       id->title = 3;
+       item = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itca, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itcb, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       id = calloc(sizeof(Item_Data), 1);
+       item = elm_genlist_item_append(genlist, itcc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       id->item = item;
+
+       elm_genlist_item_class_free(itc0);
+       elm_genlist_item_class_free(itc1);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+       elm_genlist_item_class_free(itc4);
+       elm_genlist_item_class_free(itc5);
+       elm_genlist_item_class_free(itc6);
+       elm_genlist_item_class_free(itc7);
+       elm_genlist_item_class_free(itc8);
+       elm_genlist_item_class_free(itca);
+       elm_genlist_item_class_free(itcb);
+       elm_genlist_item_class_free(itcc);
+
+       elm_naviframe_item_push(ad->nf, _("Editfield"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_expandable.c b/live.viewer/dbox.app/src/genlist/genlist_expandable.c
new file mode 100644 (file)
index 0000000..cdad77e
--- /dev/null
@@ -0,0 +1,546 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Expandable List
+ ********************************************************/
+#define IDX_TOP     -1
+#define IDX_BOTTOM  -99
+
+typedef struct _Item_Data
+{
+       Eina_Bool top;
+       Eina_Bool bottom;
+       int index;
+       Elm_Object_Item *item;
+} Item_Data;
+
+const char * mails[] = {
+       "Gmail", "Hotmail", "Hanmail", "Yahoo", "Naver", "Empas", "Samsung", "Daum", NULL
+};
+
+const char * mailbox[] = {
+       "Inbox", "Outbox", "Sent", "Favorite", "Trash", "Spam", "Spam2", NULL
+};
+
+const char * mailbox2[] = {
+       "Private", "Friends", "Work", "TODO", NULL
+};
+
+const char longtxt[] = "This is very very veryyyyyy long longggggggg multiline text";
+
+static void _print_item(Elm_Object_Item *it)
+{
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       int data = (int)elm_object_item_data_get(it);
+       if (!txt)
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       printf(" %p, text(%s), data(%d), index[%d]\n", it, txt, data, elm_genlist_item_index_get(it));
+}
+
+static Evas_Object *_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       Item_Data *id = data;
+       icon = elm_image_add(obj);
+       if (id->item && elm_genlist_item_expanded_get(id->item))
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_icon_favorite_on_45x45.png", NULL);
+       else
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_icon_favorite_off_45x45.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.swallow.colorbar")) {
+               icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_color_set(icon, 80, 107, 207, 255);
+               return icon;
+       } else
+               return _gl_icon_get(data, obj, part);
+
+       return NULL;
+}
+
+static Evas_Object *
+_gl_icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static char *_gl_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int idx = id->index;
+       //printf("text_get: label1: %s\n", mails[idx]);
+       if (!mails[idx]) return strdup("NUUUUUUL");
+       return strdup(mails[idx]);
+}
+
+static char *_gl_label2_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int idx = id->index;
+       //printf("text_get: label2: %s\n", mailbox[idx]);
+       if (!mailbox[idx]) return strdup("NUUUUUUL");
+       return strdup(mailbox[idx]);
+}
+
+static char *_gl_label3_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int idx = id->index;
+       printf("text_get: label3: %s\n", mailbox2[idx]);
+       if (!mailbox2[idx]) return strdup("NUUUUUUL");
+       return strdup(mailbox2[idx]);
+}
+
+static char *_gl_multiline_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       //printf("text_get: label: %s\n", longtxt);
+       return strdup(longtxt);
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Eina_Bool expanded = EINA_FALSE;
+
+       elm_genlist_item_selected_set(ei, EINA_FALSE);
+
+       expanded = elm_genlist_item_expanded_get(ei);
+       elm_genlist_item_expanded_set(ei, !expanded);
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(ei);
+       if (itc->item_style &&
+               (!strcmp(itc->item_style, "1text.1icon.2") ||
+                !strcmp(itc->item_style, "2text.1icon.6")))
+               elm_genlist_item_fields_update(ei, "elm.icon", ELM_GENLIST_ITEM_FIELD_CONTENT);
+}
+
+static void _gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+       Item_Data *id;
+       Elm_Object_Item *it;
+       Elm_Object_Item *parent = event_info;
+       Evas_Object *gl = elm_object_item_widget_get(parent);
+       int depth = 0;
+
+       Elm_Genlist_Item_Class *itc1, *itc2, *itc3, *itc4, *itc5, *itc6, *itc7;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+       itc6 = elm_genlist_item_class_new();
+       itc7 = elm_genlist_item_class_new();
+
+       itc1->item_style = "dialogue/1text";
+       itc1->func.text_get = _gl_label2_get;
+
+       itc2->item_style = "dialogue/1text.2icon";
+       itc2->func.text_get = _gl_label2_get;
+       itc2->func.content_get = _gl_icon_get;
+
+       itc3->item_style = "dialogue/1text/expandable";
+       itc3->func.text_get = _gl_label2_get;
+
+       itc4->item_style = "dialogue/1text.2icon.divider";
+       itc4->func.text_get = _gl_label2_get;
+       itc4->func.content_get = _gl_icon_get;
+
+       itc5->item_style = "dialogue/1text.1icon.3";
+       itc5->func.text_get = _gl_label3_get;
+       itc5->func.content_get = _gl_icon_get;
+
+       itc6->item_style = "dialogue/1text.1icon.2";
+       itc6->func.text_get = _gl_label3_get;
+       itc6->func.content_get = _gl_icon_get;
+
+       itc7->item_style = "dialogue/multiline/2text/expandable";
+       itc7->func.text_get = _gl_multiline_label_get;
+
+       Item_Data *pid = elm_object_item_data_get(parent);
+       depth = elm_genlist_item_expanded_depth_get(parent);
+       printf("Expanded: depth[%d]\n",  depth);
+       if (depth == 0) {
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 0;
+               it = elm_genlist_item_append(gl, itc1, id, parent, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 1;
+               it = elm_genlist_item_append(gl, itc2, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 2;
+               it = elm_genlist_item_append(gl, itc3, id, parent, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 3;
+               it = elm_genlist_item_append(gl, itc4, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 4;
+               it = elm_genlist_item_append(gl, itc1, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 5;
+               it = elm_genlist_item_append(gl, itc2, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 6;
+               it = elm_genlist_item_append(gl, itc3, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 7;
+               it = elm_genlist_item_append(gl, itc4, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 8;
+               if (pid->bottom) id->bottom = EINA_TRUE;
+               it = elm_genlist_item_append(gl, itc7, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+       } else if (depth == 1) {
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 0;
+               it = elm_genlist_item_append(gl, itc5, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 1;
+               it = elm_genlist_item_append(gl, itc6, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 2;
+               it = elm_genlist_item_append(gl, itc5, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+
+               id = calloc(sizeof(Item_Data), 1);
+               id->index = 3;
+               if (pid->bottom) id->bottom = EINA_TRUE;
+               it = elm_genlist_item_append(gl, itc6, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+       }
+
+       elm_genlist_item_class_free(itc1);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+       elm_genlist_item_class_free(itc4);
+       elm_genlist_item_class_free(itc5);
+       elm_genlist_item_class_free(itc6);
+       elm_genlist_item_class_free(itc7);
+}
+
+static void _gl_con(void *data, Evas_Object *obj, void *ei)
+{
+       elm_genlist_item_subitems_clear(ei);
+       Item_Data *id = elm_object_item_data_get(ei);
+       if (id->bottom) {
+               printf("Last parent: bottom\n");
+               elm_object_item_signal_emit(ei, "elm,state,bottom", "");
+       }
+}
+
+static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info)
+{
+       Item_Data *id;
+       Elm_Object_Item *it;
+       Elm_Object_Item *parent = event_info;
+       Evas_Object *gl = elm_object_item_widget_get(parent);
+       int depth = 0;
+
+       depth = elm_genlist_item_expanded_depth_get(parent);
+       printf("Contracted: depth[%d]\n",  depth);
+
+       Elm_Genlist_Item_Class *itc1, *itc2;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+
+       itc1->item_style = "1text.1icon.2";
+       itc1->func.text_get = _gl_label_get;
+       itc1->func.content_get = _gl_icon_get;
+
+       itc2->item_style = "2text.1icon.6";
+       itc2->func.text_get = _gl_label_get;
+       itc2->func.content_get = _gl_icon_get;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 0;
+       it = elm_genlist_item_append(gl, itc1, id, parent, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 1;
+       it = elm_genlist_item_append(gl, itc2, id, parent, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 2;
+       it = elm_genlist_item_append(gl, itc2, id, parent, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 2;
+       it = elm_genlist_item_append(gl, itc1, id, parent, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       elm_genlist_item_class_free(itc1);
+       elm_genlist_item_class_free(itc2);
+}
+
+static char *_accinfo_cb(void *data, Evas_Object *acc)
+{
+       char *dup = NULL;
+       Elm_Object_Item *it = data;
+       const char *txt = elm_object_item_part_text_get(it, "elm.text");
+       if (!txt) {
+               txt = elm_object_item_part_text_get(it, "elm.text.1");
+       }
+       if (txt) dup = strdup(txt);
+       return dup;
+}
+
+static void _access_activate_cb(void *data, Evas_Object *part_obj, Elm_Object_Item *item)
+{
+       elm_genlist_item_selected_set(data, EINA_TRUE);
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *parent = elm_genlist_item_parent_get(ei);
+       Item_Data *id = elm_object_item_data_get(ei);
+       //printf("Realized: data[%d], index[%d],", idx, elm_genlist_item_index_get(ei));
+
+       if (id->top) {
+               printf("top\n");
+               elm_object_item_signal_emit(ei, "elm,state,top", "");
+       } else if (id->bottom) {
+               printf("bottom\n");
+               if (!elm_genlist_item_expanded_get(ei)) {
+                       elm_object_item_signal_emit(ei, "elm,state,bottom", "");
+                       if (parent)
+                               elm_object_item_signal_emit(parent, "elm,state,center", "");
+               }
+       } else {
+               printf("center\n");
+               elm_object_item_signal_emit(ei, "elm,state,center", "");
+       }
+
+       // ===== Accessibility ====
+       if (elm_config_access_get()) {
+               // Register bg_dialogue image to be highlighted instead of whole item
+               Evas_Object *acc = elm_object_item_part_access_register(ei, "bg_dialogue");
+               elm_access_info_cb_set(acc, ELM_ACCESS_INFO, _accinfo_cb, ei);
+               elm_access_activate_cb_set(acc, _access_activate_cb, ei);
+       }
+}
+
+static void _selected(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Selected, ");
+       _print_item(ei);
+}
+
+void genlist_expandable_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+       Elm_Object_Item *it;
+       Item_Data *id;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       Elm_Genlist_Item_Class *itc, *itc2, *itc3, *itc4, *itc5, *itc6, *itc7;
+       itc = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+       itc6 = elm_genlist_item_class_new();
+       itc7 = elm_genlist_item_class_new();
+
+       // Expandable item styles
+       itc->item_style = "dialogue/2text/expandable";
+       itc->func.text_get = _gl_label_get;
+
+       itc2->item_style = "dialogue/2text.2/expandable";
+       itc2->func.text_get = _gl_label_get;
+
+       itc3->item_style = "dialogue/2text.3/expandable";
+       itc3->func.text_get = _gl_label_get;
+
+       itc4->item_style = "dialogue/2text.1icon/expandable";
+       itc4->func.text_get = _gl_label_get;
+       itc4->func.content_get = _gl_2icon_chk_get;
+
+       itc5->item_style = "dialogue/3text.1icon/expandable";
+       itc5->func.text_get = _gl_label_get;
+       itc5->func.content_get = _gl_content_get;
+
+       itc6->item_style = "dialogue/1text/expandable";
+       itc6->func.text_get = _gl_label_get;
+
+       itc7->item_style = "dialogue/multiline/2text/expandable";
+       itc7->func.text_get = _gl_multiline_label_get;
+
+       genlist = elm_genlist_add(ad->nf);
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->top = EINA_TRUE;
+       id->index = 0;
+       it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 1;
+       it = elm_genlist_item_append(genlist, itc2, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 2;
+       it = elm_genlist_item_append(genlist, itc3, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 3;
+       it = elm_genlist_item_append(genlist, itc4, id, NULL, ELM_GENLIST_ITEM_TREE, NULL, NULL);
+       elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 4;
+       it = elm_genlist_item_append(genlist, itc5, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 5;
+       it = elm_genlist_item_append(genlist, itc6, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 6;
+       id->bottom = EINA_TRUE;
+       it = elm_genlist_item_append(genlist, itc7, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+       elm_genlist_item_class_free(itc4);
+       elm_genlist_item_class_free(itc5);
+       elm_genlist_item_class_free(itc6);
+       elm_genlist_item_class_free(itc7);
+
+       evas_object_smart_callback_add(genlist, "expanded", _gl_exp, genlist);
+       evas_object_smart_callback_add(genlist, "contracted", _gl_con, genlist);
+       evas_object_smart_callback_add(genlist, "realized", _realized, genlist);
+       evas_object_smart_callback_add(genlist, "selected", _selected, NULL);
+
+       elm_naviframe_item_push(ad->nf, _("Expandable"), NULL, NULL, genlist, NULL);
+}
+
+void genlist_ndepth_expandable_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+       Item_Data *id;
+       Elm_Object_Item *it;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       Elm_Genlist_Item_Class *itc, *itc2;
+       itc = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+
+       itc->item_style = "1text.1icon.2";
+       itc->func.text_get = _gl_label_get;
+       itc->func.content_get = _gl_icon_get;
+
+       itc2->item_style = "2text.1icon.6";
+       itc2->func.text_get = _gl_label_get;
+       itc2->func.content_get = _gl_icon_get;
+
+       genlist = elm_genlist_add(ad->nf);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 0;
+       it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 1;
+       it = elm_genlist_item_append(genlist, itc2, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 1;
+       it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       id = calloc(sizeof(Item_Data), 1);
+       id->index = 1;
+       it = elm_genlist_item_append(genlist, itc2, id, NULL, ELM_GENLIST_ITEM_TREE, _gl_sel, NULL);
+       id->item = it;
+
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc2);
+
+       evas_object_smart_callback_add(genlist, "expanded", _gl_exp_ndepth, genlist);
+       evas_object_smart_callback_add(genlist, "contracted", _gl_con, genlist);
+       evas_object_smart_callback_add(genlist, "selected", _selected, NULL);
+       elm_naviframe_item_push(ad->nf, _("Expandable"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_fastscroll.c b/live.viewer/dbox.app/src/genlist/genlist_fastscroll.c
new file mode 100644 (file)
index 0000000..d376914
--- /dev/null
@@ -0,0 +1,363 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Fast Scroll
+ ********************************************************/
+#define NUM_OF_ITEMS 204
+#define NUM_OF_TITLES 204
+
+#define ITEM_STYLE_CHECK "1text.1icon.2"
+#define ITEM_STYLE_THUMBNAIL "1text.1icon.5.thumb.square"
+
+typedef struct _Item_Data Item_Data;
+static Eina_Bool state_pointer[2*NUM_OF_ITEMS] = {0};//check states
+static Eina_Bool state_pointer_title[2*NUM_OF_TITLES] = {0};//check states of titles
+
+static struct _menu_item menu_its[] = {
+       { "FastScroll", genlist_index_fastscroll_cb },
+       { "Check", genlist_index_fastscroll_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static Evas_Object *
+_gl_icon_photo_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       index = index % (sizeof(photo_path)/sizeof(*photo_path));
+       char buf[PATH_MAX];
+       Evas_Object *icon = elm_image_add(obj);
+       sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index]);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gli_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       Evas_Object *check;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               check = elm_check_add(obj);
+               elm_object_style_set(check, "default/genlist");
+               //set the State pointer to keep the current UI state of Checkbox.
+               elm_check_state_pointer_set(check, &(state_pointer[index]));
+               evas_object_repeat_events_set(check, EINA_TRUE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               return check;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_glh_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       Evas_Object *check;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               check = elm_check_add(obj);
+               elm_object_style_set(check, "default/genlist");
+               //set the State pointer to keep the current UI state of Checkbox.
+               elm_check_state_pointer_set(check, &(state_pointer_title[index]));
+               evas_object_repeat_events_set(check, EINA_TRUE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               return check;
+       }
+
+       return NULL;
+}
+
+static Eina_Bool _gli_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _list_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static char *_gli_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       int index = (int) data;
+
+       if ((index>>4) <= 15) {
+               snprintf(buf, sizeof(buf), "%c%c", 'A' + ((index >> 4) & 0xf), 'a'
+                               + ((index) & 0xf));
+       }
+       else {
+               snprintf(buf, sizeof(buf), "%c%c", 'Q' + ((index >> 4) & 0xf), 'a'
+                               + ((index) & 0xf));
+       }
+
+       return strdup(buf);
+}
+
+static char *_gli_title_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       int index = (int) data;
+
+       if ((index>>4) <= 15) {
+               snprintf(buf, sizeof(buf), "%c", 'A' + ((index >> 4) & 0xf));
+       }
+       else {
+               snprintf(buf, sizeof(buf), "%c", 'Q' + ((index >> 4) & 0xf));
+       }
+
+       return strdup(buf);
+}
+
+static void _index_delayed_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       // called on a change but delayed in case multiple changes happen in a
+       // short timespan
+       elm_genlist_item_bring_in(elm_object_item_data_get(event_info), ELM_GENLIST_ITEM_SCROLLTO_TOP);
+}
+
+static void _index_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       // this is calld on every change, no matter how often
+       return;
+}
+
+static void _index_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       // called on final select
+       elm_genlist_item_bring_in(elm_object_item_data_get(event_info), ELM_GENLIST_ITEM_SCROLLTO_TOP);
+       elm_index_item_selected_set(event_info, EINA_FALSE);
+}
+
+static Evas_Object* _create_layout_inner(Evas_Object* parent)
+{
+       Evas_Object* layout_inner;
+
+       layout_inner = elm_layout_add(parent);
+       elm_layout_theme_set(layout_inner, "layout", "application", "fastscroll");
+       evas_object_size_hint_weight_set(layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return layout_inner;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       elm_genlist_item_selected_set(ei, EINA_FALSE);
+       int idx = (int)elm_object_item_data_get(ei);
+
+       const Elm_Genlist_Item_Class *class = elm_genlist_item_item_class_get(ei);
+       // Update check button
+       Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.icon");
+       if (ck) {
+               printf("check changed\n");
+               Eina_Bool state = !elm_check_state_get(ck);
+               elm_check_state_set(ck, state);
+               state_pointer_title[idx] = state;
+
+               // if group index is checked/unchecked, then all items in group must be check/uncheck
+               if (!strcmp(class->item_style, "groupindex.icon")) {
+
+                       printf("update child items\n");
+                       Elm_Object_Item *it = elm_genlist_item_next_get(ei);
+                       while(it)  {
+                               const Elm_Genlist_Item_Class *child_class =
+                                       elm_genlist_item_item_class_get(it);
+                               if (!child_class ||
+                                       !strcmp(child_class->item_style, "groupindex.icon"))
+                                       break;
+
+                               ck = elm_object_item_part_content_get(it, "elm.icon");
+                               if (ck) elm_check_state_set(ck, state);
+                               idx = (int)elm_object_item_data_get(it);
+                               state_pointer[idx] = state;
+
+                               it = elm_genlist_item_next_get(it);
+                       }
+               }
+
+       }
+
+
+       /*
+       _chk_changed_cb(data, ck, NULL);
+
+       int index;
+       Eina_Bool gb;
+
+       index = (int)elm_object_item_data_get(item);
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+       // if group index is checked/unchecked, then all items in group must be check/uncheck
+       if (!strcmp(class->item_style, "groupindex.icon")) {
+               state_pointer_title[index] = !state_pointer_title[index];
+               elm_genlist_item_fields_update(item, "elm.icon", ELM_GENLIST_ITEM_FIELD_CONTENT);
+
+               Elm_Object_Item *it = elm_genlist_item_next_get(item);
+               while(it)  {
+                       const Elm_Genlist_Item_Class *class = elm_genlist_item_item_class_get(it);
+                       if (!class || strcmp(class->item_style, ITEM_STYLE_CHECK)) break;
+
+                       // Update child items
+                       state_pointer[(int)elm_object_item_data_get(it)] = state_pointer_title[index];
+                       elm_genlist_item_fields_update(it, "elm.icon", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       it = elm_genlist_item_next_get(it);
+               }
+       }
+       */
+}
+
+static Evas_Object* _create_fastscroll_genlist(void *data, Evas_Object* parent, const char *style)
+{
+       Elm_Object_Item *git=NULL;
+       Evas_Object *genlist, *index;
+       int index1, index2;
+       char buf[32];
+
+       Elm_Genlist_Item_Class *itci, *itch;
+       itci = elm_genlist_item_class_new();
+       itch = elm_genlist_item_class_new();
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       elm_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+
+       // Create index
+       index = elm_index_add(parent);
+       elm_object_part_content_set(parent, "elm.swallow.fastscroll", index);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+
+       // Set item class
+       if (!strcmp(style,"Check")) {
+               itci->item_style = ITEM_STYLE_CHECK;
+               itci->func.text_get = _gli_text_get;
+               itci->func.content_get = _gli_content_get;
+               itci->func.state_get = _gli_state_get;
+
+               itch->item_style = "groupindex.icon";
+               itch->func.content_get = _glh_content_get;
+               itch->func.state_get = _gli_state_get;
+               itch->func.text_get = _gli_title_text_get;
+       }
+       else {
+               itci->item_style = ITEM_STYLE_THUMBNAIL;
+               itci->func.text_get = _gli_text_get;
+               itci->func.content_get = _gl_icon_photo_get;
+               itch->item_style = "groupindex";
+               itch->func.text_get = _gli_title_text_get;
+       }
+
+       index2 = 0;
+       for (index1 = 0; index1 < NUM_OF_ITEMS; index1++) {
+               if ((index2 & 0xf) == 0) {
+                       if ((index2>>4) <= 15)
+                               snprintf(buf, sizeof(buf), "%c", 'A' + ((index2 >> 4) & 0xf));
+                       else if ((index2>>4) <= 25)
+                               snprintf(buf, sizeof(buf), "%c", 'Q' + ((index2 >> 4) & 0xf));
+
+                       git = elm_genlist_item_append(genlist, itch, (void *) index2,
+                                       NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                       elm_index_item_append(index, buf, NULL, git);
+               }
+               elm_genlist_item_append(genlist, itci, (void *) index2,
+                                          git, ELM_GENLIST_ITEM_NONE, _gl_sel,
+                                          NULL);
+               index2 += 2;
+       }
+
+       elm_genlist_item_class_free(itci);
+       elm_genlist_item_class_free(itch);
+
+       evas_object_smart_callback_add(index, "delay,changed", _index_delayed_changed, index);
+       evas_object_smart_callback_add(index, "changed", _index_changed, NULL);
+       evas_object_smart_callback_add(index, "selected", _index_selected, NULL);
+       elm_index_level_go(index, 0);
+
+       return genlist;
+}
+
+void genlist_index_fastscroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+       Evas_Object *layout_inner;
+       const char *menu_name = elm_object_item_text_get((Elm_Object_Item *)event_info);
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_layout_inner(ad->nf);
+       genlist = _create_fastscroll_genlist(ad, layout_inner, menu_name);
+       if (genlist == NULL) return;
+
+       elm_object_part_content_set(layout_inner, "elm.swallow.content", genlist);
+
+       elm_naviframe_item_push(ad->nf, _(menu_name), NULL, NULL, layout_inner, NULL);
+}
+
+void genlist_fastscroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i].name; i++) {
+               elm_list_item_append(list, menu_its[i].name, NULL, NULL,
+                               menu_its[i].func, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Indexed Lists"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_normal.c b/live.viewer/dbox.app/src/genlist/genlist_normal.c
new file mode 100644 (file)
index 0000000..7405ea4
--- /dev/null
@@ -0,0 +1,1699 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Styles
+ ********************************************************/
+#define COLOR_MAX 5
+#define NUM_OF_ITEMS 8000
+#define TEST_SIGNALS 0
+
+typedef struct _Item_Data
+{
+       int index;
+       int highlighted;
+       Elm_Object_Item *item;
+       Eina_Bool checked;
+       Eina_Bool stared;
+} Item_Data;
+
+static char *menu_its[] = {
+       "groupindex",
+       "groupindex.icon",
+       "1icon",
+       "1icon/no_padding",
+       "1icon/with_no_line",
+       "1icon/no_padding_line",
+       /*** 1line styles ***/
+       "1text",
+       "1text.tb",
+       "2text",
+       "1text.1icon",
+       "1text.1icon.6",
+       "1text.1icon.7",
+       "1text.1icon.5",
+       "1text.1icon.5.thumb.circle",
+       "1text.1icon.5.thumb.square",
+       "1text.2icon.3",
+       "1text.2icon.3.tb",
+       "1text.1icon.2",
+       "1text.1icon.2.tb",
+       "2text.1icon",
+       "2text.1icon.tb",
+       "1text.2icon",
+       "1text.2icon.tb",
+       "1text.2icon.6",
+       "1text.2icon.6.tb",
+       "1text.1icon.3",
+       "1text.1icon.3.tb",
+       "1text.2icon.4",
+       "1text.2icon.4.tb",
+       "1text.2icon.2",
+       "1text.3icon",
+       "1text.2icon.9",
+       "1text.3icon.2",
+       "1text.1icon.divider",
+       "1text.2icon.divider",
+       /*** 2line styles ***/
+       "2text.2",
+       "2text.2.tb",
+       "2text.3",
+       "3text",
+       "3text.tb",
+       "2text.1icon.2",
+       "2text.1icon.2.tb",
+       "2text.1icon.10",
+       "2text.1icon.10.tb",
+       "3text.1icon",
+       "3text.1icon.tb",
+       "3text.2icon",
+       "3text.2icon.tb",
+       "2text.1icon.4",
+       "2text.1icon.4.thumb.circle",
+       "2text.1icon.4.thumb.square",
+       "2text.1icon.4.tb",
+       "3text.1icon.2",
+       "3text.1icon.2.tb",
+       "2text.1icon.8",
+       "2text.2icon.4",
+       "2text.2icon.4.tb",
+       "2text.2icon.6",
+       "2text.2icon.6.tb",
+       "2text.2icon.8",
+       "2text.2icon.8.tb",
+       "2text.2icon.progress",
+       "3text.3icon.progress",
+       "2text.1icon.divider",
+       "2text.1icon.12",
+       "2text.1icon.12.tb",
+       "2text.2icon.7",
+       "2text.2icon.5",
+       "2text.3icon.4",
+       "4text.1icon.1",
+       "4text.1icon.1.tb",
+       "4text.1icon.2",
+       "4text.1icon.2.tb",
+       "4text.1",
+       "4text.1.tb",
+       "4text.2",
+       "3text.1icon.3",
+       "3text.1icon.3.tb",
+       "4text.1icon.3",
+       "3text.1icon.1",
+       "2text.2icon.1",
+       "2text.1icon.1",
+       "email.list.test",
+       "email.list",
+       "email.list.conversation",
+       "email.outbox",
+       "email.outbox.conversation",
+       "email.list(lazy)",
+       "multiline/2text.5icon",
+       "1text/popup",
+       "1text.1icon.5.thumb.circle/popup",
+       "1text.1icon.5.thumb.square/popup",
+       "2text.1icon.4.thumb.circle/popup",
+       "2text.1icon.4.thumb.square/popup",
+       "1text.1icon.divider/popup",
+       "1text.2icon.divider/popup",
+       /* do not delete below */
+       NULL
+};
+
+extern char *genlist_demo_names[];
+extern char *genlist_long_texts[];
+extern char *genlist_times[];
+extern char *genlist_messages[];
+static Eina_Bool scrolling;
+static Eina_Bool lazy;
+
+static const char *color_set[COLOR_MAX] =
+{
+       "#ff0000ff",
+       "#00ff00ff",
+       "#0000ffff",
+       "#ff00ffff",
+       "#00ffffff"
+};
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: Unrealized callback can be called after this.
+       // Accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static void _list_selected(void *data, Evas_Object *obj, void *ei)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       int index = id->index;
+
+       if (!strcmp(part, "elm.text.2")) index++;
+
+       snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       return strdup(buf);
+}
+
+static char *
+_gl_email_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       int index = id->index;
+
+       if (!strcmp(part, "elm.text.4")) {
+               index = index%4;
+               if (index == 0) snprintf(buf, 1023, "77");
+               else if (index == 1) snprintf(buf, 1023, "9");
+               else if (index == 2) snprintf(buf, 1023, "1");
+               else  snprintf(buf, 1023, "...");
+       } else if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text.3")) {
+               snprintf(buf, 1023, "<match>%s</match>:%s", part,
+                               genlist_long_texts[index%NUM_OF_GENLIST_LONG_TEXTS]);
+       } else if (!strcmp(part, "elm.text.2")) {
+               snprintf(buf, 1023, "<match>%s</match>:%s", part,
+                               genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       } else snprintf(buf, 1023, "%s:11:30 PM", part);
+
+       return strdup(buf);
+}
+
+static char *_gl_text_get_textblock(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       char buf[PATH_MAX] = {0, };
+       const char *color;
+       int size;
+       int val;
+
+       if (!strcmp(part, "elm.text.4") || !strcmp(part, "elm.text"))
+               val = index+2;
+       else if (!strcmp(part, "elm.text.2"))
+               val = index+4;
+       else if (!strcmp(part, "elm.text.3"))
+               val = index+6;
+       else val = index+8;
+
+       color = color_set[val % COLOR_MAX];
+       size = (val%5)*20 + 32;
+
+       if (index % 10 == 0) return _gl_text_get(data, obj, part);
+       // if textblock is used, application should change color when item is highlighted.
+       if (id->highlighted) // T023P is pressed color of list main text
+               sprintf(buf, "<font_size=%d><color_class=T023P>%s:%s</color></font_size>",
+                               size, part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       else
+               sprintf(buf, "<font_size=%d><color=%s>%s:%s</color></font_size>",
+                               size, color, part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       return strdup(buf);
+}
+
+static char *_gl_text_get_bubble_textblock(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text.4"))
+               return _gl_text_get(data, obj, part);
+       else return _gl_text_get_textblock(data, obj, part);
+}
+
+static char* _gl_multiline_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_GENLIST_TIMES;
+
+       if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.title") ) {
+               return strdup(genlist_times[index]);
+       } else {
+               return strdup(genlist_messages[index]);
+       }
+       return NULL;
+}
+
+static Evas_Object *
+_gl_icon_colorbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       if (index%3 == 0) evas_object_color_set(icon, 80, 107, 207, 255);
+       else if (index%3 == 1) evas_object_color_set(icon, 72, 136, 42, 255);
+       else if (index%3 == 2) evas_object_color_set(icon, 204, 52, 52, 255);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_progressbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_progressbar_add(obj);
+       elm_object_style_set(icon, "pending_list");
+       elm_progressbar_horizontal_set(icon, EINA_TRUE);
+       elm_progressbar_pulse(icon, EINA_TRUE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_style_set(icon, "reveal");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_check_state_set(icon, EINA_TRUE);
+       elm_object_style_set(icon, "on&off");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_object_style_set(icon, "default/genlist");
+       evas_object_repeat_events_set(icon, EINA_TRUE);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_icon_email_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_star_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_icon_favorite_off_45x45.png", NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);
+
+static void _clicked(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Button clicked\n");
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+
+       if (itc && !strcmp(itc->item_style, "1text.1icon")) {
+               printf("Item Class updated\n");
+               // accessibility test
+               elm_genlist_item_item_class_update(id->item, itc);
+
+               Evas_Object *acc = elm_object_item_access_object_get(id->item);
+               // because button is removed, set highlight the item itself.
+               elm_access_highlight_set(acc);
+       }
+}
+
+static Evas_Object *
+_gl_icon_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_text_set(icon, "Text button");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       evas_object_smart_callback_add(icon, "clicked", _clicked, id);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/iu.jpg", NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_photo_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index % (sizeof(photo_path)/sizeof(*photo_path));
+       char buf[PATH_MAX];
+       Evas_Object *icon = elm_image_add(obj);
+       sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index]);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.swallow.end")) {
+               return _gl_icon_reveal_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               return _gl_icon_colorbar_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               return _gl_icon_progressbar_get(data, obj, part);
+       }
+       return _gl_icon_get(data, obj, part);
+}
+
+static Evas_Object *
+_gl_2icon_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_btn_text_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_onoff_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_3icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon.3"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icons_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = (id->index)%7;
+       Evas_Object *icon;
+       if (0 == index) {
+               icon = _gl_icon_progressbar_get(data, obj, part);
+       } else if (1 == index) {
+               icon = _gl_icon_reveal_get(data, obj, part);
+       } else if (2 == index) {
+               icon = _gl_icon_onoff_get(data, obj, part);
+       } else if (3 == index) {
+               icon = _gl_icon_chk_get(data, obj, part);
+       } else if (4 == index) {
+               icon = _gl_icon_btn_text_get(data, obj, part);
+       } else {
+               icon = _gl_icon_photo_get(data, obj, part);
+       }
+       return icon;
+}
+
+static void
+_email_check_clicked(void *data, Evas* e, Evas_Object *obj, void *ei)
+{
+       printf("email check area clicked\n");
+       Item_Data *id = data;
+       id->checked = !id->checked;
+       if (id->checked)
+               elm_object_item_signal_emit(id->item, "elm,state,check,show", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,check,hide", "");
+}
+
+static void
+_email_touch_clicked(void *data, Evas* e, Evas_Object *obj, void *ei)
+{
+       printf("email touch area clicked\n");
+       Item_Data *id = data;
+       id->stared = !id->stared;
+       if (id->stared)
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,enable", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,disable", "");
+}
+
+static Evas_Object *
+_gl_email_icon_test_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       if (!strcmp(part, "elm.check.touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0, 0, 64);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_check_clicked, id);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.4.touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0, 0, 64);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, id);
+               return rect;
+       } else return _gl_content_get(data, obj, part);
+       return NULL;
+}
+
+
+static Evas_Object *
+_gl_email_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       double scale = elm_config_scale_get();
+       if (strstr(part, "touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, id);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0 ,0, 64);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               return _icon_email_chk_get(data, obj, part);
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (index % 2 == 0) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_star_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       return box;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.icon.3")) {
+               index = index % 3;
+               if (index == 0) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_star_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.icon.4")) {
+               return _gl_icon_star_get(data, obj, part);
+       } else return _gl_content_get(data, obj, part);
+       return NULL;
+}
+
+static Evas_Object *
+_gl_email_icon_lazy_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       double scale = elm_config_scale_get();
+       if (strstr(part, "touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, NULL);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0 ,0, 64);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               return _icon_email_chk_get(data, obj, part);
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (scrolling) return NULL;
+               index = index % 2;
+               if (index == 0) return NULL;
+               else {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       return box;
+               }
+       } else if (!strcmp(part, "elm.icon.4")) {
+               if (scrolling) return NULL;
+               Evas_Object *icon = _gl_icon_get(data, obj, part);
+               evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+               return icon;
+       } else if (!strcmp(part, "elm.icon.3")) {
+               if (scrolling) return NULL;
+               index = index % 4;
+               if (index == 0) return NULL;
+               else if (index == 1) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else if (index == 2) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       elm_box_padding_set(box, 10, 0);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else if (index == 3) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       elm_box_padding_set(box, 10, 0);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 50*scale, 50*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               }
+       } else {
+               if (scrolling) return NULL;
+               return _gl_content_get(data, obj, part);
+       }
+       return NULL;
+}
+
+
+static Evas_Object *
+_gl_email_outbox_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.5")) {
+               return _gl_icon_btn_text_get(data, obj, part);
+       } else
+               return _gl_email_icon_get(data, obj, part);
+}
+
+static Evas_Object *
+_gl_icon_highlight_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = NULL;
+       int index = id->index;
+       if (id->highlighted) {
+               printf("Change icon to hilighted icon [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       } else {
+               icon = elm_image_add(obj);
+               // Below should be called before elm_image_file_set
+               elm_image_prescale_set(icon, 10);
+               evas_object_color_set(icon, 128, 128, 128, 128);
+               elm_image_file_set(icon, ICON_DIR"/genlist/iu.jpg", NULL);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       }
+       return icon;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("Select callback: %s\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+
+       // accessibility test
+       if (itc && !strcmp(itc->item_style, "1text.1icon")) {
+               printf("Item Class updated\n");
+               elm_genlist_item_item_class_update(item, itc);
+       }
+
+       // Make item as unselected
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       if (itc && !strcmp(itc->item_style, "groupindex")) {
+               printf("slide start\n");
+               elm_object_item_signal_emit(item, "elm,state,slide,start", "");
+       }
+       if (itc && (!strcmp(itc->item_style, "1text.1icon.3") ||
+               !strcmp(itc->item_style, "1text.1icon.3.tb") ||
+               !strcmp(itc->item_style, "1text.2icon.2") ||
+               !strcmp(itc->item_style, "1text.3icon") ||
+               !strcmp(itc->item_style, "1text.3icon.2") ||
+               !strcmp(itc->item_style, "1text.2icon.9") ||
+               !strcmp(itc->item_style, "1text.2icon.4") ||
+               !strcmp(itc->item_style, "1text.2icon.4.tb") ||
+               !strcmp(itc->item_style, "2text.2icon.7") ||
+               !strcmp(itc->item_style, "2text.2icon.5") ||
+               !strcmp(itc->item_style, "2text.3icon.4"))) {
+               printf("update check\n");
+               // Update check button
+               Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.icon");
+               if (!ck) ck = elm_object_item_part_content_get(ei, "elm.icon.1");
+               if (ck) {
+                       Eina_Bool state = elm_check_state_get(ck);
+                       elm_check_state_set(ck, !state);
+               }
+       }
+}
+
+static void _longpressed(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("longpressed: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       // FIXME: after unrealized & realized, item will be back to default state (unread).
+       elm_object_item_signal_emit(ei, "elm,state,read", "");
+}
+
+static void _scroll_anim_start(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_TRUE;
+       printf("scroll,anim,start\n");
+}
+
+static void _scroll_anim_stop(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_FALSE;
+       if (lazy) {
+               Eina_List *l;
+               Elm_Object_Item *it;
+               l = elm_genlist_realized_items_get(obj);
+               EINA_LIST_FREE(l, it) {
+                       elm_genlist_item_fields_update(it, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.3", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.4", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
+       }
+       printf("scroll,anim,stop\n");
+}
+
+static void _scroll_drag_start(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_TRUE;
+       printf("scroll,drag,start\n");
+}
+
+static void _scroll_drag_stop(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_FALSE;
+       if (lazy) {
+               Eina_List *l, *list;
+               Elm_Object_Item *it;
+               list = elm_genlist_realized_items_get(obj);
+               EINA_LIST_FOREACH(list, l, it) {
+                       elm_genlist_item_fields_update(it, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.3", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.4", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
+       }
+
+       printf("scroll,drag,stop\n");
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Item_Data *id = elm_object_item_data_get(ei);
+       int index = id->index;
+
+       const char *txt = elm_object_item_part_text_get(ei, "elm.text");
+       if (!txt)
+               txt = elm_object_item_part_text_get(ei, "elm.text.1");
+       printf("realized: [%s]\n", txt); //genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+
+       // ===== Accessibility ====
+       if (elm_config_access_get()) {
+               const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(ei);
+               if (!strcmp(itc->item_style, "1icon") ||
+                               !strcmp(itc->item_style, "1icon/no_padding") ||
+                               !strcmp(itc->item_style, "1icon/with_no_line") ||
+                               !strcmp(itc->item_style, "1icon/no_padding_line")) {
+
+                       // Unregister item to not be highlighted
+                       elm_object_item_access_unregister(ei);
+
+                       // if icon is not appended yet, register icon to be highglihted
+                       const Eina_List *org = elm_object_item_access_order_get(ei);
+                       Evas_Object *content =
+                               elm_object_item_part_content_get(ei, "elm.icon");
+                       if (content &&  !eina_list_data_find(org, content)) {
+                               Evas_Object *tmp;
+                               Eina_List *l;
+                               Eina_List *items = NULL;
+
+                               // Duplicate original access order
+                               EINA_LIST_FOREACH((Eina_List *)org, l, tmp)
+                                       items = eina_list_append(items, tmp);
+
+                               Evas_Object *ao = elm_access_object_register(content, obj);
+                               items = eina_list_append(items, ao);
+                               elm_object_item_access_order_set(ei, items);
+                       }
+               }
+       }
+
+       // For email style ===================================================
+       // email style implement icons as image part, not swallow part.
+       if (id->checked)
+               elm_object_item_signal_emit(id->item, "elm,state,check,show", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,check,hide", "");
+       if (id->stared)
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,enable", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,disable", "");
+
+       if (index%3 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,read", "");
+       if (index%2 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,icon2,show", "");
+       if (index%3 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,icon3,show", "");
+       elm_object_item_signal_emit(ei, "elm,state,icon4,show", "");
+       // ===================================================================
+}
+
+static void _loaded(void *data, Evas_Object *obj, void *ei)
+{
+       printf("loaded\n");
+}
+
+#if TEST_SIGNALS
+static void _unrealized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("unrealized: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _selected(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("selected: %s\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _activated(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("activated: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _clicked_double(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("clicked,double: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _unselected(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("unselected: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_up(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,up: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_down(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,down: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_left(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,left: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_right(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,right: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_stop(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,stop: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _edge_top(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,top\n");
+}
+
+static void _edge_bottom(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,bottom\n");
+}
+
+static void _edge_left(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,left\n");
+}
+
+static void _edge_right(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,right\n");
+}
+
+static void _multi_swipe_left(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,left: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_right(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,right: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_up(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,up: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_down(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("edge,bottom: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_pinch_out(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,pinch,out: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_pinch_in(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,pinch,in: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _swipe(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("swipe: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved_after(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved,after: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved_before(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved,before: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _index_update(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("index,updated: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _expanded(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("expanded: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _contracted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("contracted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _expand_request(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("expand,request: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _contract_request(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("contract,request: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+static void _tree_effect_finished(void *data, Evas_Object *obj, void *ei)
+{
+       printf("tree,effect,finished\n");
+}
+#endif
+
+static void _highlighted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       id->highlighted = EINA_TRUE;
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "1text.1icon.7")) {
+               Evas_Object *img = elm_object_item_part_content_get(item, "elm.icon");
+               elm_image_file_set(img, ICON_DIR"/genlist/00_brightness_right_press.png", NULL);
+       } else if (!strcmp(itc->item_style, "1text.tb")) {
+               printf("highlighted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+
+static void _unhighlighted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(ei);
+       int index = id->index;
+       id->highlighted = EINA_FALSE;
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "1text.1icon.7")) {
+               Evas_Object *img = elm_object_item_part_content_get(item, "elm.icon");
+               elm_image_file_set(img, ICON_DIR"/genlist/iu.jpg", NULL);
+       } else if (!strcmp(itc->item_style, "1text.tb")) {
+               printf("unhighlighted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+
+static void _index_clicked(void *data, Evas_Object *obj, const char *em, const char *src)
+{
+       printf("index clicked\n");
+       elm_object_signal_emit(obj, "elm,state,slide,start", "");
+
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+    const char *txt = NULL;
+       txt = elm_object_part_text_get(data, "elm.text");
+       if (!txt) return NULL;
+
+       return strdup(_(txt));
+}
+
+static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       Evas_Event_Mouse_Down *md = ei;
+       int ret;
+       Elm_Object_Item *it = elm_genlist_at_xy_item_get(obj, md->canvas.x, md->canvas.y, &ret);
+       printf("down %d %d (%d) (%p)\n", md->canvas.x, md->canvas.y, elm_genlist_item_index_get(it), it);
+}
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int index;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+       const char *style = elm_object_item_text_get(event_info);
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       itc->item_style = style;
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
+       if (strstr(style, "email.")) {
+               elm_object_style_set(genlist, "handler");
+       }
+       // Optimize your application with appropriate genlist block size.
+       elm_genlist_block_count_set(genlist, 14);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       if (!strstr(style, ".tb") && !strstr(style, "multiline")) {
+               printf("Homogeneous mode enabled\n");
+               elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       }
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       if (strstr(style, "multiline") ||
+               !strcmp(style, "groupindex") || !strstr(style, "email")) {
+               printf("Compress mode enabled\n");
+               elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       }
+
+       evas_object_smart_callback_add(genlist, "scroll,anim,start", _scroll_anim_start, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,anim,stop", _scroll_anim_stop, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,drag,start", _scroll_drag_start, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,drag,stop", _scroll_drag_stop, NULL);
+       evas_object_smart_callback_add(genlist, "realized", _realized, NULL);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+#if TEST_SIGNALS
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized, NULL);
+       evas_object_smart_callback_add(genlist, "activated", _activated, NULL);
+       evas_object_smart_callback_add(genlist, "selected", _selected, NULL);
+       evas_object_smart_callback_add(genlist, "unselected", _unselected, NULL);
+       evas_object_smart_callback_add(genlist, "clicked,double", _clicked_double, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,up", _drag_start_up, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,down", _drag_start_down, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,left", _drag_start_left, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,right", _drag_start_right, NULL);
+       evas_object_smart_callback_add(genlist, "drag,stop", _drag_stop, NULL);
+       evas_object_smart_callback_add(genlist, "drag", _drag, NULL);
+       evas_object_smart_callback_add(genlist, "edge,top", _edge_top, NULL);
+       evas_object_smart_callback_add(genlist, "edge,bottom", _edge_bottom, NULL);
+       evas_object_smart_callback_add(genlist, "edge,left", _edge_left, NULL);
+       evas_object_smart_callback_add(genlist, "edge,left", _edge_right, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,left", _multi_swipe_left, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,right", _multi_swipe_right, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,up", _multi_swipe_up, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,down", _multi_swipe_down, NULL);
+       evas_object_smart_callback_add(genlist, "multi,pinch,out", _multi_pinch_out, NULL);
+       evas_object_smart_callback_add(genlist, "multi,pinch,in", _multi_pinch_in, NULL);
+       evas_object_smart_callback_add(genlist, "swipe", _swipe, NULL);
+       evas_object_smart_callback_add(genlist, "moved", _moved, NULL);
+       evas_object_smart_callback_add(genlist, "moved,after", _moved_after, NULL);
+       evas_object_smart_callback_add(genlist, "moved,before", _moved_before, NULL);
+       evas_object_smart_callback_add(genlist, "index,update", _index_update, NULL);
+       evas_object_smart_callback_add(genlist, "tree,effect,finished", _tree_effect_finished, NULL);
+#endif
+       evas_object_smart_callback_add(genlist, "highlighted", _highlighted, NULL);
+       evas_object_smart_callback_add(genlist, "unhighlighted", _unhighlighted, NULL);
+       evas_object_smart_callback_add(genlist, "longpressed", _longpressed, NULL);
+
+       if (strstr(style, ".tb"))
+               itc->func.text_get = _gl_text_get_textblock;
+       else if (strstr(style, "multiline/2text.5icon"))
+               itc->func.text_get = _gl_multiline_text_get;
+
+       if (strstr(style, ".thumb."))
+               itc->func.content_get = _gl_icon_photo_get;
+
+       if (!strcmp(style, "1icon") || strstr(style, "1icon/")) {
+               itc->func.content_get = _gl_icons_get;
+       } else if (!strcmp(style, "1text.1icon.7")) {
+               itc->func.content_get = _gl_icon_highlight_get;
+       } else if (!strcmp(style, "2text.1icon.10") ||
+                          !strcmp(style, "2text.1icon.10.tb")) {
+               itc->func.content_get = _gl_icon_reveal_get;
+       } else if (!strcmp(style, "1text.1icon.6") ||
+                          !strcmp(style, "1text.1icon.divider") ||
+                          !strcmp(style, "1text.2icon.divider") ||
+                          !strcmp(style, "2text.1icon.divider")) {
+               itc->func.content_get = _gl_2icon_onoff_get;
+       } else if (!strcmp(style, "1text.1icon.3") ||
+                          !strcmp(style, "1text.1icon.3.tb") ||
+                          !strcmp(style, "1text.2icon.2") ||
+                          !strcmp(style, "1text.2icon.2") ||
+                          !strcmp(style, "2text.2icon.5") ||
+                          !strcmp(style, "2text.2icon.5")) {
+               itc->func.content_get = _gl_2icon_chk_get;
+       } else if (!strcmp(style, "1text.1icon") ||
+                          !strcmp(style, "1text.2icon") ||
+                          !strcmp(style, "1text.2icon.tb") ||
+                          !strcmp(style, "2text.1icon.2") ||
+                          !strcmp(style, "2text.1icon.2.tb") ||
+                          !strcmp(style, "2text.2icon.8") ||
+                          !strcmp(style, "2text.2icon.8.tb") ||
+                          !strcmp(style, "3text.3icon.progress")) {
+               itc->func.content_get = _gl_2icon_btn_text_get;
+       } else if (!strcmp(style, "1text.2icon.6") ||
+                          !strcmp(style, "1text.2icon.6.tb") ||
+                          !strcmp(style, "2text.2icon.4") |\
+                          !strcmp(style, "2text.2icon.4.tb")) {
+               itc->func.content_get = _gl_2icon_reveal_get;
+       } else if (!strcmp(style, "1text.2icon.4") ||
+                          !strcmp(style, "1text.2icon.4.tb") ||
+                          !strcmp(style, "1text.2icon.9") ||
+                          !strcmp(style, "2text.2icon.7")) {
+               itc->func.content_get = _gl_2icon_chk_reveal_get;
+       } else if (!strcmp(style, "1text.3icon") ||
+                          !strcmp(style, "1text.3icon.2") ||
+                          !strcmp(style, "2text.3icon.4")) {
+               itc->func.content_get = _gl_3icon_chk_reveal_get;
+       } else if (!strcmp(style, "4text.1icon.1.tb") ||
+                          !strcmp(style, "4text.1.tb")) {
+               itc->func.text_get = _gl_text_get_bubble_textblock;
+       } else if (!strcmp(style, "email.list.test"))  {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_icon_test_get;
+       } else if (!strcmp(style, "email.list") ||
+                       !strcmp(style, "email.list.conversation")) {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_icon_get;
+       } else if (!strcmp(style, "email.outbox") ||
+                       !strcmp(style, "email.outbox.conversation")) {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_outbox_get;
+       } else if (!strcmp(style, "email.list(lazy)")) {
+               lazy = EINA_TRUE;
+               itc->item_style = "email.list";
+               itc->func.content_get = _gl_email_icon_lazy_get;
+       }
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,                         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL);
+               id->item = item;
+               if (index ==0) elm_object_item_disabled_set(item, EINA_TRUE);
+       }
+       elm_genlist_item_class_free(itc);
+
+       // Add select all layout for groupindex
+       if (!strcmp(style, "groupindex")) {
+               Evas_Object *bx = elm_box_add(ad->nf);
+               evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               Evas_Object *ly = elm_layout_add(bx);
+               elm_layout_theme_set(ly, "genlist/item", "groupindex", "default");
+               evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0);
+               evas_object_size_hint_align_set(ly, -1, -1);
+               elm_object_part_text_set(ly, "elm.text", "This is a layout, not genlist item. This is a groupindex genlist item style. This is packed into box");
+               elm_layout_signal_callback_add(ly, "mouse,clicked,1", "*", _index_clicked, NULL);
+               evas_object_show(ly);
+               elm_box_pack_end(bx, ly);
+
+               // ============== Accessibility
+               // Make layout accessible
+               Evas_Object *ao = elm_access_object_register(ly, ly);
+               elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, ly);
+               elm_object_focus_custom_chain_append(ly, ao, NULL);
+
+               evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(genlist);
+               elm_box_pack_end(bx, genlist);
+               evas_object_show(bx);
+               elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, bx, NULL);
+       } else
+               elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, genlist, NULL);
+}
+
+void genlist_normal_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i]; i++) {
+               elm_list_item_append(list, menu_its[i], NULL, NULL,
+                               _create_genlist, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Item Styles"), NULL, NULL, list, NULL);
+}
+
+void genlist_homogenous_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int index;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+
+       // Set genlist item class
+       itc1->item_style = "1text.1icon";
+       itc1->func.text_get = _gl_text_get;
+       itc1->func.content_get = _gl_content_get;
+       itc1->func.del = _gl_del;
+
+       itc2->item_style = "3text.1icon";
+       itc2->func.text_get = _gl_text_get;
+       itc2->func.content_get = _gl_content_get;
+       itc2->func.del = _gl_del;
+
+       itc3->item_style = "email.list";
+       itc3->func.text_get = _gl_email_text_get;
+       itc3->func.content_get = _gl_email_icon_get;
+       itc3->func.del = _gl_del;
+
+       itc4->item_style = "dialogue/1text.2icon";
+       itc4->func.text_get = _gl_text_get;
+       itc4->func.content_get = _gl_content_get;
+       itc4->func.del = _gl_del;
+
+       itc5->item_style = "dialogue/3text.2icon";
+       itc5->func.text_get = _gl_text_get;
+       itc5->func.content_get = _gl_content_get;
+       itc5->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       // Append items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Elm_Genlist_Item_Class *itc;
+               if (index%5 == 0) itc = itc1;
+               else if (index%5 == 1) itc = itc2;
+               else if (index%5 == 2) itc = itc3;
+               else if (index%5 == 3) itc = itc4;
+               else itc = itc5;
+
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,             // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL
+                               );
+               if (index ==0) elm_object_item_disabled_set(item, EINA_TRUE);
+               id->item = item;
+       }
+
+       // Unref item class
+       elm_genlist_item_class_free(itc1);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+       elm_genlist_item_class_free(itc4);
+       elm_genlist_item_class_free(itc5);
+
+       elm_naviframe_item_push(ad->nf, "homogeneous", NULL, NULL, genlist, NULL);
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *gen, void *ei)
+{
+       int *index;
+       Ecore_Animator *anim;
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+
+       index = evas_object_data_get(gen, "index");
+       if (index) free(index);
+
+       anim = evas_object_data_get(gen, "anim");
+       if (anim) ecore_animator_del(anim);
+
+       itc1 = evas_object_data_get(gen, "itc1");
+       itc2 = evas_object_data_get(gen, "itc2");
+       itc3 = evas_object_data_get(gen, "itc3");
+       itc4 = evas_object_data_get(gen, "itc4");
+       itc5 = evas_object_data_get(gen, "itc5");
+       if (itc1) elm_genlist_item_class_free(itc1);
+       if (itc2) elm_genlist_item_class_free(itc2);
+       if (itc3) elm_genlist_item_class_free(itc3);
+       if (itc4) elm_genlist_item_class_free(itc4);
+       if (itc5) elm_genlist_item_class_free(itc5);
+}
+
+static Eina_Bool _item_append_cb(void *data)
+{
+       Evas_Object *genlist = data;
+       int *index;
+       Elm_Object_Item *item = NULL;
+       Elm_Genlist_Item_Class *itc = NULL;
+
+       index = evas_object_data_get(genlist, "index");
+       if (*index >=  NUM_OF_ITEMS) {
+               evas_object_data_set(genlist, "anim", NULL);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if ((*index)%5 == 0)
+               itc = evas_object_data_get(genlist, "itc1");
+       else if (((*index)%5) == 1)
+               itc = evas_object_data_get(genlist, "itc2");
+       else if (((*index)%5) == 2)
+               itc = evas_object_data_get(genlist, "itc3");
+       else if (((*index)%5) == 3)
+               itc = evas_object_data_get(genlist, "itc4");
+       else
+               itc = evas_object_data_get(genlist, "itc5");
+
+       Item_Data *id = calloc(sizeof(Item_Data), 1);
+       id->index = *index;
+       item = elm_genlist_item_append(genlist, itc, id, NULL,
+                       ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       id->item = item;
+       if (*index == 0) elm_object_item_disabled_set(item, EINA_TRUE);
+       (*index)++;
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+// FIXME: When item is added by animator, scroller is freezed.
+void genlist_animator_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int *index;
+       Evas_Object *genlist;
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+
+       // Set genlist item class
+       itc1->item_style = "1text.1icon";
+       itc1->func.text_get = _gl_text_get;
+       itc1->func.content_get = _gl_content_get;
+       itc1->func.del = _gl_del;
+
+       itc2->item_style = "3text.1icon";
+       itc2->func.text_get = _gl_text_get;
+       itc2->func.content_get = _gl_content_get;
+       itc2->func.del = _gl_del;
+
+       itc3->item_style = "email.list";
+       itc3->func.text_get = _gl_email_text_get;
+       itc3->func.content_get = _gl_email_icon_get;
+       itc3->func.del = _gl_del;
+
+       itc4->item_style = "dialogue/1text.2icon";
+       itc4->func.text_get = _gl_text_get;
+       itc4->func.content_get = _gl_content_get;
+       itc4->func.del = _gl_del;
+
+       itc5->item_style = "dialogue/3text.2icon";
+       itc5->func.text_get = _gl_text_get;
+       itc5->func.content_get = _gl_content_get;
+       itc5->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       printf("Compress mode enabled\n");
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       evas_object_data_set(genlist, "itc1", itc1);
+       evas_object_data_set(genlist, "itc2", itc2);
+       evas_object_data_set(genlist, "itc3", itc3);
+       evas_object_data_set(genlist, "itc4", itc4);
+       evas_object_data_set(genlist, "itc5", itc5);
+
+       index = calloc(1, sizeof(int));
+       *index = 0;
+       evas_object_data_set(genlist, "index", index);
+
+       // Append items using Ecore_Animator (recommend to use Ecore_Animator in multiline items)
+       Ecore_Animator *anim = ecore_animator_add(_item_append_cb, genlist);
+       evas_object_data_set(genlist, "anim", anim);
+
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, NULL);
+       elm_naviframe_item_push(ad->nf, "animator append", NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_radio.c b/live.viewer/dbox.app/src/genlist/genlist_radio.c
new file mode 100644 (file)
index 0000000..b503502
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ Genlist Radio
+ ********************************************************/
+#define NUM_OF_ITEMS 2000
+static int state_index = 0; //selected radio index
+static char **genlist_demo_names = NULL;
+
+typedef struct _Item_Data
+{
+       int index;
+       Evas_Object *genlist;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: Unrealized callback can be called after this.
+       // Accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = (id->index) % NUM_OF_GENLIST_DEMO_NAMES;
+
+       if (!strcmp(part, "elm.text")) return strdup(genlist_demo_names[index]);
+       return NULL;
+}
+
+static void
+_radio_cb(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = data;
+       Elm_Object_Item *it = elm_genlist_nth_item_get(id->genlist, id->index);
+       elm_genlist_item_selected_set(it, EINA_TRUE);
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *radio;
+       Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
+
+       if (!strcmp(part, "elm.icon")) {
+               radio = elm_radio_add(obj);
+               elm_object_style_set(radio, "default/genlist");
+               elm_radio_state_value_set(radio, index);
+               elm_radio_group_add(radio, radio_main);
+               if (index == state_index)
+                       elm_radio_value_set(radio, state_index);
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_smart_callback_add(radio, "changed", _radio_cb, id);
+
+               // If no divider, unregister access object
+               elm_access_object_unregister(radio);
+               return radio;
+       }
+
+       return NULL;
+}
+
+static Eina_Bool
+_gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void
+_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       if (item) {
+               Item_Data *id = elm_object_item_data_get(item);
+               int index = id->index;
+               printf("[Genlist] Selected Text : %s\n",
+                       genlist_demo_names[index % NUM_OF_GENLIST_DEMO_NAMES]);
+               Evas_Object *radio = elm_object_item_part_content_get(item, "elm.icon");
+               state_index = index;
+               elm_radio_value_set(radio, state_index);
+       }
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
+       if (radio_main) evas_object_del(radio_main);
+}
+
+static Evas_Object *
+_create_genlist(Evas_Object *parent)
+{
+       int index;
+       Evas_Object *genlist, *radio_main;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       radio_main = elm_radio_add(genlist);
+       elm_radio_state_value_set(radio_main, 0);
+       elm_radio_value_set(radio_main, 0);
+       evas_object_data_set(genlist, "radio_main", radio_main);
+
+       // Set genlist item class
+       itc->item_style = "1text.1icon.3";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = _gl_state_get;
+       itc->func.del = _gl_del;
+
+       // Append items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index  = index;
+               Elm_Object_Item *item =
+                       elm_genlist_item_append(genlist, // genlist object
+                               itc, // item class
+                               id, // data
+                               NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = item;
+               id->genlist = genlist;
+       }
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void
+genlist_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad->nf);
+
+       elm_naviframe_item_push(ad->nf, _("Genlist with Radio"), NULL, NULL, genlist, NULL);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_scroll_jump.c b/live.viewer/dbox.app/src/genlist/genlist_scroll_jump.c
new file mode 100644 (file)
index 0000000..424c340
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+#define NUM_OF_ITEMS 2000
+static char **genlist_demo_names = NULL;
+
+static void
+_button_jumpto_top_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *genlist;
+       Elm_Object_Item *it;
+
+       if(!data)
+               return;
+       genlist = (Evas_Object *) data;
+       it = elm_genlist_first_item_get(genlist);
+       elm_genlist_item_bring_in(it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+}
+
+static char *
+_gl_text_get(void* data, Evas_Object *obj, const char* part)
+{
+       int index = ((int) data) % NUM_OF_GENLIST_DEMO_NAMES;
+
+       if (!strcmp(part, "elm.text")) {
+               if (index)
+                       return strdup(genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       }
+       return NULL;
+}
+
+static Evas_Object *
+_create_genlist(Evas_Object *parent)
+{
+       int index;
+       Evas_Object *genlist, *button;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+       if (!parent)
+               return NULL;
+
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+
+       genlist = elm_genlist_add(parent);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       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);
+
+       itc->item_style = "1text";
+       itc->func.text_get = _gl_text_get;
+
+       for (index = 0; index < NUM_OF_ITEMS; index++)
+       {
+               elm_genlist_item_append(
+                               genlist,
+                               itc,
+                               (void *) index,
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               NULL,
+                               NULL);
+       }
+       elm_genlist_item_class_free(itc);
+
+       button = elm_button_add(genlist);
+       evas_object_smart_callback_add(button, "clicked", _button_jumpto_top_cb, (void *) genlist);
+       elm_object_part_content_set(genlist, "elm.swallow.jump_to_top", button);
+       elm_object_style_set(button, "jumpto_top");
+       evas_object_show(button);
+
+       return genlist;
+}
+
+void
+genlist_scroll_jump_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+
+       if (!data)
+               return;
+       ad = (struct appdata *) data;
+
+       genlist = _create_genlist(ad->nf);
+       evas_object_show(genlist);
+
+       elm_naviframe_item_push(ad->nf, _(("Genlist Scroll Jump")), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_separator.c b/live.viewer/dbox.app/src/genlist/genlist_separator.c
new file mode 100644 (file)
index 0000000..8ef2451
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+char *groups[] = {
+       "In Dialogue Group",
+       "Not in Dialogue Group",
+       "End"
+};
+
+#define MAX_SEPARATORS 10
+#define MAX_GROUPS 2
+
+static char *help_dialogue_message[] = {
+       "Help message in dialogue group<br>1. Activate Wi-Fi on your device<br>"
+       "2. Find name in your network list.<br>"
+       "3. Connect name by entering password in WPA field.",
+       "Help message not in dialogue group<br>1. Activate Wi-Fi on your device<br>"
+       "2. Find name in your network list.<br>"
+       "3. Connect name by entering password in WPA field."
+};
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               return strdup(help_dialogue_message[(int)data]);
+       }
+       return NULL;
+}
+
+static char *_gl_group_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               return strdup(groups[(int)data]);
+       }
+       return NULL;
+}
+
+static Evas_Object *_create_genlist(struct appdata *ad)
+{
+       Evas_Object *genlist;
+       Elm_Object_Item *git;
+
+       if (ad == NULL) return NULL;
+
+       Elm_Genlist_Item_Class *itc, *itc_group, *itc_sep, *itc_sep2;
+       itc = elm_genlist_item_class_new();
+       itc_group = elm_genlist_item_class_new();
+       itc_sep = elm_genlist_item_class_new();
+       itc_sep2 = elm_genlist_item_class_new();
+
+       itc_group->item_style = "dialogue/grouptitle";
+       itc_group->func.text_get = _gl_group_text_get;
+
+       itc->item_style = "multiline/1text";
+       itc->func.text_get = _gl_text_get;
+
+       itc_sep->item_style = "dialogue/separator";
+
+       itc_sep2->item_style = "dialogue/separator.2";
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_realization_mode_set(genlist, EINA_TRUE);
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       // In dialogue group ***********************************
+       git = elm_genlist_item_append(genlist, itc_group, (void *)0, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Top separator in dialogue group
+       git = elm_genlist_item_append(genlist, itc_sep2, (void *)0, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       git = elm_genlist_item_append(genlist, itc, (void *)0, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Bottom separator in dialogue group
+       git = elm_genlist_item_append(genlist, itc_sep, (void *)0, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Not in dialogue group *************************
+       git = elm_genlist_item_append(genlist, itc_group, (void *)1, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Top separator in dialogue group
+       git = elm_genlist_item_append(genlist, itc_sep, (void *)1, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       git = elm_genlist_item_append(genlist, itc, (void *)1, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       // Bottom separator not in dialogue group
+       git = elm_genlist_item_append(genlist, itc_sep, (void *)1, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       git = elm_genlist_item_append(genlist, itc_group, (void *)2, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc_group);
+       elm_genlist_item_class_free(itc_sep);
+       elm_genlist_item_class_free(itc_sep2);
+
+       return genlist;
+}
+
+void genlist_separator_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       genlist = _create_genlist(ad);
+       elm_naviframe_item_push(ad->nf, _("Genlist Separator"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_swipe.c b/live.viewer/dbox.app/src/genlist/genlist_swipe.c
new file mode 100644 (file)
index 0000000..44bf20c
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Sweep
+ ********************************************************/
+
+#define NUM_OF_ITEMS 2000
+#define NUM_OF_NAMES 4
+#define SCRL_TIME 0.1
+
+extern char *genlist_demo_names[];
+Ecore_Timer *scrl_timer;
+
+typedef struct _Item_Data
+{
+       Eina_Bool disabled;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *gen, void *ei)
+{
+       elm_theme_free(data);
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: Unrealized callback can be called after this.
+       // Accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               char buf[1024];
+               int index = (int)data;
+               snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               return strdup(buf);
+       } else if (!strcmp(part, "elm.text.swipe.left")) {
+               return strdup(S_("IDS_COM_BODY_MESSAGE")); // multi-languate support
+       } else if (!strcmp(part, "elm.text.swipe.right")) {
+               return strdup(S_("IDS_COM_BODY_CALL"));    // multi-languate support
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       Evas_Object *check;
+
+       if (!strcmp(part, "elm.icon")) {
+               check = elm_check_add(obj);
+               //set the State pointer to keep the current UI state of Checkbox.
+               // Repeat events to below object (genlist)
+               // So that if check is clicked, genlist can be clicked.
+               evas_object_repeat_events_set(check, EINA_FALSE);
+               evas_object_propagate_events_set(check, EINA_FALSE);
+               evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               // If no divider, unregister access object
+               elm_access_object_unregister(check);
+               return check;
+       }
+       return NULL;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (event_info)
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+
+       // If sweep is started, ignore select callback
+       if (elm_object_scroll_freeze_get(obj)) return;
+       printf("selected\n");
+}
+
+static void _start(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+       if (scrl_timer) {
+               printf("Swipe start but reverted\n");
+               elm_object_item_signal_emit(it, "elm,swipe,revert", "");
+               return;
+       }
+       Evas_Object *obj = elm_object_item_widget_get(it);
+       // freeze scroller when swipe is started
+       elm_object_scroll_freeze_push(data);
+       printf("Swipe start: %d\n", elm_object_scroll_freeze_get(obj));
+}
+
+static void _stop_left(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+       Evas_Object *obj = elm_object_item_widget_get(it);
+       // unfreeze scroller when swipe is stopped
+       elm_object_scroll_freeze_pop(data);
+       printf("Swipe stop left: %d\n", elm_object_scroll_freeze_get(obj));
+}
+
+static void _stop_right(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+       Evas_Object *obj = elm_object_item_widget_get(it);
+       // unfreeze scroller when swipe is stopped
+       elm_object_scroll_freeze_pop(data);
+       printf("Swipe stop right: %d\n", elm_object_scroll_freeze_get(obj));
+}
+
+static void _stop(void *data, Elm_Object_Item *it, const char *em, const char *src)
+{
+       Evas_Object *obj = elm_object_item_widget_get(it);
+       // unfreeze scroller when swipe is stopped
+       elm_object_scroll_freeze_pop(data);
+       printf("Swipe stop: %d\n", elm_object_scroll_freeze_get(obj));
+}
+
+static void _unrealized(void *data, Evas_Object *obj, void *ei)
+{
+       // Remove callbacks before unrealization
+       elm_object_item_signal_callback_del(ei, "elm,swipe,start", "", _start);
+       elm_object_item_signal_callback_del(ei, "elm,swipe,stop,left", "", _stop_left);
+       elm_object_item_signal_callback_del(ei, "elm,swipe,stop,right", "", _stop_right);
+       elm_object_item_signal_callback_del(ei, "elm,swipe,stop", "", _stop);
+       // Do not access Item Data because unrealized callback can be called
+       // after _gl_del, Item_Data is freed.
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = elm_object_item_data_get(ei);
+       // Add callbacks for sweep start, stop
+       elm_object_item_signal_callback_add(ei, "elm,swipe,start", "", _start, obj);
+       elm_object_item_signal_callback_add(ei, "elm,swipe,stop,left", "", _stop_left, obj);
+       elm_object_item_signal_callback_add(ei, "elm,swipe,stop,right", "", _stop_right, obj);
+       elm_object_item_signal_callback_add(ei, "elm,swipe,stop", "", _stop, obj);
+
+       if (id->disabled) {
+               printf("Realized: Disable swipe\n");
+               elm_object_item_signal_emit(ei, "elm,swipe,disabled", "");
+       }
+}
+
+static void _swipe_revert(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Revert sweep\n");
+       elm_object_item_signal_emit(ei, "elm,swipe,revert", "");
+}
+
+static void _swipe_disable(void *data, Evas_Object *obj, void *ei)
+{
+       Item_Data *id = elm_object_item_data_get(ei);
+       if (id->disabled) {
+               printf("Enable swipe\n");
+               elm_object_item_signal_emit(ei, "elm,swipe,enabled", "");
+               id->disabled = EINA_FALSE;
+       } else {
+               printf("Disable swipe\n");
+               elm_object_item_signal_emit(ei, "elm,swipe,disabled", "");
+               id->disabled = EINA_TRUE;
+       }
+}
+
+static Eina_Bool
+_scrl_timer(void *data)
+{
+       printf("scrolling end\n");
+       scrl_timer = NULL;
+       return EINA_FALSE;
+}
+
+static void
+_scroll(void *data, Evas_Object *obj, void *ei)
+{
+       printf("scrolling\n");
+       if (scrl_timer) ecore_timer_del(scrl_timer);
+       scrl_timer = ecore_timer_add(SCRL_TIME, _scrl_timer, NULL);
+}
+
+void genlist_swipe_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *genlist;
+       int index;
+
+       // Custom theme load
+       Elm_Theme *th = elm_theme_new();
+       elm_theme_ref_set(th, NULL);
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+
+       Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_class_new();
+       itc->item_style = "1text/swipe";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       elm_object_theme_set(genlist, th);
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       // Append genlist items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               Elm_Object_Item *it = elm_genlist_item_append(genlist, itc, id, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               id->item = it;
+               if (index == 0)
+                       elm_object_item_disabled_set(it, EINA_TRUE);
+       }
+       elm_genlist_item_class_free(itc);
+
+       evas_object_smart_callback_add(genlist, "realized", _realized, NULL);
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized, NULL);
+       evas_object_smart_callback_add(genlist, "scroll", _scroll, NULL);
+
+       // If you want to revert swipe for specific item.
+       evas_object_smart_callback_add(genlist, "longpressed", _swipe_revert, NULL);
+       // If you want to disable swipe for specific item.
+       evas_object_smart_callback_add(genlist, "clicked,double", _swipe_disable, NULL);
+
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, th);
+
+       // Push genlist to naviframe
+       elm_naviframe_item_push(ad->nf,  _("Swipe"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/genlist_theme.c b/live.viewer/dbox.app/src/genlist/genlist_theme.c
new file mode 100644 (file)
index 0000000..f505fce
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ Genlist Theme
+ ********************************************************/
+
+#define NUM_OF_ITEMS 2000
+static char **genlist_demo_names = NULL;
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int) data) % NUM_OF_GENLIST_DEMO_NAMES;
+
+       if (!strcmp(part, "elm.text")) return strdup(genlist_demo_names[index]);
+       return NULL;
+}
+
+static Evas_Object *
+_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static void
+_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       if (item) {
+               index = (int) elm_object_item_data_get(item);
+               printf("[Genlist] Selected Text : %s\n",
+                       genlist_demo_names[index % NUM_OF_GENLIST_DEMO_NAMES]);
+       }
+}
+
+static Evas_Object *
+_create_genlist(void *data)
+{
+       struct appdata *ad = data;
+       int index;
+       Evas_Object *genlist;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+
+       Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_class_new();
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       // Set genlist item class
+       itc->item_style = "1text.1icon.7";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+
+       // Append items
+       for (index = 1; index < NUM_OF_ITEMS; index++) {
+               elm_genlist_item_append(genlist, // genlist object
+                       itc, // item class
+                       (void *) index, // data
+                       NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       }
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void
+genlist_theme_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad);
+
+       elm_naviframe_item_push(ad->nf, _("Theme default"), NULL, NULL, genlist, NULL);
+}
+
+
+void
+genlist_theme_no_effect_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = data;
+       Evas_Object *genlist;
+
+       genlist = _create_genlist(ad);
+       elm_object_style_set(genlist, "no_effect");
+
+       elm_naviframe_item_push(ad->nf, _("Theme no_effect"), NULL, NULL, genlist, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/genlist/genlist_variable_height.c b/live.viewer/dbox.app/src/genlist/genlist_variable_height.c
new file mode 100644 (file)
index 0000000..97d4d57
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ Customize Genlist Styles (variable height)
+ ********************************************************/
+
+#define NUM_OF_ITEMS 2000
+
+static char *label[] = {
+       "Lover Tonight", "Lucid Dream", "Listen To The Music",
+       "Sky In My Heart", "French Love",
+       NULL
+};
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object * _create_genlist(Evas_Object *parent, Elm_Theme *th);
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (strcmp(part, "elm.text")) return NULL;
+
+       char buf[PATH_MAX];
+       int index = ((int)data) % 10;
+       int size = (index * 25) * elm_config_scale_get() + 10;
+
+       if ((index == 0) || (index == 1) || (index == 2) || (index == 3) ||
+               (index == 4)) {
+               sprintf(buf, "<font_size=%d>%s</font_size>", size,
+                               label[index % (sizeof(label)/sizeof(char *))]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (strcmp(part, "elm.icon")) return NULL;
+
+       Evas_Object *icon;
+       int index = ((int)data) % 10;
+       int size = (index * 25) * elm_config_scale_get();
+
+       if ((index == 5) || (index == 6) || (index == 7)) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+       } else  if ((index  == 8) || (index == 9) || (index == 10)) {
+               icon = elm_button_add(obj);
+               elm_object_style_set(icon, "style1");
+               elm_object_text_set(icon, "Button");
+               evas_object_propagate_events_set(icon, EINA_FALSE);
+       } else return NULL;
+
+       evas_object_size_hint_min_set(icon, 0, size);
+       return icon;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       int index = (int)data;
+       index = index % (sizeof(label)/sizeof(char *));
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+}
+
+static void
+_view_free_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       Elm_Theme *th = data;
+       // Free customized theme
+       elm_theme_free(th);
+}
+
+static Evas_Object * _create_genlist(Evas_Object *parent, Elm_Theme *th)
+{
+       int index = 0;
+       Evas_Object *genlist;
+
+       // Create a genlist
+       genlist = elm_genlist_add(parent);
+       // Apply created theme to genlist
+       elm_object_theme_set(genlist, th);
+
+       // Set genlist item class
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       itc->item_style = "variable_height/default";
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.state_get = _gl_state_get;
+       itc->func.del = _gl_del;
+
+       // Append item to the end of genlist
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Elm_Object_Item *it = elm_genlist_item_append(genlist,
+                               itc,
+                               (void *)index,
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               (void *)index
+                       );
+               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       }
+       elm_genlist_item_class_free(itc);
+
+       return genlist;
+}
+
+void genlist_variable_height_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *)data;
+
+       if (data == NULL) return;
+
+       // Create new theme
+       Elm_Theme *th = elm_theme_new();
+       // Add default (Tizen) theme into new theme user created.
+       elm_theme_ref_set(th, NULL);
+       // Add customized theme (user created) into created new theme.
+       elm_theme_extension_add(th, ELM_DEMO_EDJ);
+
+       // Create a genlist
+       genlist = _create_genlist(ad->nf, th);
+
+       // Push genlist to the top of naviframe stack
+       elm_naviframe_item_push(ad->nf, _("Variable Height") , NULL, NULL, genlist, NULL);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, th);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_bubble.c b/live.viewer/dbox.app/src/genlist/removed/genlist_bubble.c
new file mode 100644 (file)
index 0000000..226fa4e
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Bubble
+ ********************************************************/
+
+#define NUM_OF_ITEMS 10
+#define NUM_OF_TIMES 10
+#define STYLE_COUNTER 6
+//#define _ITEM_PROVIDER
+
+static char *dates[] = {
+       "2011.03.03", NULL, NULL, NULL, NULL, NULL,
+       "2011.03.04", NULL, NULL, NULL
+};
+
+static char *times[] = {
+       "10:00 AM", "10:01 AM", "10:02 AM", "10:03 AM", "10:04 AM", "10:05 AM",
+       "3:50 PM", "3:51 PM", "3:52 PM", "3:53 PM"
+};
+
+static char *messages[] = {
+       "Good morning!",
+       "It's you again. How do you do this?",
+       "This is the princess who fell from the sky into my arms.",
+       "Yes. We keep meeting like this. You just suddenly show up.",
+       "We could make plans to meet.",
+       "No, it's nicer this way. I hope we meet again suddenly.",
+       "Don't you know that it takes so little to make me happy?",
+       "Good morning, Princess!",
+       "This is incredible. You owe me an explanation.",
+       "No, you're the one who owes me an explanation. You've really got a crush on me. Where shall we go, Princess?"
+};
+
+#ifdef _ITEM_PROVIDER
+static char *items[] = {
+       NULL, "attachment1", "attachment2", NULL, NULL, NULL,
+       "attachment3", NULL, NULL, NULL
+};
+#else
+static char *urls[] = {
+       NULL,
+       ICON_DIR"/Albums_Item/Albums_Item1.jpg",
+       ICON_DIR"/Albums_Item/Albums_Item2.jpg", NULL, NULL, NULL,
+       ICON_DIR"/Albums_Item/Albums_Item3.jpg", NULL, NULL, NULL
+};
+#endif
+
+static Elm_Genlist_Item_Class itc, itc2, itc3, itc4;
+static Ecore_Animator *animator;
+static int gl_index;
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (animator) ecore_animator_del(animator);
+       animator = NULL;
+       gl_index = 0;
+
+       return EINA_TRUE;
+}
+
+static char* _gl_title_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_TIMES;
+
+       if (dates[index]) return strdup(dates[index]);
+       return NULL;
+}
+
+#ifdef _ITEM_PROVIDER
+static Evas_Object *_item_provider(void *images, Evas_Object *entry, const char *item)
+{
+       Evas_Object *o = NULL;;
+
+       if(!strcmp(item, "attachment1")) {
+               o = evas_object_image_filled_add(evas_object_evas_get(entry));
+               evas_object_image_file_set(o, ICON_DIR"/Albums_Item/Albums_Item1.jpg", NULL);
+       } else if(!strcmp(item, "attachment2")) {
+               o = evas_object_image_filled_add(evas_object_evas_get(entry));
+               evas_object_image_file_set(o, ICON_DIR"/Albums_Item/Albums_Item2.jpg", NULL);
+       } else if(!strcmp(item, "attachment3")) {
+               o = evas_object_image_filled_add(evas_object_evas_get(entry));
+               evas_object_image_file_set(o, ICON_DIR"/Albums_Item/Albums_Item3.jpg", NULL);
+       }
+       return o;
+}
+#endif
+
+static Eina_Strbuf *_bubble_message_get(int index)
+{
+       Eina_Strbuf *buf = eina_strbuf_new();
+
+       // message
+       if (messages[index]) {
+               if ((index < STYLE_COUNTER && index % 2 == 0) || (index >= STYLE_COUNTER && index % 2 == 1))
+                       eina_strbuf_append(buf, "<color=#4D3A17FF>");
+               else
+                       eina_strbuf_append(buf, "<color=#000000FF>");
+               eina_strbuf_append(buf, messages[index]);
+               eina_strbuf_append(buf, "</color>");
+       }
+
+       // time
+       if (times[index]) {
+               if ((index < STYLE_COUNTER && index % 2 == 0) || (index >= STYLE_COUNTER && index % 2 == 1))
+                       eina_strbuf_append(buf, " <font_size=16><color=#8F783FFF>");
+               else
+                       eina_strbuf_append(buf, " <font_size=16><color=#797364FF>");
+               eina_strbuf_append(buf, times[index]);
+               eina_strbuf_append(buf, "</color></font_size>");
+       }
+
+       // item
+#ifdef _ITEM_PROVIDER
+       if (items[index]) {
+#else
+       if (urls[index]) {
+#endif
+               // padding between text and item
+               eina_strbuf_append(buf, "<br><font_size=6><br></font_size>");
+               if ((index < STYLE_COUNTER && index % 2 == 0) || (index >= STYLE_COUNTER && index % 2 == 1))
+                       eina_strbuf_append(buf, "<item size=150x150 vsize=full href=");
+               else
+                       eina_strbuf_append(buf, "<align=1.0><item size=150x150 vsize=full href=");
+#ifdef _ITEM_PROVIDER
+               eina_strbuf_append(buf, items[index]);
+#else
+               eina_strbuf_append(buf, "file://");
+               eina_strbuf_append(buf, urls[index]);
+#endif
+               eina_strbuf_append(buf, "></item></align>");
+               // padding between text and item
+               eina_strbuf_append(buf, "<br><font_size=6><br></font_size>");
+       }
+
+       return buf;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       Evas_Object *entry;
+
+       if (!strcmp(part, "elm.icon")) {
+               Eina_Strbuf *buf;
+
+               // add entry with bubble styles
+               entry = elm_entry_add(obj);
+               ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+               if ((index < STYLE_COUNTER && index % 2 == 0) || (index >= STYLE_COUNTER && index % 2 == 1))
+                       elm_object_style_set(entry, "readmessage");
+               else
+                       elm_object_style_set(entry, "sentmessage");
+               elm_entry_input_panel_enabled_set(entry, EINA_FALSE);
+               elm_entry_editable_set(entry, EINA_FALSE);
+#ifdef _ITEM_PROVIDER
+               // to add an attachment, add item_provider
+               if (items[index]) elm_entry_item_provider_append(entry, _item_provider, NULL);
+#endif
+
+               buf = _bubble_message_get(index % NUM_OF_TIMES);
+               elm_entry_entry_set(entry, eina_strbuf_string_get(buf));
+               eina_strbuf_free(buf);
+               return entry;
+       }
+       return NULL;
+}
+
+static Eina_Bool _bubble_item_append_cb(void *data)
+{
+       Evas_Object *genlist = data;
+       Elm_Object_Item *item = NULL;
+       static Elm_Object_Item *git = NULL;
+       int item_index = gl_index % NUM_OF_TIMES;
+
+       if (gl_index >=  NUM_OF_ITEMS) {
+               animator = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       // add a date group item and bubble item
+       if ((item_index < STYLE_COUNTER && item_index % 2 == 0) || (item_index >= STYLE_COUNTER && item_index % 2 == 1)){
+               if (dates[item_index])  {
+                       git = elm_genlist_item_append(genlist, &itc, (void *) gl_index, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               }
+               item = elm_genlist_item_append(genlist, &itc2, (void *) gl_index, git, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       } else {
+               if (dates[item_index])  {
+                       git = elm_genlist_item_append(genlist, &itc3, (void *) gl_index, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               }
+               item = elm_genlist_item_append(genlist, &itc4, (void *) gl_index, git, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       }
+       gl_index++;
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+void genlist_bubble_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *genlist, *button;
+       Elm_Object_Item *navi_it;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       // To use multiline textblock/entry/editfield in genlist, set height_for_width mode
+       // then the item's height is calculated while the item's width fits to genlist width.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       // Set item class for bubble readmessage
+       itc.item_style = "grouptitle.readmessage";
+       itc.func.text_get = _gl_title_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       itc2.item_style = "readmessage";
+       itc2.func.text_get = NULL;
+       itc2.func.content_get = _gl_content_get;
+       itc2.func.state_get = NULL;
+       itc2.func.del = NULL;
+
+       // Set item class for bubble sentmessage
+       itc3.item_style = "grouptitle.sentmessage";
+       itc3.func.text_get = _gl_title_text_get;
+       itc3.func.content_get = NULL;
+       itc3.func.state_get = NULL;
+       itc3.func.del = NULL;
+
+       itc4.item_style = "sentmessage";
+       itc4.func.text_get = NULL;
+       itc4.func.content_get = _gl_content_get;
+       itc4.func.state_get = NULL;
+       itc4.func.del = NULL;
+
+       // Append items using Ecore_Animator (recommend to use Ecore_Animator in multiline items)
+       animator = ecore_animator_add(_bubble_item_append_cb, genlist);
+
+       navi_it = elm_naviframe_item_push(ad->nf, _("Bubble"), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_externals.c b/live.viewer/dbox.app/src/genlist/removed/genlist_externals.c
new file mode 100644 (file)
index 0000000..62a53cf
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Externals
+ ********************************************************/
+
+#define NUM_OF_ITEMS 40
+static Elm_Genlist_Item_Class itc;
+static char **genlist_demo_names = NULL;
+
+static void _genlist_item_class_set(void);
+static void _genlist_item_append(Evas_Object *genlist);
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data % NUM_OF_ITEMS;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(genlist_demo_names[index]);
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = NULL;
+
+       if (!strcmp(part, "elm.icon")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+               index = (int)elm_object_item_data_get(item);
+               printf("[Genlist] Selected Text : %s\n", genlist_demo_names[index]);
+       }
+}
+
+static void _genlist_item_append(Evas_Object *genlist)
+{
+       int index;
+       Elm_Object_Item *item;
+
+       // Set genlist block size.
+       // Optimize your application with appropriate genlist block size.
+       elm_genlist_block_count_set(genlist, 14);
+
+       // Append items
+       for (index = 0; index < 4*NUM_OF_ITEMS; index++) {
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               &itc,                           // item class
+                               (void *) index,         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL
+               );
+       }
+}
+
+static void _genlist_item_class_set(void)
+{
+       // Set genlist item class
+       itc.item_style = "1line_icontext";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+}
+
+void genlist_externals_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout = NULL, *genlist = NULL;
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+       // Create a layout which contains genlist object as edje_external.
+       ad->layout_main = layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elm_demo_tizen/layout/genlist_externals");
+
+       // Get genlist object from the layout
+       genlist = edje_object_part_external_object_get(_EDJ(ad->layout_main), "genlist");
+       _genlist_item_class_set();
+       _genlist_item_append(genlist);
+
+       elm_naviframe_item_push(ad->nf, _("Genlist Externals"), NULL, NULL, layout, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_grouptitle.c b/live.viewer/dbox.app/src/genlist/removed/genlist_grouptitle.c
new file mode 100644 (file)
index 0000000..4bec609
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Group Title
+ ********************************************************/
+#define NUM_OF_ITEMS 2000
+static Elm_Genlist_Item_Class itc, itc2;
+//static Elm_Genlist_Item_Class itc3;
+
+#define NUM_OF_GROUPS 5
+static char *group[] = {
+       N_("Family"), N_("Friends"), N_("Colleagues"), N_("Relatives"), N_("Classmates")
+};
+#define NUM_OF_NAMES 40
+static char **genlist_demo_names = NULL;
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_NAMES;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(genlist_demo_names[index]);
+       }
+
+       return NULL;
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj,
+               const char *part)
+{
+       char buf[PATH_MAX];
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+
+       if (!strcmp(part, "elm.text")) {
+               snprintf(buf, sizeof(buf), "%s", group[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+/*
+static Evas_Object* _gl_content_get_title(void *data, Evas_Object *obj,
+               const char *part)
+{
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+
+       if (!strcmp(part, "elm.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               char buf[PATH_MAX];
+
+               snprintf(buf, sizeof(buf), "%s/g%d.png", ICON_DIR, index);
+
+               elm_image_file_set(icon, buf, NULL);
+               return icon;
+       }
+       return NULL;
+}
+*/
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (event_info)
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+       return;
+}
+
+static Evas_Object *_create_genlist(struct appdata *ad)
+{
+       int index;
+       Elm_Object_Item *item;
+       Elm_Object_Item *git = NULL;
+       Evas_Object *genlist;
+
+       genlist_demo_names = genlist_get_demo_names();
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       // Set item class for normal items
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       // Set item class for group title item
+       itc2.item_style = "grouptitle";
+       itc2.func.text_get = _gl_text_get_title;
+       itc2.func.content_get = NULL;
+       itc2.func.state_get = _gl_state_get;
+       itc2.func.del = _gl_del;
+
+       // Set item class for group title left item
+       /*
+       itc3.item_style = "grouptitle.left";
+       itc3.func.content_get = _gl_content_get_title;
+       */
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       /*
+                       if (index < NUM_OF_ITEMS/2)
+                               git = elm_genlist_item_append(genlist, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                       else
+                               //git = elm_genlist_item_append(genlist, &itc3, (void *) index, NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                               git = elm_genlist_item_append(genlist, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                       */
+                       git = elm_genlist_item_append(genlist, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+               } else {
+                       item = elm_genlist_item_append(genlist, &itc, (void *) index,
+                                       git, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       }
+
+       return genlist;
+}
+
+void genlist_grouptitle_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       genlist = _create_genlist(ad);
+       elm_naviframe_item_push(ad->nf, _("Group Index"), NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_music_player_style.c b/live.viewer/dbox.app/src/genlist/removed/genlist_music_player_style.c
new file mode 100644 (file)
index 0000000..a51731d
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ Customize Genlist Styles (Music Player)
+ ********************************************************/
+
+#define        NUM_GENLIST_STYLES 6
+typedef enum _Genlist_Style
+{
+       GENLIST_STYLE_MUSIC_PROGRESS = 0,
+       GENLIST_STYLE_GROUP_TITLE,
+       GENLIST_STYLE_SONGS,
+       GENLIST_STYLE_ALBUM_LIST,
+       GENLIST_STYLE_ARTIST_LIST,
+       GENLIST_STYLE_TITLE_ARTIST
+} Genlist_Style;
+
+typedef struct _Music_Info
+{
+       char *file;
+       char *artist;
+       char *title;
+       char *time;
+       char *track_num;
+       char *album_num;
+       Genlist_Style genlist_style;
+} Music_Info;
+
+typedef struct _Genlist_Data
+{
+       // For progressbar
+       Evas_Object *progressbar[2];
+       Ecore_Timer *progressbar_timer[2];
+       double progressbar_period[2];
+
+       Elm_Genlist_Item_Class itc[NUM_GENLIST_STYLES];
+} Genlist_Data;
+static Genlist_Data sd;
+
+static Music_Info info[] = {
+       { "NotNULL", "Progress Types", NULL, NULL, NULL, NULL, GENLIST_STYLE_GROUP_TITLE },
+       { "NotNULL", "Music Play", "Playing Music", NULL, NULL, NULL, GENLIST_STYLE_MUSIC_PROGRESS },
+       { "NotNULL", "Music Play 2", "Playing Music 2", NULL, NULL, NULL, GENLIST_STYLE_MUSIC_PROGRESS },
+
+       { "NotNULL", "Music 1", NULL, NULL, NULL, NULL, GENLIST_STYLE_GROUP_TITLE },
+       { "AdamGreen_HairyWomenLyrics.jpg", "AdamGreen", "Hairy Women Lyrics", "01:14", "5", "2", GENLIST_STYLE_SONGS },
+       { "BoA_Best&USA.jpg", "BoA", "Best&USA", "03:12", "2", "1", GENLIST_STYLE_ALBUM_LIST },
+       { "CelineDion_TakingChances.jpg", "Celine Dion", "Taking Chances", "05:32", "10", "4", GENLIST_STYLE_ARTIST_LIST },
+       { "JamieCullum_twentysomething.jpg", "Jamie Cullum", "Twenty Something", "03:29", "1", "3", GENLIST_STYLE_TITLE_ARTIST },
+
+       { "NotNULL", "Music 2", NULL, NULL, NULL, NULL, GENLIST_STYLE_GROUP_TITLE },
+       { "M83_saturdays=youth.jpg", "M83", "Saturdays=Youth", "04:21", "2", "3", GENLIST_STYLE_SONGS },
+       { "Narsha.jpg", "Narsha", "Ppirippappa", "03:10", "7", "5", GENLIST_STYLE_ALBUM_LIST },
+       { "RoadNumberOne.jpg", "IU", "Road Number One", "01:55", "2", "7", GENLIST_STYLE_ARTIST_LIST },
+       { "SS501_rebirth.jpg", "SS501", "Rebirth", "04:12", "4", "1", GENLIST_STYLE_TITLE_ARTIST },
+
+       { "NotNULL", "Music 3", NULL, NULL, NULL, NULL, GENLIST_STYLE_GROUP_TITLE },
+       { "AdamGreen_HairyWomenLyrics.jpg", "AdamGreen", "Hairy Women Lyrics", "01:14", "5", "3", GENLIST_STYLE_SONGS },
+       { "BoA_Best&USA.jpg", "BoA", "Best&USA", "03:12", "2", "5", GENLIST_STYLE_ALBUM_LIST },
+       { "CelineDion_TakingChances.jpg", "Celine Dion", "Taking Chances", "05:32", "10", "2", GENLIST_STYLE_ARTIST_LIST },
+       { "JamieCullum_twentysomething.jpg", "Jamie Cullum", "Twenty Something", "03:29", "1", "2", GENLIST_STYLE_TITLE_ARTIST },
+
+       { "NotNULL", "Music 4", NULL, NULL, NULL, NULL, GENLIST_STYLE_GROUP_TITLE },
+       { "M83_saturdays=youth.jpg", "M83", "Saturdays=Youth", "04:21", "2", "1", GENLIST_STYLE_SONGS },
+       { "Narsha.jpg", "Narsha", "Ppirippappa", "03:10", "7", "4", GENLIST_STYLE_ALBUM_LIST },
+       { "RoadNumberOne.jpg", "IU", "Road Number One", "01:55", "2", "5", GENLIST_STYLE_ARTIST_LIST },
+       { "SS501_rebirth.jpg", "SS501", "Rebirth", "04:12", "4", "1", GENLIST_STYLE_TITLE_ARTIST },
+       { NULL, NULL, NULL, NULL, NULL, NULL, 0 }
+};
+
+static void _set_genlist_item_class(void);
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+
+static void _set_genlist_item_class(void)
+{
+       int index = 0;
+
+       for (index = 0; index < NUM_GENLIST_STYLES; index++) {
+               sd.itc[index].func.text_get = _gl_text_get;
+               sd.itc[index].func.content_get = _gl_content_get;
+               sd.itc[index].func.state_get = _gl_state_get;
+               sd.itc[index].func.del = _gl_del;
+       }
+
+       sd.itc[GENLIST_STYLE_MUSIC_PROGRESS].item_style = "music_player/music_progress";
+       sd.itc[GENLIST_STYLE_GROUP_TITLE].item_style = "music_player/group_title";
+       sd.itc[GENLIST_STYLE_SONGS].item_style = "music_player/songs";
+       sd.itc[GENLIST_STYLE_ALBUM_LIST].item_style = "music_player/album_list";
+       sd.itc[GENLIST_STYLE_ARTIST_LIST].item_style = "music_player/artist_list";
+       sd.itc[GENLIST_STYLE_TITLE_ARTIST].item_style = "music_player/title_artist";
+}
+
+static Eina_Bool _progressbar_timer_cb(void *data)
+{
+       double value = 0.0;
+       int prog_index = (int)data;
+
+       value = elm_progressbar_value_get(sd.progressbar[prog_index]);
+       if (value == 1.0)
+               value = 0.0;
+       value = value + 0.015;
+       elm_progressbar_value_set(sd.progressbar[prog_index], value);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.text.title")) {
+               return strdup(info[index].title);
+       } else if (!strcmp(part, "elm.text.artist")) {
+               return strdup(info[index].artist);
+       } else if (!strcmp(part, "elm.text.time")) {
+               return strdup(info[index].time);
+       } else if (!strcmp(part, "elm.text.track_num")) {
+               sprintf(buf, "%s tracks", info[index].track_num);
+               return strdup(buf);
+       } else if (!strcmp(part, "elm.text.album_num")) {
+               sprintf(buf, "%s albums", info[index].album_num);
+               return strdup(buf);
+       } else if (!strcmp(part, "elm.text.group_title")) {
+               return strdup(info[index].artist);
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       char buf[PATH_MAX];
+       int index = (int)data;
+       int prog_index = index - 1;
+
+       if (!strcmp(part, "elm.icon")) {
+               sprintf(buf, "%s/music_player/%s", ICON_DIR, info[index].file);
+               elm_image_file_set(icon, buf, NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               if (prog_index == 0 || prog_index == 1) {
+                       if (sd.progressbar_timer[prog_index]) {
+                               ecore_timer_del(sd.progressbar_timer[prog_index]);
+                               sd.progressbar_timer[prog_index] = NULL;
+                               sd.progressbar[prog_index] = NULL;
+                       }
+                       sd.progressbar[prog_index] = elm_progressbar_add(obj);
+                       elm_object_style_set(sd.progressbar[prog_index], "music_player/list_progressive");
+                       elm_progressbar_horizontal_set(sd.progressbar[prog_index], EINA_TRUE);
+                       elm_progressbar_value_set(sd.progressbar[prog_index], 0.0);
+                       elm_progressbar_unit_format_set(sd.progressbar[prog_index], NULL);
+                       sd.progressbar_timer[prog_index] = ecore_timer_add(sd.progressbar_period[prog_index], _progressbar_timer_cb, (void *)prog_index);
+               }
+               return sd.progressbar[prog_index];
+       }
+
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       int index = 0;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+               index = (int)elm_object_item_data_get(item);
+               printf("Selected Text : %s\n", info[index].title);
+       }
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       int i = 0;
+       // Deletes a theme extension from list of extensions.
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+
+       // Delete Progressbar
+       for (i = 0; i < 2; i++) {
+               if (sd.progressbar_timer[i]) {
+                       ecore_timer_del(sd.progressbar_timer[i]);
+                       sd.progressbar_timer[i] = NULL;
+               }
+               if (sd.progressbar[i]) {
+                       evas_object_del(sd.progressbar[i]);
+                       sd.progressbar[i] = NULL;
+               }
+       }
+       return EINA_TRUE;
+}
+
+static Evas_Object * _create_layout(void *data)
+{
+       Evas_Object *layout;
+       struct appdata *ad;
+
+       ad = (struct appdata *)data;
+
+       // Create a layout
+       layout = elm_layout_add(ad->nf);
+       // Set genlist sample group to layout
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elm_demo_tizen/style_genlist");
+
+       return layout;
+}
+
+static void _unrealized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int)elm_object_item_data_get(event_info);
+       if ((index == 1) || (index == 2)) {
+               if (sd.progressbar_timer[index - 1]) {
+                       ecore_timer_del(sd.progressbar_timer[index - 1]);
+                       sd.progressbar_timer[index - 1] = NULL;
+               }
+       }
+}
+
+static Evas_Object * _create_genlist(Evas_Object *parent)
+{
+       int index = 0;
+       Evas_Object *genlist;
+       Elm_Object_Item *item = NULL;
+       Elm_Object_Item *git = NULL;
+
+       // Create a genlist
+       genlist = elm_genlist_add(parent);
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+       // Append item to the end of genlist
+       for (index = 0; info[index].file; index++) {
+               // Append item to the end of the genlist
+               if (info[index].genlist_style == GENLIST_STYLE_GROUP_TITLE) {
+                       // Add group item
+                       git = elm_genlist_item_append(
+                                       genlist,
+                                       &(sd.itc[info[index].genlist_style]),
+                                       (void *)index, NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL
+                                       );
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       // Add normal item
+                       item = elm_genlist_item_append(
+                                       genlist,
+                                       &(sd.itc[info[index].genlist_style]),
+                                       (void *)index,
+                                       git,
+                                       ELM_GENLIST_ITEM_NONE,
+                                       _gl_sel,
+                                       NULL
+                                       );
+               }
+       }
+
+       return genlist;
+}
+
+void genlist_music_player_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Evas_Object *layout, *genlist;
+       Elm_Object_Item *navi_it;
+       if (ad == NULL) return;
+
+       // Init Private Data
+       sd.progressbar[0] = NULL;
+       sd.progressbar_timer[0] = NULL;
+       sd.progressbar_period[0] = 0.1;
+       sd.progressbar[1] = NULL;
+       sd.progressbar_timer[1] = NULL;
+       sd.progressbar_period[1] = 0.05;
+
+       // Appends a theme extension to list of extensions.
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+       // Create a layout
+       layout = _create_layout(ad);
+
+       // Set genlist item class
+       _set_genlist_item_class();
+
+       // Create a genlist
+       genlist = _create_genlist(layout);
+       // Swallow genlist into contents area of layout
+       elm_layout_content_set(layout, "contents", genlist);
+
+       // Push genlist to the top of naviframe stack
+       navi_it = elm_naviframe_item_push(ad->nf, _("Genlist Style") , NULL, NULL, layout, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_pinchzoom.c b/live.viewer/dbox.app/src/genlist/removed/genlist_pinchzoom.c
new file mode 100644 (file)
index 0000000..475b021
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ * Genlist Pinch Zoom
+ ********************************************************/
+
+static Elm_Genlist_Item_Class itci, itch;
+
+static char *_gli_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       int index = (int) data;
+
+       if ((index>>4) <= 15) {
+               snprintf(buf, sizeof(buf), "List item %d", index+1);
+       } else {
+               snprintf(buf, sizeof(buf), "List item %d", index+1);
+       }
+
+       return strdup(buf);
+}
+
+static char *_gli_title_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       return strdup((char *)data);
+}
+
+static Evas_Object* _create_layout_inner(Evas_Object* parent)
+{
+       Evas_Object* layout_inner;
+
+       layout_inner = elm_layout_add(parent);
+       elm_layout_file_set(layout_inner, ELM_DEMO_EDJ, "fastscroll");
+       evas_object_size_hint_weight_set(layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return layout_inner;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (event_info)
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+}
+
+static Evas_Object* _create_fastscroll_genlist(Evas_Object* parent)
+{
+       Elm_Object_Item *item;
+       Elm_Object_Item *git=NULL;
+       Evas_Object *genlist;
+       int index1, index2;
+       char buf[32];
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+
+   elm_genlist_effect_set(genlist, 1);
+   elm_genlist_pinch_zoom_set(genlist, 1);
+
+       // Set item class
+       itci.item_style = "default";
+       itci.func.text_get = _gli_text_get;
+       itci.func.content_get = NULL;
+       itci.func.state_get = NULL;
+       itci.func.del = NULL;
+
+       itch.item_style = "grouptitle";
+       itch.func.text_get = _gli_title_text_get;
+
+       index2 = 0;
+       for (index1 = 0; index1 < 78; index1++) {
+
+               if ((index1 % 3) == 0) {
+                               snprintf(buf, sizeof(buf), "%c", 'A' + index1 / 3);
+
+                       git = elm_genlist_item_append(genlist, &itch, strdup(buf), NULL, ELM_GENLIST_ITEM_GROUP, _gl_sel, NULL);
+                       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               }
+
+               item = elm_genlist_item_append(genlist, &itci, (void *) index1,
+                               git, ELM_GENLIST_ITEM_NONE,
+                               _gl_sel, NULL);
+       }
+
+       return genlist;
+}
+
+void genlist_pinchzoom_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *genlist;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_layout_inner(ad->nf);
+       genlist = _create_fastscroll_genlist(layout_inner);
+       if (genlist == NULL) return;
+
+       elm_layout_content_set(layout_inner, "elm.swallow.content.genlist", genlist);
+
+       elm_naviframe_item_push(ad->nf, _("Pinch Zoom"), NULL, NULL, layout_inner, NULL);
+}
diff --git a/live.viewer/dbox.app/src/genlist/removed/genlist_variable_width.c b/live.viewer/dbox.app/src/genlist/removed/genlist_variable_width.c
new file mode 100644 (file)
index 0000000..3933a56
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+ Customize Genlist Styles (Variable Width)
+ ********************************************************/
+
+static struct appdata *_ad;
+static int label_max_item_num;
+static Elm_Genlist_Item_Class itc;
+
+static int _get_label_max_item_num(void);
+static void _set_genlist_item_class(void);
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object * _create_genlist(Evas_Object *parent);
+
+static int _get_label_max_item_num(void)
+{
+       return 10;
+}
+
+static void _set_genlist_item_class(void)
+{
+       itc.item_style = "variable_width/default";
+       itc.func.text_get = NULL;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       int size = (int) (((index % label_max_item_num) + 1) * 30 * elm_config_scale_get());
+       int type = (int) (index / label_max_item_num);
+       int width = 0;
+
+       if (!strcmp(part, "elm.swallow.icon")) {
+               width = size + 100 * elm_config_scale_get();
+               if (width > (_ad->root_w - 100 - 10)) {
+                       width = _ad->root_w - 100 - 10;
+               }
+               if (type == 0) {
+                       Evas_Object *label;
+                       label = elm_label_add(obj);
+                       elm_object_style_set(label, "genlist_variable_width/label_ellipsis");
+                       elm_label_wrap_width_set(label, width);
+
+                       /* Ellipsis downgrades performance. But it is needed for variable width feature */
+                       elm_label_ellipsis_set(label, EINA_TRUE);
+
+                       elm_label_label_set(label, "Label changes line automatically if label wrap with is serj");
+                       return label;
+               } else if (type == 1) {
+                       Evas_Object *button;
+                       button = elm_button_add(obj);
+                       elm_object_style_set(button, "style1");
+                       elm_object_text_set(button, "Button");
+                       evas_object_size_hint_min_set(button, width, 50 * elm_config_scale_get());
+                       evas_object_size_hint_max_set(button, width, 50 * elm_config_scale_get());
+                       evas_object_propagate_events_set(button, EINA_FALSE);
+                       return button;
+               }
+       } else if (!strcmp(part, "elm.swallow.icon.small")) {
+               Evas_Object *icon;
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.icon.right")) {
+               Evas_Object *icon;
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_list_photo_default.png", NULL);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       int index = (int) data;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+               if (index < label_max_item_num) {
+                       fprintf(stderr, "Text Selected\n");
+               } else {
+                       fprintf(stderr, "Icon Selected\n");
+               }
+       }
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       // Deletes a theme extension from list of extensions.
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+       set_rotate_cb_for_winset(NULL, NULL);
+
+       return EINA_TRUE;
+}
+
+static Evas_Object * _create_genlist(Evas_Object *parent)
+{
+       int index = 0;
+       Evas_Object *genlist;
+       Elm_Object_Item *item = NULL;
+
+       // Create a genlist
+       genlist = elm_genlist_add(parent);
+
+       // Set genlist item class
+       _set_genlist_item_class();
+
+       // Append item to the end of genlist
+       for (index = 0; index < label_max_item_num * 2; index++) {
+               item = elm_genlist_item_append(
+                               genlist,
+                               &itc,
+                               (void *)index,
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               (void *)index
+                       );
+       }
+
+       return genlist;
+}
+
+static int _rotate_cb(enum appcore_rm rotmode, void *data)
+{
+       Evas_Object *genlist = NULL;
+       Eina_List *realized_list, *l;
+       Elm_Object_Item *it;
+       if (!data) return -1;
+
+       genlist = (Evas_Object *)data;
+       realized_list = elm_genlist_realized_items_get(genlist);
+       EINA_LIST_FOREACH(realized_list, l, it)
+       {
+               elm_genlist_item_update(it);
+       }
+
+       return 0;
+}
+
+void genlist_variable_width_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *)data;
+       Elm_Object_Item *navi_it;
+
+       if (data == NULL) return;
+
+       _ad = ad;
+
+       label_max_item_num = _get_label_max_item_num();
+
+       // Appends a theme extension to list of extensions.
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+       // Create a genlist
+       genlist = _create_genlist(ad->nf);
+
+       // Push genlist to the top of naviframe stack
+       navi_it = elm_naviframe_item_push(ad->nf, _("Variable Width") , NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+
+       // Redraw genlist when rotated
+       set_rotate_cb_for_winset(_rotate_cb, genlist);
+}
diff --git a/live.viewer/dbox.app/src/genlist/test/genlist_sample.c b/live.viewer/dbox.app/src/genlist/test/genlist_sample.c
new file mode 100644 (file)
index 0000000..a68a37b
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "genlist.h"
+
+/* Clear up all genlist items explicitly */
+static void genlist_clear(Evas_Object *genlist)
+{
+       Elm_Object_Item *it = NULL;
+       if (!genlist) return;
+
+       while ((it = elm_genlist_first_item_get(genlist))) {
+               elm_object_item_del(it);
+       }
+}
+
+/* Update realized items only */
+static void genlist_realized_items_update(Evas_Object *genlist)
+{
+       Elm_Object_Item *it = NULL;
+       Eina_List *realized_items = NULL, *l = NULL;
+       if (!genlist) return;
+
+       realized_items = elm_genlist_realized_items_get(genlist);
+       EINA_LIST_FOREACH(realized_items, l, it) {
+               elm_genlist_item_update(it);
+       }
+}
diff --git a/live.viewer/dbox.app/src/genlist_normal.c b/live.viewer/dbox.app/src/genlist_normal.c
new file mode 100644 (file)
index 0000000..7405ea4
--- /dev/null
@@ -0,0 +1,1699 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Styles
+ ********************************************************/
+#define COLOR_MAX 5
+#define NUM_OF_ITEMS 8000
+#define TEST_SIGNALS 0
+
+typedef struct _Item_Data
+{
+       int index;
+       int highlighted;
+       Elm_Object_Item *item;
+       Eina_Bool checked;
+       Eina_Bool stared;
+} Item_Data;
+
+static char *menu_its[] = {
+       "groupindex",
+       "groupindex.icon",
+       "1icon",
+       "1icon/no_padding",
+       "1icon/with_no_line",
+       "1icon/no_padding_line",
+       /*** 1line styles ***/
+       "1text",
+       "1text.tb",
+       "2text",
+       "1text.1icon",
+       "1text.1icon.6",
+       "1text.1icon.7",
+       "1text.1icon.5",
+       "1text.1icon.5.thumb.circle",
+       "1text.1icon.5.thumb.square",
+       "1text.2icon.3",
+       "1text.2icon.3.tb",
+       "1text.1icon.2",
+       "1text.1icon.2.tb",
+       "2text.1icon",
+       "2text.1icon.tb",
+       "1text.2icon",
+       "1text.2icon.tb",
+       "1text.2icon.6",
+       "1text.2icon.6.tb",
+       "1text.1icon.3",
+       "1text.1icon.3.tb",
+       "1text.2icon.4",
+       "1text.2icon.4.tb",
+       "1text.2icon.2",
+       "1text.3icon",
+       "1text.2icon.9",
+       "1text.3icon.2",
+       "1text.1icon.divider",
+       "1text.2icon.divider",
+       /*** 2line styles ***/
+       "2text.2",
+       "2text.2.tb",
+       "2text.3",
+       "3text",
+       "3text.tb",
+       "2text.1icon.2",
+       "2text.1icon.2.tb",
+       "2text.1icon.10",
+       "2text.1icon.10.tb",
+       "3text.1icon",
+       "3text.1icon.tb",
+       "3text.2icon",
+       "3text.2icon.tb",
+       "2text.1icon.4",
+       "2text.1icon.4.thumb.circle",
+       "2text.1icon.4.thumb.square",
+       "2text.1icon.4.tb",
+       "3text.1icon.2",
+       "3text.1icon.2.tb",
+       "2text.1icon.8",
+       "2text.2icon.4",
+       "2text.2icon.4.tb",
+       "2text.2icon.6",
+       "2text.2icon.6.tb",
+       "2text.2icon.8",
+       "2text.2icon.8.tb",
+       "2text.2icon.progress",
+       "3text.3icon.progress",
+       "2text.1icon.divider",
+       "2text.1icon.12",
+       "2text.1icon.12.tb",
+       "2text.2icon.7",
+       "2text.2icon.5",
+       "2text.3icon.4",
+       "4text.1icon.1",
+       "4text.1icon.1.tb",
+       "4text.1icon.2",
+       "4text.1icon.2.tb",
+       "4text.1",
+       "4text.1.tb",
+       "4text.2",
+       "3text.1icon.3",
+       "3text.1icon.3.tb",
+       "4text.1icon.3",
+       "3text.1icon.1",
+       "2text.2icon.1",
+       "2text.1icon.1",
+       "email.list.test",
+       "email.list",
+       "email.list.conversation",
+       "email.outbox",
+       "email.outbox.conversation",
+       "email.list(lazy)",
+       "multiline/2text.5icon",
+       "1text/popup",
+       "1text.1icon.5.thumb.circle/popup",
+       "1text.1icon.5.thumb.square/popup",
+       "2text.1icon.4.thumb.circle/popup",
+       "2text.1icon.4.thumb.square/popup",
+       "1text.1icon.divider/popup",
+       "1text.2icon.divider/popup",
+       /* do not delete below */
+       NULL
+};
+
+extern char *genlist_demo_names[];
+extern char *genlist_long_texts[];
+extern char *genlist_times[];
+extern char *genlist_messages[];
+static Eina_Bool scrolling;
+static Eina_Bool lazy;
+
+static const char *color_set[COLOR_MAX] =
+{
+       "#ff0000ff",
+       "#00ff00ff",
+       "#0000ffff",
+       "#ff00ffff",
+       "#00ffffff"
+};
+
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg"
+};
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       // FIXME: Unrealized callback can be called after this.
+       // Accessing Item_Data can be dangerous on unrealized callback.
+       Item_Data *id = data;
+       if (id) free(id);
+}
+
+static void _list_selected(void *data, Evas_Object *obj, void *ei)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static char *
+_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       int index = id->index;
+
+       if (!strcmp(part, "elm.text.2")) index++;
+
+       snprintf(buf, 1023, "%s:%s", part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       return strdup(buf);
+}
+
+static char *
+_gl_email_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[1024];
+       Item_Data *id = data;
+       int index = id->index;
+
+       if (!strcmp(part, "elm.text.4")) {
+               index = index%4;
+               if (index == 0) snprintf(buf, 1023, "77");
+               else if (index == 1) snprintf(buf, 1023, "9");
+               else if (index == 2) snprintf(buf, 1023, "1");
+               else  snprintf(buf, 1023, "...");
+       } else if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.text.3")) {
+               snprintf(buf, 1023, "<match>%s</match>:%s", part,
+                               genlist_long_texts[index%NUM_OF_GENLIST_LONG_TEXTS]);
+       } else if (!strcmp(part, "elm.text.2")) {
+               snprintf(buf, 1023, "<match>%s</match>:%s", part,
+                               genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       } else snprintf(buf, 1023, "%s:11:30 PM", part);
+
+       return strdup(buf);
+}
+
+static char *_gl_text_get_textblock(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       char buf[PATH_MAX] = {0, };
+       const char *color;
+       int size;
+       int val;
+
+       if (!strcmp(part, "elm.text.4") || !strcmp(part, "elm.text"))
+               val = index+2;
+       else if (!strcmp(part, "elm.text.2"))
+               val = index+4;
+       else if (!strcmp(part, "elm.text.3"))
+               val = index+6;
+       else val = index+8;
+
+       color = color_set[val % COLOR_MAX];
+       size = (val%5)*20 + 32;
+
+       if (index % 10 == 0) return _gl_text_get(data, obj, part);
+       // if textblock is used, application should change color when item is highlighted.
+       if (id->highlighted) // T023P is pressed color of list main text
+               sprintf(buf, "<font_size=%d><color_class=T023P>%s:%s</color></font_size>",
+                               size, part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       else
+               sprintf(buf, "<font_size=%d><color=%s>%s:%s</color></font_size>",
+                               size, color, part, genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       return strdup(buf);
+}
+
+static char *_gl_text_get_bubble_textblock(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text.4"))
+               return _gl_text_get(data, obj, part);
+       else return _gl_text_get_textblock(data, obj, part);
+}
+
+static char* _gl_multiline_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_GENLIST_TIMES;
+
+       if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.title") ) {
+               return strdup(genlist_times[index]);
+       } else {
+               return strdup(genlist_messages[index]);
+       }
+       return NULL;
+}
+
+static Evas_Object *
+_gl_icon_colorbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       if (index%3 == 0) evas_object_color_set(icon, 80, 107, 207, 255);
+       else if (index%3 == 1) evas_object_color_set(icon, 72, 136, 42, 255);
+       else if (index%3 == 2) evas_object_color_set(icon, 204, 52, 52, 255);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_progressbar_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_progressbar_add(obj);
+       elm_object_style_set(icon, "pending_list");
+       elm_progressbar_horizontal_set(icon, EINA_TRUE);
+       elm_progressbar_pulse(icon, EINA_TRUE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_style_set(icon, "reveal");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_check_state_set(icon, EINA_TRUE);
+       elm_object_style_set(icon, "on&off");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       elm_object_style_set(icon, "default/genlist");
+       evas_object_repeat_events_set(icon, EINA_TRUE);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+       // If no divider, unregister access object
+       if (itc && !strstr(itc->item_style, ".divider")) {
+               elm_access_object_unregister(icon);
+       }
+       return icon;
+}
+
+static Evas_Object *
+_icon_email_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_check_add(obj);
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_star_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_icon_favorite_off_45x45.png", NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part);
+
+static void _clicked(void *data, Evas_Object *obj, void *ei)
+{
+       printf("Button clicked\n");
+       Item_Data *id = data;
+       const Elm_Genlist_Item_Class *itc;
+       itc = elm_genlist_item_item_class_get(id->item);
+
+       if (itc && !strcmp(itc->item_style, "1text.1icon")) {
+               printf("Item Class updated\n");
+               // accessibility test
+               elm_genlist_item_item_class_update(id->item, itc);
+
+               Evas_Object *acc = elm_object_item_access_object_get(id->item);
+               // because button is removed, set highlight the item itself.
+               elm_access_highlight_set(acc);
+       }
+}
+
+static Evas_Object *
+_gl_icon_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = elm_button_add(obj);
+       elm_object_text_set(icon, "Text button");
+       evas_object_propagate_events_set(icon, EINA_FALSE);
+       evas_object_smart_callback_add(icon, "clicked", _clicked, id);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/iu.jpg", NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icon_photo_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index % (sizeof(photo_path)/sizeof(*photo_path));
+       char buf[PATH_MAX];
+       Evas_Object *icon = elm_image_add(obj);
+       sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index]);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       return icon;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.swallow.end")) {
+               return _gl_icon_reveal_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               return _gl_icon_colorbar_get(data, obj, part);
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               return _gl_icon_progressbar_get(data, obj, part);
+       }
+       return _gl_icon_get(data, obj, part);
+}
+
+static Evas_Object *
+_gl_2icon_btn_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_btn_text_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_onoff_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_onoff_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_2icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_3icon_chk_reveal_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon.3"))
+               icon = _gl_icon_reveal_get(data, obj, part);
+       else if (!strcmp(part, "elm.icon.1"))
+               icon = _gl_icon_chk_get(data, obj, part);
+       else
+               icon = _gl_content_get(data, obj, part);
+       return icon;
+}
+
+static Evas_Object *
+_gl_icons_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = (id->index)%7;
+       Evas_Object *icon;
+       if (0 == index) {
+               icon = _gl_icon_progressbar_get(data, obj, part);
+       } else if (1 == index) {
+               icon = _gl_icon_reveal_get(data, obj, part);
+       } else if (2 == index) {
+               icon = _gl_icon_onoff_get(data, obj, part);
+       } else if (3 == index) {
+               icon = _gl_icon_chk_get(data, obj, part);
+       } else if (4 == index) {
+               icon = _gl_icon_btn_text_get(data, obj, part);
+       } else {
+               icon = _gl_icon_photo_get(data, obj, part);
+       }
+       return icon;
+}
+
+static void
+_email_check_clicked(void *data, Evas* e, Evas_Object *obj, void *ei)
+{
+       printf("email check area clicked\n");
+       Item_Data *id = data;
+       id->checked = !id->checked;
+       if (id->checked)
+               elm_object_item_signal_emit(id->item, "elm,state,check,show", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,check,hide", "");
+}
+
+static void
+_email_touch_clicked(void *data, Evas* e, Evas_Object *obj, void *ei)
+{
+       printf("email touch area clicked\n");
+       Item_Data *id = data;
+       id->stared = !id->stared;
+       if (id->stared)
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,enable", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,disable", "");
+}
+
+static Evas_Object *
+_gl_email_icon_test_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       if (!strcmp(part, "elm.check.touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0, 0, 64);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_check_clicked, id);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.4.touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0, 0, 64);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, id);
+               return rect;
+       } else return _gl_content_get(data, obj, part);
+       return NULL;
+}
+
+
+static Evas_Object *
+_gl_email_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       double scale = elm_config_scale_get();
+       if (strstr(part, "touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, id);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0 ,0, 64);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               return _icon_email_chk_get(data, obj, part);
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (index % 2 == 0) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_star_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       return box;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.icon.3")) {
+               index = index % 3;
+               if (index == 0) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_star_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.icon.4")) {
+               return _gl_icon_star_get(data, obj, part);
+       } else return _gl_content_get(data, obj, part);
+       return NULL;
+}
+
+static Evas_Object *
+_gl_email_icon_lazy_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       int index = id->index;
+       double scale = elm_config_scale_get();
+       if (strstr(part, "touch")) {
+               Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _email_touch_clicked, NULL);
+               evas_object_propagate_events_set(rect, EINA_FALSE);
+               evas_object_color_set(rect, 64, 0 ,0, 64);
+               return rect;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               return _icon_email_chk_get(data, obj, part);
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (scrolling) return NULL;
+               index = index % 2;
+               if (index == 0) return NULL;
+               else {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       return box;
+               }
+       } else if (!strcmp(part, "elm.icon.4")) {
+               if (scrolling) return NULL;
+               Evas_Object *icon = _gl_icon_get(data, obj, part);
+               evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+               return icon;
+       } else if (!strcmp(part, "elm.icon.3")) {
+               if (scrolling) return NULL;
+               index = index % 4;
+               if (index == 0) return NULL;
+               else if (index == 1) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else if (index == 2) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       elm_box_padding_set(box, 10, 0);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               } else if (index == 3) {
+                       Evas_Object *box = elm_box_add(obj);
+                       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       elm_box_horizontal_set(box, EINA_TRUE);
+                       elm_box_padding_set(box, 10, 0);
+                       Evas_Object *icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 50*scale, 50*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 35*scale, 35*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon = _gl_icon_photo_get(data, obj, part);
+                       evas_object_size_hint_min_set(icon, 45*scale, 45*scale);
+                       evas_object_show(icon);
+                       elm_box_pack_end(box, icon);
+                       icon  = evas_object_rectangle_add(evas_object_evas_get(obj));
+                       evas_object_size_hint_min_set(icon, 16*scale, 16*scale);
+                       evas_object_color_set(icon, 0, 0, 0, 0);
+                       evas_object_show(icon);
+                       elm_box_pack_start(box, icon);
+                       return box;
+               }
+       } else {
+               if (scrolling) return NULL;
+               return _gl_content_get(data, obj, part);
+       }
+       return NULL;
+}
+
+
+static Evas_Object *
+_gl_email_outbox_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.icon.5")) {
+               return _gl_icon_btn_text_get(data, obj, part);
+       } else
+               return _gl_email_icon_get(data, obj, part);
+}
+
+static Evas_Object *
+_gl_icon_highlight_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = data;
+       Evas_Object *icon = NULL;
+       int index = id->index;
+       if (id->highlighted) {
+               printf("Change icon to hilighted icon [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       } else {
+               icon = elm_image_add(obj);
+               // Below should be called before elm_image_file_set
+               elm_image_prescale_set(icon, 10);
+               evas_object_color_set(icon, 128, 128, 128, 128);
+               elm_image_file_set(icon, ICON_DIR"/genlist/iu.jpg", NULL);
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       }
+       return icon;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("Select callback: %s\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+
+       // accessibility test
+       if (itc && !strcmp(itc->item_style, "1text.1icon")) {
+               printf("Item Class updated\n");
+               elm_genlist_item_item_class_update(item, itc);
+       }
+
+       // Make item as unselected
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       if (itc && !strcmp(itc->item_style, "groupindex")) {
+               printf("slide start\n");
+               elm_object_item_signal_emit(item, "elm,state,slide,start", "");
+       }
+       if (itc && (!strcmp(itc->item_style, "1text.1icon.3") ||
+               !strcmp(itc->item_style, "1text.1icon.3.tb") ||
+               !strcmp(itc->item_style, "1text.2icon.2") ||
+               !strcmp(itc->item_style, "1text.3icon") ||
+               !strcmp(itc->item_style, "1text.3icon.2") ||
+               !strcmp(itc->item_style, "1text.2icon.9") ||
+               !strcmp(itc->item_style, "1text.2icon.4") ||
+               !strcmp(itc->item_style, "1text.2icon.4.tb") ||
+               !strcmp(itc->item_style, "2text.2icon.7") ||
+               !strcmp(itc->item_style, "2text.2icon.5") ||
+               !strcmp(itc->item_style, "2text.3icon.4"))) {
+               printf("update check\n");
+               // Update check button
+               Evas_Object *ck = elm_object_item_part_content_get(ei, "elm.icon");
+               if (!ck) ck = elm_object_item_part_content_get(ei, "elm.icon.1");
+               if (ck) {
+                       Eina_Bool state = elm_check_state_get(ck);
+                       elm_check_state_set(ck, !state);
+               }
+       }
+}
+
+static void _longpressed(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("longpressed: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+       // FIXME: after unrealized & realized, item will be back to default state (unread).
+       elm_object_item_signal_emit(ei, "elm,state,read", "");
+}
+
+static void _scroll_anim_start(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_TRUE;
+       printf("scroll,anim,start\n");
+}
+
+static void _scroll_anim_stop(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_FALSE;
+       if (lazy) {
+               Eina_List *l;
+               Elm_Object_Item *it;
+               l = elm_genlist_realized_items_get(obj);
+               EINA_LIST_FREE(l, it) {
+                       elm_genlist_item_fields_update(it, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.3", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.4", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
+       }
+       printf("scroll,anim,stop\n");
+}
+
+static void _scroll_drag_start(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_TRUE;
+       printf("scroll,drag,start\n");
+}
+
+static void _scroll_drag_stop(void *data, Evas_Object *obj, void *ei)
+{
+       scrolling = EINA_FALSE;
+       if (lazy) {
+               Eina_List *l, *list;
+               Elm_Object_Item *it;
+               list = elm_genlist_realized_items_get(obj);
+               EINA_LIST_FOREACH(list, l, it) {
+                       elm_genlist_item_fields_update(it, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.3", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       elm_genlist_item_fields_update(it, "elm.icon.4", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               }
+       }
+
+       printf("scroll,drag,stop\n");
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Item_Data *id = elm_object_item_data_get(ei);
+       int index = id->index;
+
+       const char *txt = elm_object_item_part_text_get(ei, "elm.text");
+       if (!txt)
+               txt = elm_object_item_part_text_get(ei, "elm.text.1");
+       printf("realized: [%s]\n", txt); //genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+
+       // ===== Accessibility ====
+       if (elm_config_access_get()) {
+               const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(ei);
+               if (!strcmp(itc->item_style, "1icon") ||
+                               !strcmp(itc->item_style, "1icon/no_padding") ||
+                               !strcmp(itc->item_style, "1icon/with_no_line") ||
+                               !strcmp(itc->item_style, "1icon/no_padding_line")) {
+
+                       // Unregister item to not be highlighted
+                       elm_object_item_access_unregister(ei);
+
+                       // if icon is not appended yet, register icon to be highglihted
+                       const Eina_List *org = elm_object_item_access_order_get(ei);
+                       Evas_Object *content =
+                               elm_object_item_part_content_get(ei, "elm.icon");
+                       if (content &&  !eina_list_data_find(org, content)) {
+                               Evas_Object *tmp;
+                               Eina_List *l;
+                               Eina_List *items = NULL;
+
+                               // Duplicate original access order
+                               EINA_LIST_FOREACH((Eina_List *)org, l, tmp)
+                                       items = eina_list_append(items, tmp);
+
+                               Evas_Object *ao = elm_access_object_register(content, obj);
+                               items = eina_list_append(items, ao);
+                               elm_object_item_access_order_set(ei, items);
+                       }
+               }
+       }
+
+       // For email style ===================================================
+       // email style implement icons as image part, not swallow part.
+       if (id->checked)
+               elm_object_item_signal_emit(id->item, "elm,state,check,show", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,check,hide", "");
+       if (id->stared)
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,enable", "");
+       else
+               elm_object_item_signal_emit(id->item, "elm,state,icon4,disable", "");
+
+       if (index%3 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,read", "");
+       if (index%2 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,icon2,show", "");
+       if (index%3 == 0)
+               elm_object_item_signal_emit(ei, "elm,state,icon3,show", "");
+       elm_object_item_signal_emit(ei, "elm,state,icon4,show", "");
+       // ===================================================================
+}
+
+static void _loaded(void *data, Evas_Object *obj, void *ei)
+{
+       printf("loaded\n");
+}
+
+#if TEST_SIGNALS
+static void _unrealized(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("unrealized: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _selected(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("selected: %s\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _activated(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("activated: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _clicked_double(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("clicked,double: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _unselected(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("unselected: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_up(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,up: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_down(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,down: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_left(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,left: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_start_right(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,start,right: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag_stop(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag,stop: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _drag(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("drag: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _edge_top(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,top\n");
+}
+
+static void _edge_bottom(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,bottom\n");
+}
+
+static void _edge_left(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,left\n");
+}
+
+static void _edge_right(void *data, Evas_Object *obj, void *ei)
+{
+       printf("edge,right\n");
+}
+
+static void _multi_swipe_left(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,left: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_right(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,right: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_up(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,swipe,up: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_swipe_down(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("edge,bottom: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_pinch_out(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,pinch,out: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _multi_pinch_in(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("multi,pinch,in: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _swipe(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("swipe: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved_after(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved,after: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _moved_before(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("moved,before: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _index_update(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("index,updated: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _expanded(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("expanded: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _contracted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("contracted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _expand_request(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("expand,request: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+
+static void _contract_request(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       printf("contract,request: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+}
+static void _tree_effect_finished(void *data, Evas_Object *obj, void *ei)
+{
+       printf("tree,effect,finished\n");
+}
+#endif
+
+static void _highlighted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(item);
+       int index = id->index;
+       id->highlighted = EINA_TRUE;
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "1text.1icon.7")) {
+               Evas_Object *img = elm_object_item_part_content_get(item, "elm.icon");
+               elm_image_file_set(img, ICON_DIR"/genlist/00_brightness_right_press.png", NULL);
+       } else if (!strcmp(itc->item_style, "1text.tb")) {
+               printf("highlighted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+
+static void _unhighlighted(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+       Item_Data *id = elm_object_item_data_get(ei);
+       int index = id->index;
+       id->highlighted = EINA_FALSE;
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "1text.1icon.7")) {
+               Evas_Object *img = elm_object_item_part_content_get(item, "elm.icon");
+               elm_image_file_set(img, ICON_DIR"/genlist/iu.jpg", NULL);
+       } else if (!strcmp(itc->item_style, "1text.tb")) {
+               printf("unhighlighted: [%s]\n", genlist_demo_names[index%NUM_OF_GENLIST_DEMO_NAMES]);
+               elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+
+static void _index_clicked(void *data, Evas_Object *obj, const char *em, const char *src)
+{
+       printf("index clicked\n");
+       elm_object_signal_emit(obj, "elm,state,slide,start", "");
+
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+    const char *txt = NULL;
+       txt = elm_object_part_text_get(data, "elm.text");
+       if (!txt) return NULL;
+
+       return strdup(_(txt));
+}
+
+static void _mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       Evas_Event_Mouse_Down *md = ei;
+       int ret;
+       Elm_Object_Item *it = elm_genlist_at_xy_item_get(obj, md->canvas.x, md->canvas.y, &ret);
+       printf("down %d %d (%d) (%p)\n", md->canvas.x, md->canvas.y, elm_genlist_item_index_get(it), it);
+}
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int index;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+       const char *style = elm_object_item_text_get(event_info);
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       itc->item_style = style;
+       itc->func.text_get = _gl_text_get;
+       itc->func.content_get = _gl_content_get;
+       itc->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, NULL);
+       if (strstr(style, "email.")) {
+               elm_object_style_set(genlist, "handler");
+       }
+       // Optimize your application with appropriate genlist block size.
+       elm_genlist_block_count_set(genlist, 14);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       if (!strstr(style, ".tb") && !strstr(style, "multiline")) {
+               printf("Homogeneous mode enabled\n");
+               elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       }
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       if (strstr(style, "multiline") ||
+               !strcmp(style, "groupindex") || !strstr(style, "email")) {
+               printf("Compress mode enabled\n");
+               elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       }
+
+       evas_object_smart_callback_add(genlist, "scroll,anim,start", _scroll_anim_start, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,anim,stop", _scroll_anim_stop, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,drag,start", _scroll_drag_start, NULL);
+       evas_object_smart_callback_add(genlist, "scroll,drag,stop", _scroll_drag_stop, NULL);
+       evas_object_smart_callback_add(genlist, "realized", _realized, NULL);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+#if TEST_SIGNALS
+       evas_object_smart_callback_add(genlist, "unrealized", _unrealized, NULL);
+       evas_object_smart_callback_add(genlist, "activated", _activated, NULL);
+       evas_object_smart_callback_add(genlist, "selected", _selected, NULL);
+       evas_object_smart_callback_add(genlist, "unselected", _unselected, NULL);
+       evas_object_smart_callback_add(genlist, "clicked,double", _clicked_double, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,up", _drag_start_up, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,down", _drag_start_down, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,left", _drag_start_left, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,right", _drag_start_right, NULL);
+       evas_object_smart_callback_add(genlist, "drag,stop", _drag_stop, NULL);
+       evas_object_smart_callback_add(genlist, "drag", _drag, NULL);
+       evas_object_smart_callback_add(genlist, "edge,top", _edge_top, NULL);
+       evas_object_smart_callback_add(genlist, "edge,bottom", _edge_bottom, NULL);
+       evas_object_smart_callback_add(genlist, "edge,left", _edge_left, NULL);
+       evas_object_smart_callback_add(genlist, "edge,left", _edge_right, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,left", _multi_swipe_left, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,right", _multi_swipe_right, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,up", _multi_swipe_up, NULL);
+       evas_object_smart_callback_add(genlist, "multi,swipe,down", _multi_swipe_down, NULL);
+       evas_object_smart_callback_add(genlist, "multi,pinch,out", _multi_pinch_out, NULL);
+       evas_object_smart_callback_add(genlist, "multi,pinch,in", _multi_pinch_in, NULL);
+       evas_object_smart_callback_add(genlist, "swipe", _swipe, NULL);
+       evas_object_smart_callback_add(genlist, "moved", _moved, NULL);
+       evas_object_smart_callback_add(genlist, "moved,after", _moved_after, NULL);
+       evas_object_smart_callback_add(genlist, "moved,before", _moved_before, NULL);
+       evas_object_smart_callback_add(genlist, "index,update", _index_update, NULL);
+       evas_object_smart_callback_add(genlist, "tree,effect,finished", _tree_effect_finished, NULL);
+#endif
+       evas_object_smart_callback_add(genlist, "highlighted", _highlighted, NULL);
+       evas_object_smart_callback_add(genlist, "unhighlighted", _unhighlighted, NULL);
+       evas_object_smart_callback_add(genlist, "longpressed", _longpressed, NULL);
+
+       if (strstr(style, ".tb"))
+               itc->func.text_get = _gl_text_get_textblock;
+       else if (strstr(style, "multiline/2text.5icon"))
+               itc->func.text_get = _gl_multiline_text_get;
+
+       if (strstr(style, ".thumb."))
+               itc->func.content_get = _gl_icon_photo_get;
+
+       if (!strcmp(style, "1icon") || strstr(style, "1icon/")) {
+               itc->func.content_get = _gl_icons_get;
+       } else if (!strcmp(style, "1text.1icon.7")) {
+               itc->func.content_get = _gl_icon_highlight_get;
+       } else if (!strcmp(style, "2text.1icon.10") ||
+                          !strcmp(style, "2text.1icon.10.tb")) {
+               itc->func.content_get = _gl_icon_reveal_get;
+       } else if (!strcmp(style, "1text.1icon.6") ||
+                          !strcmp(style, "1text.1icon.divider") ||
+                          !strcmp(style, "1text.2icon.divider") ||
+                          !strcmp(style, "2text.1icon.divider")) {
+               itc->func.content_get = _gl_2icon_onoff_get;
+       } else if (!strcmp(style, "1text.1icon.3") ||
+                          !strcmp(style, "1text.1icon.3.tb") ||
+                          !strcmp(style, "1text.2icon.2") ||
+                          !strcmp(style, "1text.2icon.2") ||
+                          !strcmp(style, "2text.2icon.5") ||
+                          !strcmp(style, "2text.2icon.5")) {
+               itc->func.content_get = _gl_2icon_chk_get;
+       } else if (!strcmp(style, "1text.1icon") ||
+                          !strcmp(style, "1text.2icon") ||
+                          !strcmp(style, "1text.2icon.tb") ||
+                          !strcmp(style, "2text.1icon.2") ||
+                          !strcmp(style, "2text.1icon.2.tb") ||
+                          !strcmp(style, "2text.2icon.8") ||
+                          !strcmp(style, "2text.2icon.8.tb") ||
+                          !strcmp(style, "3text.3icon.progress")) {
+               itc->func.content_get = _gl_2icon_btn_text_get;
+       } else if (!strcmp(style, "1text.2icon.6") ||
+                          !strcmp(style, "1text.2icon.6.tb") ||
+                          !strcmp(style, "2text.2icon.4") |\
+                          !strcmp(style, "2text.2icon.4.tb")) {
+               itc->func.content_get = _gl_2icon_reveal_get;
+       } else if (!strcmp(style, "1text.2icon.4") ||
+                          !strcmp(style, "1text.2icon.4.tb") ||
+                          !strcmp(style, "1text.2icon.9") ||
+                          !strcmp(style, "2text.2icon.7")) {
+               itc->func.content_get = _gl_2icon_chk_reveal_get;
+       } else if (!strcmp(style, "1text.3icon") ||
+                          !strcmp(style, "1text.3icon.2") ||
+                          !strcmp(style, "2text.3icon.4")) {
+               itc->func.content_get = _gl_3icon_chk_reveal_get;
+       } else if (!strcmp(style, "4text.1icon.1.tb") ||
+                          !strcmp(style, "4text.1.tb")) {
+               itc->func.text_get = _gl_text_get_bubble_textblock;
+       } else if (!strcmp(style, "email.list.test"))  {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_icon_test_get;
+       } else if (!strcmp(style, "email.list") ||
+                       !strcmp(style, "email.list.conversation")) {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_icon_get;
+       } else if (!strcmp(style, "email.outbox") ||
+                       !strcmp(style, "email.outbox.conversation")) {
+               itc->func.text_get = _gl_email_text_get;
+               itc->func.content_get = _gl_email_outbox_get;
+       } else if (!strcmp(style, "email.list(lazy)")) {
+               lazy = EINA_TRUE;
+               itc->item_style = "email.list";
+               itc->func.content_get = _gl_email_icon_lazy_get;
+       }
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,                         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL);
+               id->item = item;
+               if (index ==0) elm_object_item_disabled_set(item, EINA_TRUE);
+       }
+       elm_genlist_item_class_free(itc);
+
+       // Add select all layout for groupindex
+       if (!strcmp(style, "groupindex")) {
+               Evas_Object *bx = elm_box_add(ad->nf);
+               evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               Evas_Object *ly = elm_layout_add(bx);
+               elm_layout_theme_set(ly, "genlist/item", "groupindex", "default");
+               evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0);
+               evas_object_size_hint_align_set(ly, -1, -1);
+               elm_object_part_text_set(ly, "elm.text", "This is a layout, not genlist item. This is a groupindex genlist item style. This is packed into box");
+               elm_layout_signal_callback_add(ly, "mouse,clicked,1", "*", _index_clicked, NULL);
+               evas_object_show(ly);
+               elm_box_pack_end(bx, ly);
+
+               // ============== Accessibility
+               // Make layout accessible
+               Evas_Object *ao = elm_access_object_register(ly, ly);
+               elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, ly);
+               elm_object_focus_custom_chain_append(ly, ao, NULL);
+
+               evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(genlist);
+               elm_box_pack_end(bx, genlist);
+               evas_object_show(bx);
+               elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, bx, NULL);
+       } else
+               elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, genlist, NULL);
+}
+
+void genlist_normal_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_selected, NULL);
+
+       for (i = 0; menu_its[i]; i++) {
+               elm_list_item_append(list, menu_its[i], NULL, NULL,
+                               _create_genlist, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Item Styles"), NULL, NULL, list, NULL);
+}
+
+void genlist_homogenous_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int index;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+
+       // Set genlist item class
+       itc1->item_style = "1text.1icon";
+       itc1->func.text_get = _gl_text_get;
+       itc1->func.content_get = _gl_content_get;
+       itc1->func.del = _gl_del;
+
+       itc2->item_style = "3text.1icon";
+       itc2->func.text_get = _gl_text_get;
+       itc2->func.content_get = _gl_content_get;
+       itc2->func.del = _gl_del;
+
+       itc3->item_style = "email.list";
+       itc3->func.text_get = _gl_email_text_get;
+       itc3->func.content_get = _gl_email_icon_get;
+       itc3->func.del = _gl_del;
+
+       itc4->item_style = "dialogue/1text.2icon";
+       itc4->func.text_get = _gl_text_get;
+       itc4->func.content_get = _gl_content_get;
+       itc4->func.del = _gl_del;
+
+       itc5->item_style = "dialogue/3text.2icon";
+       itc5->func.text_get = _gl_text_get;
+       itc5->func.content_get = _gl_content_get;
+       itc5->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       printf("Homogeneous mode enabled\n");
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+       printf("Compress mode enabled\n");
+
+       // Append items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               Elm_Genlist_Item_Class *itc;
+               if (index%5 == 0) itc = itc1;
+               else if (index%5 == 1) itc = itc2;
+               else if (index%5 == 2) itc = itc3;
+               else if (index%5 == 3) itc = itc4;
+               else itc = itc5;
+
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index = index;
+               item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               itc,                            // item class
+                               id,             // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL
+                               );
+               if (index ==0) elm_object_item_disabled_set(item, EINA_TRUE);
+               id->item = item;
+       }
+
+       // Unref item class
+       elm_genlist_item_class_free(itc1);
+       elm_genlist_item_class_free(itc2);
+       elm_genlist_item_class_free(itc3);
+       elm_genlist_item_class_free(itc4);
+       elm_genlist_item_class_free(itc5);
+
+       elm_naviframe_item_push(ad->nf, "homogeneous", NULL, NULL, genlist, NULL);
+}
+
+static void _view_free_cb(void *data, Evas *e, Evas_Object *gen, void *ei)
+{
+       int *index;
+       Ecore_Animator *anim;
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+
+       index = evas_object_data_get(gen, "index");
+       if (index) free(index);
+
+       anim = evas_object_data_get(gen, "anim");
+       if (anim) ecore_animator_del(anim);
+
+       itc1 = evas_object_data_get(gen, "itc1");
+       itc2 = evas_object_data_get(gen, "itc2");
+       itc3 = evas_object_data_get(gen, "itc3");
+       itc4 = evas_object_data_get(gen, "itc4");
+       itc5 = evas_object_data_get(gen, "itc5");
+       if (itc1) elm_genlist_item_class_free(itc1);
+       if (itc2) elm_genlist_item_class_free(itc2);
+       if (itc3) elm_genlist_item_class_free(itc3);
+       if (itc4) elm_genlist_item_class_free(itc4);
+       if (itc5) elm_genlist_item_class_free(itc5);
+}
+
+static Eina_Bool _item_append_cb(void *data)
+{
+       Evas_Object *genlist = data;
+       int *index;
+       Elm_Object_Item *item = NULL;
+       Elm_Genlist_Item_Class *itc = NULL;
+
+       index = evas_object_data_get(genlist, "index");
+       if (*index >=  NUM_OF_ITEMS) {
+               evas_object_data_set(genlist, "anim", NULL);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if ((*index)%5 == 0)
+               itc = evas_object_data_get(genlist, "itc1");
+       else if (((*index)%5) == 1)
+               itc = evas_object_data_get(genlist, "itc2");
+       else if (((*index)%5) == 2)
+               itc = evas_object_data_get(genlist, "itc3");
+       else if (((*index)%5) == 3)
+               itc = evas_object_data_get(genlist, "itc4");
+       else
+               itc = evas_object_data_get(genlist, "itc5");
+
+       Item_Data *id = calloc(sizeof(Item_Data), 1);
+       id->index = *index;
+       item = elm_genlist_item_append(genlist, itc, id, NULL,
+                       ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       id->item = item;
+       if (*index == 0) elm_object_item_disabled_set(item, EINA_TRUE);
+       (*index)++;
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+// FIXME: When item is added by animator, scroller is freezed.
+void genlist_animator_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       struct appdata *ad = data;
+       int *index;
+       Evas_Object *genlist;
+
+       // Create item class
+       Elm_Genlist_Item_Class *itc1,*itc2, *itc3, *itc4, *itc5;
+       itc1 = elm_genlist_item_class_new();
+       itc2 = elm_genlist_item_class_new();
+       itc3 = elm_genlist_item_class_new();
+       itc4 = elm_genlist_item_class_new();
+       itc5 = elm_genlist_item_class_new();
+
+       // Set genlist item class
+       itc1->item_style = "1text.1icon";
+       itc1->func.text_get = _gl_text_get;
+       itc1->func.content_get = _gl_content_get;
+       itc1->func.del = _gl_del;
+
+       itc2->item_style = "3text.1icon";
+       itc2->func.text_get = _gl_text_get;
+       itc2->func.content_get = _gl_content_get;
+       itc2->func.del = _gl_del;
+
+       itc3->item_style = "email.list";
+       itc3->func.text_get = _gl_email_text_get;
+       itc3->func.content_get = _gl_email_icon_get;
+       itc3->func.del = _gl_del;
+
+       itc4->item_style = "dialogue/1text.2icon";
+       itc4->func.text_get = _gl_text_get;
+       itc4->func.content_get = _gl_content_get;
+       itc4->func.del = _gl_del;
+
+       itc5->item_style = "dialogue/3text.2icon";
+       itc5->func.text_get = _gl_text_get;
+       itc5->func.content_get = _gl_content_get;
+       itc5->func.del = _gl_del;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+       evas_object_smart_callback_add(genlist, "loaded", _loaded, NULL);
+
+       // HOMOGENEOUS MODE
+       // If item height is same when each style name is same,
+       // Use homogeneous mode.
+       printf("Homogeneous mode enabled\n");
+       elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       // COMPRESS MODE
+       // If multiline text (multiline entry or multiline textblock or sliding mode)
+       // is used, use compress mode for compressing width to fit the viewport width.
+       // So genlist can calculate item's height correctly.
+       printf("Compress mode enabled\n");
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       evas_object_data_set(genlist, "itc1", itc1);
+       evas_object_data_set(genlist, "itc2", itc2);
+       evas_object_data_set(genlist, "itc3", itc3);
+       evas_object_data_set(genlist, "itc4", itc4);
+       evas_object_data_set(genlist, "itc5", itc5);
+
+       index = calloc(1, sizeof(int));
+       *index = 0;
+       evas_object_data_set(genlist, "index", index);
+
+       // Append items using Ecore_Animator (recommend to use Ecore_Animator in multiline items)
+       Ecore_Animator *anim = ecore_animator_add(_item_append_cb, genlist);
+       evas_object_data_set(genlist, "anim", anim);
+
+       evas_object_event_callback_add(genlist, EVAS_CALLBACK_FREE, _view_free_cb, NULL);
+       elm_naviframe_item_push(ad->nf, "animator append", NULL, NULL, genlist, NULL);
+}
diff --git a/live.viewer/dbox.app/src/handler.c b/live.viewer/dbox.app/src/handler.c
new file mode 100644 (file)
index 0000000..f2a70ad
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "handler.h"
+
+/*********************************************************
+  Handler
+ ********************************************************/
+
+static void _handler_h_cb(void *data, Evas_Object *obj, void *event_info);
+static void _handler_v_cb(void *data, Evas_Object *obj, void *event_info);
+
+#define NUM_OF_ITEMS 50
+static Elm_Genlist_Item_Class itc;
+static char *country_names[] = {
+       "Algeria", "Andorra",
+       "Argentina", "Australia", "Bahamas", "Bangladesh", "belgium", "Benin",
+       "Bosnia", "Canada", "Chad", "Chile", "Cuba ", "Denmark",
+       "Dominican Republic", "Egypt", "England", "Europa Island", "china",
+       "Ethiopia", "Fiji", "Finland", "France", "Germany", "Ghana", "Greece",
+       "Hong Kong", "Hungary", "India", "Iran", "Iraq", "Hafiz", "Italy",
+       "Jordan", "kuwait", "Macau", "Mexico ", "Panama", "Poland", "Peru",
+       "Russia", "Scotland", "Slovakia", "South Korea", "Sri Lanka", "Sweden",
+       "Taiwan", "Tanzania", "Uganda", "Zimbabwe"
+};
+static struct _menu_item menu_its[] = {
+   {"Vert Handler", _handler_v_cb },
+   {"Horz Handler", _handler_h_cb },
+
+   /* do not delete below */
+   {NULL, NULL}
+};
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               return strdup(country_names[(int)data % NUM_OF_ITEMS]);
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon = NULL;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.icon")) {
+               icon = elm_image_add(obj);
+               snprintf(buf, sizeof(buf), ICON_DIR"/g%d.png", ((int)data)%6);
+               elm_image_file_set(icon, buf, NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       }
+
+       return icon;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       int index = (int)elm_object_item_data_get(item);
+
+       if (item != NULL) {
+               fprintf(stdout, "selected text %s\n", country_names[index]);
+       }
+}
+
+static void _handler_v_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+
+       if (ad == NULL) return;
+
+       itc.item_style = "1text.1icon.2";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_object_style_set(genlist, "handler");
+
+       for (index = 0; index < 4*NUM_OF_ITEMS; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       }
+       elm_naviframe_item_push(ad->nf,  _("Vert-Handler"), NULL, NULL, genlist, NULL);
+}
+
+static Evas_Object* _create_horz_handler(Evas_Object* parent)
+{
+       Evas_Object * in_layout;
+       Evas_Object *image;
+       Evas_Coord w, h;
+
+       in_layout = elm_layout_add(parent);
+       elm_layout_file_set(in_layout, ELM_DEMO_EDJ, "elmdemo-test/horz_handler");
+
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+       elm_object_style_set(scroller, "handler");
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_AUTO, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       image = elm_image_add(parent);
+       elm_image_file_set(image, ICON_DIR"/horz_scrollbar.jpg", NULL);
+       elm_image_resizable_set(image, EINA_TRUE, EINA_FALSE);
+       elm_image_object_size_get(image, &w, &h);
+       evas_object_show(image);
+
+       elm_object_content_set(scroller, image);
+       elm_object_part_content_set(in_layout, "scroller", scroller);
+
+       return in_layout;
+}
+
+static void _handler_h_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_horz_handler (ad->nf);
+       elm_naviframe_item_push (ad->nf, _("Horz-Handler") , NULL, NULL, layout_inner, NULL);
+}
+
+static void
+_list_click(void *data, Evas_Object * obj, void *event_info)
+{
+   Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+   if (it == NULL)
+   {
+          fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+          return;
+   }
+
+   elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object *
+_create_list_winset(struct appdata *ad)
+{
+   Evas_Object *li;
+
+   if (ad == NULL) return NULL;
+
+   li = elm_list_add(ad->nf);
+   elm_list_mode_set(li, ELM_LIST_COMPRESS);
+   evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+   int idx = 0;
+
+   while (menu_its[idx].name != NULL)
+     {
+        elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+        ++idx;
+     }
+   elm_list_go(li);
+
+   return li;
+}
+
+void handler_cb(void *data, Evas_Object * obj, void *event_info)
+{
+   struct appdata *ad;
+   Evas_Object *list;
+
+   ad = (struct appdata *)data;
+   if (!ad) return;
+
+   list = _create_list_winset(ad);
+   elm_naviframe_item_push(ad->nf, _("Handler"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/htt.c b/live.viewer/dbox.app/src/htt.c
new file mode 100644 (file)
index 0000000..05a1ec1
--- /dev/null
@@ -0,0 +1,197 @@
+#include <Elementary.h>
+#include <stdlib.h>
+
+const char *enemies[] = { "sistar", "girlsday", "fx", "2ne1", "kara", "missa", "apink", "crayonpop", "4minute", "tara" };
+static Eina_List *enemy_list = NULL;
+static Evas_Object *bricks[9];
+static Evas_Object *score;
+static int score_val = 0;
+
+Evas_Object *create_enemy(Evas *e)
+{
+   int idx = rand() % 10;
+
+   Evas_Object *enemy = evas_object_text_add(e);
+   evas_object_text_font_set(enemy, "DejaVu", 11);
+   evas_object_text_text_set(enemy, enemies[idx]);
+   evas_object_color_set(enemy, 0, 0, 0, 255);
+   evas_object_resize(enemy, 50, 30);
+   evas_object_move(enemy, idx * 50, 0);
+   evas_object_show(enemy);
+
+   return enemy;
+}
+
+Eina_Bool create_enemy_timer_cb(void *data)
+{
+   Evas *e = data;
+
+   Evas_Object *enemy = create_enemy(e);
+
+   enemy_list = eina_list_append(enemy_list, enemy);
+
+   return ECORE_CALLBACK_RENEW;
+}
+
+void remove_brick()
+{
+   int i;
+
+   for (i = 0; i < 9; i++)
+   {
+      if (!evas_object_visible_get(bricks[i])) continue;
+      evas_object_hide(bricks[i]);
+      return;
+   }
+
+   elm_exit();
+}
+
+Eina_Bool move_enemy_timer_cb(void *data)
+{
+   Eina_List *l, *l_next;
+   Evas_Object *enemy;
+   Evas_Coord x, y;
+
+   EINA_LIST_FOREACH_SAFE(enemy_list, l, l_next, enemy)
+   {
+      evas_object_geometry_get(enemy, &x, &y, NULL, NULL);
+
+      if (y >= 400)
+      {
+         enemy_list = eina_list_remove(enemy_list, enemy);
+         evas_object_del(enemy);
+         remove_brick();
+      }
+      else
+      {
+         evas_object_move(enemy, x, y + 20);
+      }
+   }
+
+   return ECORE_CALLBACK_RENEW;
+}
+
+Evas_Object *create_brick(Evas *e, Evas_Coord x, Evas_Coord y)
+{
+   Evas_Object *img = evas_object_image_filled_add(e);
+   evas_object_image_file_set(img, RESDIR"/brick.png", NULL);
+   evas_object_move(img, x, y);
+   evas_object_resize(img, 25, 15);
+   evas_object_show(img);
+
+   return img;
+}
+
+void attack(const char *input)
+{
+   Eina_List *l, *l_next;
+   Evas_Object *enemy;
+
+   EINA_LIST_FOREACH_SAFE(enemy_list, l, l_next, enemy)
+   {
+      if (!strcmp(evas_object_text_text_get(enemy), input))
+      {
+         enemy_list = eina_list_remove(enemy_list, enemy);
+         evas_object_del(enemy);
+         score_val += 100;
+      }
+   }
+
+   char buf[100];
+   snprintf(buf, sizeof(buf), "Score: %d", score_val);
+   evas_object_text_text_set(score, buf);
+}
+
+void key_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+   const int MAX_CUR = 10;
+
+   static char buf[50];
+   static int cur = 0;
+
+   Evas_Event_Key_Down *ev = event_info;
+   Evas_Object *input = data;
+   char tmp[50];
+
+   if (cur == 0) snprintf(buf, sizeof(buf), " ");
+//   printf("%s %s %s %s (%d)\n", ev->keyname, ev->key, ev->string, ev->compose, ev->keycode);
+   if (!strcmp(ev->keyname, "space") || !strcmp(ev->keyname, "Return"))
+   {
+      attack(buf);
+      evas_object_text_text_set(input, "");
+      cur = 0;
+      return;
+   }
+
+   if (!strcmp(ev->keyname, "BackSpace"))
+   {
+      snprintf(tmp, strlen(buf), "%s", buf);
+      evas_object_text_text_set(input, tmp);
+      strcpy(buf, tmp);
+      cur--;
+      return;
+   }
+
+   if (cur >= MAX_CUR) return;
+
+   snprintf(tmp, sizeof(tmp), "%s%s", buf, ev->keyname);
+   evas_object_text_text_set(input, tmp);
+   cur++;
+   strcpy(buf, tmp);
+}
+
+int htt_main(Evas_Object *win)
+{
+   srand((unsigned int) time(NULL));
+
+   Evas *e = evas_object_evas_get(win);
+
+   Evas_Object *bg = evas_object_rectangle_add(e);
+   evas_object_color_set(bg, 168, 168, 168, 255);
+   evas_object_resize(bg, 500, 400);
+   evas_object_show(bg);
+
+   Evas_Object *ocean = evas_object_image_add(e);
+   evas_object_image_file_set(ocean, RESDIR"/ocean.png", NULL);
+   evas_object_image_fill_set(ocean, 0, 0, 20, 20);
+   evas_object_move(ocean, 0, 380);
+   evas_object_resize(ocean, 500, 20);
+   evas_object_show(ocean);
+
+   bricks[0] = create_brick(e, 225, 355);
+   bricks[1] = create_brick(e, 250, 355);
+   bricks[2] = create_brick(e, 275, 355);
+   bricks[3] = create_brick(e, 225, 370);
+   bricks[4] = create_brick(e, 250, 370);
+   bricks[5] = create_brick(e, 275, 370);
+   bricks[6] = create_brick(e, 225, 385);
+   bricks[7] = create_brick(e, 250, 385);
+   bricks[8] = create_brick(e, 275, 385);
+
+   Evas_Object *entry = evas_object_image_filled_add(e);
+   evas_object_image_file_set(entry, RESDIR"/entry.png", NULL);
+   evas_object_move(entry, 217, 326);
+   evas_object_resize(entry, 90, 30);
+   evas_object_show(entry);
+
+   score = evas_object_text_add(e);
+   evas_object_text_font_set(score, "DejaVu", 12);
+   evas_object_text_text_set(score, "Score: 0");
+   evas_object_color_set(score, 0, 0, 0, 255);
+   evas_object_resize(score, 100, 30);
+   evas_object_show(score);
+
+   Evas_Object *input = evas_object_text_add(e);
+   evas_object_text_font_set(input, "DejaVu", 12);
+   evas_object_color_set(input, 0, 0, 0, 255);
+   evas_object_move(input, 220, 330);
+   evas_object_resize(input, 100, 30);
+   evas_object_show(input);
+
+   ecore_timer_add(2, create_enemy_timer_cb, e);
+   ecore_timer_add(0.8, move_enemy_timer_cb, e);
+
+   evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN, key_down_cb, input);
+   return 0;
+}
diff --git a/live.viewer/dbox.app/src/imageslider.c b/live.viewer/dbox.app/src/imageslider.c
new file mode 100644 (file)
index 0000000..958d002
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "imageslider.h"
+
+#define IMAGE_COUNT 22
+
+static char *imageslider_photos_path[IMAGE_COUNT] = {
+       ICON_DIR "/Albums_Item/Albums_Item1.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item2.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item3.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item4.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item5.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item6.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item7.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item8.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item9.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item10.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item11.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item12.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item13.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item14.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item15.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item16.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item17.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item18.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item19.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item20.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item21.jpg",
+       ICON_DIR "/Albums_Item/Albums_Item22.jpg",
+};
+
+static Evas_Object *_create_imageslider(Evas_Object * parent);
+static void _test_cb(void *data, Evas_Object * obj, void *event_info);
+static void _photo_clicked_cb(void *data, Evas_Object * obj, void *event_info);
+
+static Evas_Object *_create_imageslider(Evas_Object * parent)
+{
+       int i;
+       Evas_Object *is;
+
+       is = elm_imageslider_add(parent);
+
+       for (i = 0; i < IMAGE_COUNT; i++) {
+               elm_imageslider_item_append(is, imageslider_photos_path[i], _test_cb, NULL);
+       }
+       elm_imageslider_item_append_relative(is, imageslider_photos_path[10], _test_cb, 3, NULL);
+       evas_object_smart_callback_add(is, "clicked", _photo_clicked_cb, NULL);
+       return is;
+}
+
+static void _test_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Imageslider_Item *it = event_info;
+
+       fprintf(stderr, "[[[ DEBUG ]]]::PHOTO FILE: %s\n", elm_imageslider_item_photo_file_get(it));
+}
+
+static void _photo_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       fprintf(stderr, "[[[ DEBUG ]]]::(TestApp) CLICKED!!!\n");
+}
+
+void imageslider_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *img_slider;
+       Elm_Object_Item *it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+       img_slider = _create_imageslider(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Image Slider"), NULL, NULL, img_slider, NULL);
+}
diff --git a/live.viewer/dbox.app/src/index.c b/live.viewer/dbox.app/src/index.c
new file mode 100644 (file)
index 0000000..b799c96
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "index.h"
+
+static struct _menu_item menu_main[] = {
+       { "Horizontal Style", horizontal_cb},
+       { "Vertical Style", vertical_cb},
+       { "Horizontal Loop Style", horizontal_loop_cb},
+       { "Vertical Loop Style", vertical_loop_cb},
+       { "4-Way Style", index_4way_cb},
+       { "Slider Style", index_slider_cb},
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if(parent == NULL || ad == NULL) return NULL;
+
+       li = elm_list_add(parent);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void index_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad->layout_main, menu_main, ad);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/index_4_way.c b/live.viewer/dbox.app/src/index_4_way.c
new file mode 100644 (file)
index 0000000..ff7b836
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *scroller;
+       Evas_Object *table;
+       Evas_Object *index;
+       Evas_Object *page[6];
+       Evas_Object *page_layout[6];
+
+       int current_page;
+       int page_width;
+};
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+    evas_object_size_hint_min_set(pd->page[3], w, h);
+       evas_object_size_hint_min_set(pd->page[4], w, h);
+       evas_object_size_hint_min_set(pd->page[5], w, h);
+
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->scroller, w, h);
+       elm_scroller_page_show(pd->scroller, pd->current_page, 0);
+}
+
+static Evas_Object*
+_create_index(Evas_Object* parent)
+{
+       Evas_Object *layout, *scroller, *table, *index, *page_layout, *page;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return NULL;
+       /* Create Layout */
+       layout = elm_layout_add(parent);
+       if (layout == NULL) return NULL;
+       page_data *pd = calloc(1, sizeof(page_data));
+       if (pd == NULL) return NULL;
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/index");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       /* Create Scroller */
+       scroller = elm_scroller_add(layout);
+       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 1.0, 1.0);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_scroller_page_scroll_limit_set(scroller, 1, 1);
+       elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
+       elm_object_part_content_set(layout, "scroller", scroller);
+       evas_object_show(scroller);
+
+       pd->scroller = scroller;
+
+       /* Create table  */
+       table = elm_table_add(scroller);
+       elm_table_padding_set(table, 3, 2);
+       elm_object_content_set(scroller, table);
+       evas_object_show(table);
+
+       pd->table = table;
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(table);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+
+       elm_table_pack(table, page_layout, 0, 0, 1, 1);
+
+       // page 2 layout
+       page_layout = elm_layout_add(table);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+
+       elm_table_pack(table, page_layout, 1, 0, 1, 1);
+
+       // page 3 layout
+       page_layout = elm_layout_add(table);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_table_pack(table, page_layout, 2, 0, 1, 1);
+
+       // page 4 layout
+       page_layout = elm_layout_add(table);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[3] = page_layout;
+
+       // page 4 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 50, 50);
+       pd->page[3] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page4");
+
+       elm_table_pack(table, page_layout, 0, 1, 1, 1);
+
+       // page 5 layout
+       page_layout = elm_layout_add(table);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[3] = page_layout;
+
+       // page 5 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 50, 0, 50);
+       pd->page[4] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page5");
+
+       elm_table_pack(table, page_layout, 1, 1, 1, 1);
+
+       // page 6 layout
+       page_layout = elm_layout_add(table);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[5] = page_layout;
+
+       // page 6 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 50, 50);
+       pd->page[5] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page6");
+
+       elm_table_pack(table, page_layout, 2, 1, 1, 1);
+
+       pd->current_page = 0;
+
+       /* Create Index */
+       index = elm_index_add(layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 1);
+       elm_index_item_append(index, "2", NULL, (void *) 2);
+       elm_index_item_append(index, "3", NULL, (void *) 3);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+
+       return layout;
+}
+
+void index_4way_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_index(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, layout_inner, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/index_horizontal.c b/live.viewer/dbox.app/src/index_horizontal.c
new file mode 100644 (file)
index 0000000..de1b49f
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *scroller;
+       Evas_Object *box;
+       Evas_Object *index;
+       Evas_Object *page[3];
+       Evas_Object *page_layout[3];
+
+       int current_page;
+       int page_width;
+
+       Elm_Object_Item *last_it;
+       Elm_Object_Item *new_it;
+};
+
+static void
+_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and move to the page of the currently selected index item */
+       if (!pd->last_it) return;
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+
+       if (!pd->new_it) return;
+
+       int idx = (int) elm_object_item_data_get(pd->new_it);
+       if (idx == pd->current_page) return;
+
+       elm_scroller_page_bring_in(pd->scroller, idx, 0);
+}
+
+static void
+_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the currently selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_index_sync(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Elm_Object_Item *it;
+       it = elm_index_item_find(pd->index, (void *)pd->current_page);
+       if (it) {
+               elm_index_item_selected_set(it, EINA_TRUE);
+               pd->last_it = it;
+               pd->new_it = it;
+       }
+}
+
+static void
+_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       page_data *pd = data;
+       int page_no;
+       elm_scroller_current_page_get(pd->scroller, &page_no, NULL);
+       if (pd->current_page != page_no) {
+               pd->current_page = page_no;
+               _index_sync(pd);
+       }
+}
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->scroller, w, h);
+       elm_scroller_page_show(pd->scroller, pd->current_page, 0);
+}
+
+static Evas_Object*
+_create_index(Evas_Object* parent)
+{
+       Evas_Object *layout, *scroller, *box, *index, *page_layout, *page;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return NULL;
+       /* Create Layout */
+       layout = elm_layout_add(parent);
+       if (layout == NULL) return NULL;
+       page_data *pd = calloc(1, sizeof(page_data));
+       if (pd == NULL) return NULL;
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/index");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       /* Create Scroller */
+       scroller = elm_scroller_add(layout);
+       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 1.0, 0.0);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_scroller_page_scroll_limit_set(scroller, 1, 0);
+       elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
+       elm_object_part_content_set(layout, "scroller", scroller);
+       evas_object_show(scroller);
+
+       pd->scroller = scroller;
+
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, pd);
+
+       /* Create Box */
+       box = elm_box_add(scroller);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_object_content_set(scroller, box);
+       evas_object_show(box);
+
+       pd->box = box;
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(box);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 2 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 3 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_box_pack_end(box, page_layout);
+
+       pd->current_page = 0;
+
+       /* Create Index */
+       index = elm_index_add(layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 0);
+       elm_index_item_append(index, "2", NULL, (void *) 1);
+       elm_index_item_append(index, "3", NULL, (void *) 2);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+       pd->last_it = it;
+
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, _on_index_mouse_down_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, _on_index_mouse_move_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, _on_index_mouse_up_cb, pd);
+
+       return layout;
+}
+
+void horizontal_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_index(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, layout_inner, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/index_horizontal_loop.c b/live.viewer/dbox.app/src/index_horizontal_loop.c
new file mode 100644 (file)
index 0000000..b04a8dd
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *scroller;
+       Evas_Object *box;
+       Evas_Object *index;
+       Evas_Object *page[3];
+       Evas_Object *page_layout[3];
+
+       int current_page;
+       int page_width;
+
+       Elm_Object_Item *last_it;
+       Elm_Object_Item *new_it;
+};
+
+static void
+_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and move to the page of the currently selected index item */
+       if (!pd->last_it) return;
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+
+       if (!pd->new_it) return;
+
+       int idx = (int) elm_object_item_data_get(pd->new_it);
+       if (idx == pd->current_page) return;
+
+       elm_scroller_page_bring_in(pd->scroller, idx, 0);
+}
+
+static void
+_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the currently selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_index_sync(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Elm_Object_Item *it;
+       it = elm_index_item_find(pd->index, (void *)pd->current_page);
+       if (it) {
+               elm_index_item_selected_set(it, EINA_TRUE);
+               pd->last_it = it;
+               pd->new_it = it;
+       }
+}
+
+static void
+_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       page_data *pd = data;
+       int page_no;
+       elm_scroller_current_page_get(pd->scroller, &page_no, NULL);
+       if (pd->current_page != page_no) {
+               pd->current_page = page_no;
+               _index_sync(pd);
+       }
+}
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->scroller, w, h);
+       elm_scroller_page_show(pd->scroller, pd->current_page, 0);
+}
+
+static Evas_Object*
+_create_index(Evas_Object* parent)
+{
+       Evas_Object *layout, *scroller, *box, *index, *page_layout, *page;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return NULL;
+       /* Create Layout */
+       layout = elm_layout_add(parent);
+       if (layout == NULL) return NULL;
+       page_data *pd = calloc(1, sizeof(page_data));
+       if (pd == NULL) return NULL;
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/index");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       /* Create Scroller */
+       scroller = elm_scroller_add(layout);
+       elm_scroller_loop_set(scroller, EINA_TRUE, EINA_FALSE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 1.0, 0.0);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_scroller_page_scroll_limit_set(scroller, 1, 0);
+       elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
+       elm_object_part_content_set(layout, "scroller", scroller);
+       evas_object_show(scroller);
+
+       pd->scroller = scroller;
+
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, pd);
+
+       /* Create Box */
+       box = elm_box_add(scroller);
+       elm_box_horizontal_set(box, EINA_TRUE);
+       elm_object_content_set(scroller, box);
+       evas_object_show(box);
+
+       pd->box = box;
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(box);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 2 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 3 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_box_pack_end(box, page_layout);
+
+       pd->current_page = 0;
+
+       /* Create Index */
+       index = elm_index_add(layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 0);
+       elm_index_item_append(index, "2", NULL, (void *) 1);
+       elm_index_item_append(index, "3", NULL, (void *) 2);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+       pd->last_it = it;
+
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, _on_index_mouse_down_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, _on_index_mouse_move_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, _on_index_mouse_up_cb, pd);
+
+       return layout;
+}
+
+void horizontal_loop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_index(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, layout_inner, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/index_slider.c b/live.viewer/dbox.app/src/index_slider.c
new file mode 100644 (file)
index 0000000..65b427f
--- /dev/null
@@ -0,0 +1,480 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define MAX_PAGE (double)3.0
+#define SLIDER_POPUP_X_Y 133
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *index_scroller;
+       Evas_Object *slider_scroller;
+       Evas_Object *box;
+       Evas_Object *index_slider;
+       Evas_Object *index;
+       Evas_Object *page[3];
+       Evas_Object *page_layout[3];
+       Evas_Object *slider_popup;
+       Evas_Object *index_layout;
+       Ecore_Timer *longpress_timer;
+       double page_width;
+       double current_page;
+       double dx;
+       int page_height;
+       Eina_Bool slider_show;
+       Eina_Bool is_index;
+       Elm_Object_Item *last_it;
+       Elm_Object_Item *new_it;
+};
+
+static void
+_index_sync(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Elm_Object_Item *it;
+       it = elm_index_item_find(pd->index, (void *)(int)pd->current_page);
+       if (it) {
+               elm_index_item_selected_set(it, EINA_TRUE);
+               pd->last_it = it;
+               pd->new_it = it;
+       }
+}
+
+static void
+_slider_popup_position_set(page_data *pd)
+{
+       Evas_Coord x = 0, y = 0, w = 0, h = 0;
+       int pos_x, pos_y;
+
+       evas_object_geometry_get(pd->index, &x, &y, &w, &h);
+       pos_x = x + (w / 2) - (int)(((double)SLIDER_POPUP_X_Y * elm_config_scale_get()) / 2);
+       pos_y = y - (int)((double)SLIDER_POPUP_X_Y * elm_config_scale_get()) - 25;
+       evas_object_move(pd->slider_popup, pos_x, pos_y);
+}
+
+static void
+_page_position_calculate(page_data *pd)
+{
+       elm_scroller_region_show(pd->slider_scroller, pd->page_width * (int)pd->current_page, 0, pd->page_width, pd->page_height);
+}
+
+static void
+_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       page_data *pd = data;
+       double page_no;
+       int page;
+       char buf[50];
+       Evas_Coord x, y, w, h;
+
+       if (pd->is_index) {
+               elm_scroller_current_page_get(pd->index_scroller, &page, NULL);
+               if ((int)pd->current_page != page) {
+                       pd->current_page = page;
+                       _index_sync(pd);
+               }
+       }
+       else {
+               elm_scroller_region_get(pd->slider_scroller, &x, &y, &w, &h);
+               page_no = x / pd->page_width;
+               pd->current_page = page_no + 0.5; //To calculate 50% of the page scroll
+               pd->page_width = w;
+               pd->page_height = h;
+               sprintf(buf, "%d", (int)(pd->current_page + 1.0));
+               edje_object_part_text_set(_EDJ(pd->slider_popup), "page_no", buf);
+               _index_sync(pd);
+       }
+
+}
+
+static void
+_slider_up(page_data *pd)
+{
+       Evas_Object *slider;
+       slider = elm_object_part_content_unset(pd->index_layout, "controller");
+       evas_object_hide(slider);
+       elm_object_part_content_set(pd->index_layout, "controller", pd->index);
+       evas_object_show(pd->index);
+       evas_object_hide(pd->slider_popup);
+       pd->slider_show = EINA_FALSE;
+}
+
+static void
+_slider_move(page_data *pd)
+{
+       double idx;
+       double normal;
+       Evas_Coord y, w, h;
+       char buf[50];
+
+       evas_object_geometry_get(pd->box, NULL, &y, &w, &h);
+       idx = pd->dx * (MAX_PAGE - 1);
+       normal = (double)(w / MAX_PAGE);
+       int unit = (int) (normal * idx);
+       idx = idx + 0.5;
+       pd->current_page = (int)idx;
+       elm_scroller_region_show(pd->slider_scroller, unit, y, (w / MAX_PAGE), h);
+       sprintf(buf, "%d", (int)(pd->current_page + 1.0));
+       edje_object_part_text_set(_EDJ(pd->slider_popup), "page_no", buf);
+}
+
+static Evas_Object *
+_create_scroller(Evas_Object *parent, page_data *pd, Eina_Bool is_index)
+{
+       /* Create Scroller */
+       Evas_Object *scroller;
+       scroller = elm_scroller_add(parent);
+       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_object_scroll_lock_y_set(scroller, EINA_TRUE);
+       if (is_index) {
+               elm_scroller_page_relative_set(scroller, 1.0, 0.0);
+               elm_scroller_page_scroll_limit_set(scroller, 1, 0);
+       }
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, pd);
+       return scroller;
+}
+
+static Evas_Object *
+_create_box(Evas_Object *parent, page_data *pd)
+{
+       Evas_Object *box, *page_layout, *page;
+       box = elm_box_add(parent);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_box_horizontal_set(box, EINA_TRUE);
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(box);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+       elm_box_pack_end(box, page_layout);
+
+       // page 2 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+       elm_box_pack_end(box, page_layout);
+
+       // page 3 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_box_pack_end(box, page_layout);
+       return box;
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       page_data *pd = data;
+       evas_object_del(pd->index_layout);
+       return EINA_TRUE;
+}
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       if (pd->slider_popup)
+               evas_object_del(pd->slider_popup);
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->index_scroller, w, h);
+       elm_scroller_page_show(pd->index_scroller, (int)pd->current_page, 0);
+       _slider_popup_position_set(pd);
+}
+
+static double
+_step_size_calculate(Evas_Object *obj, double min, double max)
+{
+       double step = 0.0;
+       int steps = 0;
+
+       steps = max - min;
+       if (steps) step = (1.0 / steps);
+       return step;
+}
+
+static Evas_Object*
+_create_index_slider(page_data *pd)
+{
+       /* Create Index Slider */
+       double step;
+       Evas_Object *index_slider;
+       index_slider = elm_slider_add(pd->index_layout);
+       elm_object_style_set(index_slider, "pagecontrol");
+       evas_object_size_hint_weight_set(index_slider, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(index_slider, EVAS_HINT_FILL, 0.5);
+       elm_slider_indicator_show_set(index_slider, EINA_FALSE);
+       elm_slider_min_max_set(index_slider, 0, (MAX_PAGE - 1));
+       step = _step_size_calculate(index_slider, 0, (MAX_PAGE - 1));
+       elm_slider_step_set(index_slider, step);
+       elm_slider_value_set(index_slider, 0);
+       return index_slider;
+}
+
+Eina_Bool
+_longpress_timer_cb(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Object *obj, *content;
+
+       elm_object_content_unset(pd->index_scroller);
+       content = elm_object_part_content_unset(pd->index_layout, "scroller");
+       evas_object_hide(content);
+       evas_object_hide(pd->index_scroller);
+
+       elm_object_content_set(pd->slider_scroller, pd->box);
+       elm_object_part_content_set(pd->index_layout, "scroller", pd->slider_scroller);
+       evas_object_show(pd->slider_scroller);
+
+       pd->is_index = EINA_FALSE;
+       obj = elm_object_part_content_unset(pd->index_layout, "controller");
+       evas_object_hide(obj);
+       elm_object_part_content_set(pd->index_layout, "controller", pd->index_slider);
+       evas_object_show(pd->index_slider);
+       pd->longpress_timer = NULL;
+       elm_slider_value_set(pd->index_slider, pd->dx * (MAX_PAGE -1));
+       _slider_move(pd);
+       pd->slider_show = EINA_TRUE;
+       evas_object_show(pd->slider_popup);
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+       if (!pd->longpress_timer)
+               pd->longpress_timer = ecore_timer_add(elm_config_longpress_timeout_get(), _longpress_timer_cb, pd);
+}
+
+static void
+_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Object *content;
+       if (pd->longpress_timer) {
+               ecore_timer_del(pd->longpress_timer);
+               pd->longpress_timer = NULL;
+       }
+       /* Keep the last index item active and move to the page of the currently selected index item */
+       if (!pd->last_it) return;
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+
+       if (!pd->new_it) return;
+
+       int idx = (int) elm_object_item_data_get(pd->new_it);
+       pd->current_page = idx;
+
+       _page_position_calculate(pd);
+       _index_sync(pd);
+       _slider_up(pd);
+
+       if (pd->is_index) {
+               elm_scroller_page_bring_in(pd->index_scroller, idx, 0);
+       }
+       else {
+               elm_object_content_unset(pd->slider_scroller);
+               content = elm_object_part_content_unset(pd->index_layout, "scroller");
+               evas_object_hide(content);
+               evas_object_hide(pd->slider_scroller);
+
+               elm_object_content_set(pd->index_scroller, pd->box);
+               elm_object_part_content_set(pd->index_layout, "scroller", pd->index_scroller);
+               evas_object_show(pd->index_scroller);
+               elm_scroller_page_show(pd->index_scroller, idx, 0);
+       }
+       pd->is_index = EINA_TRUE;
+}
+
+static void
+_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_on_rect_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Event_Mouse_Down *ev = event_info;
+       Evas_Coord x, y, w, h;
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+       pd->dx = ((double)ev->canvas.x - (double)x) / (double)w;
+}
+
+static void
+_on_rect_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Event_Mouse_Down *ev = event_info;
+       Evas_Coord x, y, w, h;
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+       pd->dx = ((double)ev->canvas.x - (double)x) / (double)w;
+       if (pd->slider_show && pd->dx <= 1.0) {
+               elm_slider_value_set(pd->index_slider, pd->dx * (MAX_PAGE -1));
+               _slider_move(pd);
+       }
+}
+
+static void
+_create_index(Evas_Object* parent, page_data *pd)
+{
+       Evas_Object *index, *rect;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return;
+       /* Create Layout */
+       if (pd == NULL) return;
+       pd->index_layout = elm_layout_add(parent);
+       if (pd->index_layout == NULL) return;
+       elm_layout_file_set(pd->index_layout, ELM_DEMO_EDJ, "elmdemo-test/index_slider");
+       evas_object_size_hint_weight_set(pd->index_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(pd->index_layout);
+
+       evas_object_event_callback_add(pd->index_layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(pd->index_layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       rect = evas_object_rectangle_add(evas_object_evas_get(parent));
+       evas_object_color_set(rect, 0, 0, 0, 0);
+       evas_object_pass_events_set(rect, EINA_TRUE);
+       elm_object_part_content_set(pd->index_layout, "controller_rect", rect);
+       evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _on_rect_down_cb, pd);
+       evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_MOVE, _on_rect_mouse_move_cb, pd);
+
+       pd->is_index = EINA_TRUE;
+       pd->index_scroller = _create_scroller(pd->index_layout, pd, pd->is_index);
+       elm_object_part_content_set(pd->index_layout, "scroller", pd->index_scroller);
+
+       pd->box = _create_box(pd->index_scroller, pd);
+
+       elm_object_content_set(pd->index_scroller, pd->box);
+       evas_object_show(pd->box);
+       evas_object_show(pd->index_scroller);
+
+       pd->current_page = 0.0;
+
+       /* Create Index */
+       index = elm_index_add(pd->index_layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(pd->index_layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 0);
+       elm_index_item_append(index, "2", NULL, (void *) 1);
+       elm_index_item_append(index, "3", NULL, (void *) 2);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+       pd->last_it = it;
+
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, _on_index_mouse_down_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, _on_index_mouse_move_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, _on_index_mouse_up_cb, pd);
+
+       pd->index_slider = _create_index_slider(pd);
+       pd->slider_scroller = _create_scroller(pd->index_layout, pd, !pd->is_index);
+}
+
+void index_slider_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+       page_data *pd = calloc(1, sizeof(page_data));
+       //slider popup layout
+       pd->slider_popup = elm_layout_add(ad->nf);
+       elm_layout_file_set(pd->slider_popup, ELM_DEMO_EDJ, "elmdemo-test/index_slider_popup");
+       evas_object_resize(pd->slider_popup,
+                       (int)((double)SLIDER_POPUP_X_Y * elm_config_scale_get()),
+                       (int)((double)SLIDER_POPUP_X_Y * elm_config_scale_get()));
+       _create_index(ad->nf, pd);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Slider PageControl") , NULL, NULL, pd->index_layout, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, pd);
+}
diff --git a/live.viewer/dbox.app/src/index_vertical.c b/live.viewer/dbox.app/src/index_vertical.c
new file mode 100644 (file)
index 0000000..1b9c7e9
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *scroller;
+       Evas_Object *box;
+       Evas_Object *index;
+       Evas_Object *page[3];
+       Evas_Object *page_layout[3];
+
+       int current_page;
+       int page_width;
+
+       Elm_Object_Item *last_it;
+       Elm_Object_Item *new_it;
+};
+
+static void
+_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and move to the page of the currently selected index item */
+       if (!pd->last_it) return;
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+
+       if (!pd->new_it) return;
+
+       int idx = (int) elm_object_item_data_get(pd->new_it);
+       if (idx == pd->current_page) return;
+
+       elm_scroller_page_bring_in(pd->scroller, 0, idx);
+}
+
+static void
+_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the currently selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_index_sync(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Elm_Object_Item *it;
+       it = elm_index_item_find(pd->index, (void *)pd->current_page);
+       if (it) {
+               elm_index_item_selected_set(it, EINA_TRUE);
+               pd->last_it = it;
+               pd->new_it = it;
+       }
+}
+
+static void
+_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       page_data *pd = data;
+       int page_no;
+       elm_scroller_current_page_get(pd->scroller, NULL, &page_no);
+       if (pd->current_page != page_no) {
+               pd->current_page = page_no;
+               _index_sync(pd);
+       }
+}
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->scroller, w, h);
+       elm_scroller_page_show(pd->scroller, pd->current_page, 0);
+}
+
+static Evas_Object*
+_create_index(Evas_Object* parent)
+{
+       Evas_Object *layout, *scroller, *box, *index, *page_layout, *page;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return NULL;
+       /* Create Layout */
+       layout = elm_layout_add(parent);
+       if (layout == NULL) return NULL;
+       page_data *pd = calloc(1, sizeof(page_data));
+       if (pd == NULL) return NULL;
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/index");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       /* Create Scroller */
+       scroller = elm_scroller_add(layout);
+       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_FALSE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 0.0, 1.0);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_scroller_page_scroll_limit_set(scroller, 0, 1);
+       elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
+       elm_object_part_content_set(layout, "scroller", scroller);
+       evas_object_show(scroller);
+
+       pd->scroller = scroller;
+
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, pd);
+
+       /* Create Box */
+       box = elm_box_add(scroller);
+       elm_box_horizontal_set(box, EINA_FALSE);
+       elm_object_content_set(scroller, box);
+       evas_object_show(box);
+
+       pd->box = box;
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(box);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 2 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 3 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_box_pack_end(box, page_layout);
+
+       pd->current_page = 0;
+
+       /* Create Index */
+       index = elm_index_add(layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 0);
+       elm_index_item_append(index, "2", NULL, (void *) 1);
+       elm_index_item_append(index, "3", NULL, (void *) 2);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+       pd->last_it = it;
+
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, _on_index_mouse_down_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, _on_index_mouse_move_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, _on_index_mouse_up_cb, pd);
+
+       return layout;
+}
+
+void vertical_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_index(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, layout_inner, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/index_vertical_loop.c b/live.viewer/dbox.app/src/index_vertical_loop.c
new file mode 100644 (file)
index 0000000..bcc35ac
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+typedef struct _page_data page_data;
+struct _page_data
+{
+       Evas_Object *scroller;
+       Evas_Object *box;
+       Evas_Object *index;
+       Evas_Object *page[3];
+       Evas_Object *page_layout[3];
+
+       int current_page;
+       int page_width;
+
+       Elm_Object_Item *last_it;
+       Elm_Object_Item *new_it;
+};
+
+static void
+_on_index_mouse_down_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_on_index_mouse_up_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and move to the page of the currently selected index item */
+       if (!pd->last_it) return;
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+
+       if (!pd->new_it) return;
+
+       int idx = (int) elm_object_item_data_get(pd->new_it);
+       if (idx == pd->current_page) return;
+
+       elm_scroller_page_bring_in(pd->scroller, 0, idx);
+}
+
+static void
+_on_index_mouse_move_cb(void *data, Evas *e, Evas_Object *o, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+
+       /* Keep the last index item active and save the currently selected index item */
+       if (!pd->last_it) return;
+
+       int level = elm_index_item_level_get(o);
+       pd->new_it = elm_index_selected_item_get(o, level);
+       elm_index_item_selected_set(pd->last_it, EINA_TRUE);
+}
+
+static void
+_index_sync(void *data)
+{
+       page_data *pd = (page_data *)data;
+       Elm_Object_Item *it;
+       it = elm_index_item_find(pd->index, (void *)pd->current_page);
+       if (it) {
+               elm_index_item_selected_set(it, EINA_TRUE);
+               pd->last_it = it;
+               pd->new_it = it;
+       }
+}
+
+static void
+_scroll_cb(void *data, Evas_Object *scroller, void *event_info)
+{
+       page_data *pd = data;
+       int page_no;
+       elm_scroller_current_page_get(pd->scroller, NULL, &page_no);
+       if (pd->current_page != page_no) {
+               pd->current_page = page_no;
+               _index_sync(pd);
+       }
+}
+
+static void
+_layout_del_cb(void *data , Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = data;
+       free(pd);
+}
+
+static void
+_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       page_data *pd = (page_data *)data;
+       Evas_Coord w, h;
+
+       evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+       evas_object_size_hint_min_set(pd->page[0], w, h);
+       evas_object_size_hint_min_set(pd->page[1], w, h);
+       evas_object_size_hint_min_set(pd->page[2], w, h);
+
+       pd->page_width = w;
+       elm_scroller_page_size_set(pd->scroller, w, h);
+       elm_scroller_page_show(pd->scroller, pd->current_page, 0);
+}
+
+static Evas_Object*
+_create_index(Evas_Object* parent)
+{
+       Evas_Object *layout, *scroller, *box, *index, *page_layout, *page;
+       Elm_Object_Item *it;
+
+       if (parent == NULL) return NULL;
+       /* Create Layout */
+       layout = elm_layout_add(parent);
+       if (layout == NULL) return NULL;
+       page_data *pd = calloc(1, sizeof(page_data));
+       if (pd == NULL) return NULL;
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/index");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, _layout_resize_cb, pd);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _layout_del_cb, pd);
+
+       /* Create Scroller */
+       scroller = elm_scroller_add(layout);
+       elm_scroller_loop_set(scroller, EINA_FALSE, EINA_TRUE);
+       evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_scroller_page_relative_set(scroller, 0.0, 1.0);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_scroller_page_scroll_limit_set(scroller, 0, 1);
+       elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
+       elm_object_part_content_set(layout, "scroller", scroller);
+       evas_object_show(scroller);
+
+       pd->scroller = scroller;
+
+       evas_object_smart_callback_add(scroller, "scroll", _scroll_cb, pd);
+
+       /* Create Box */
+       box = elm_box_add(scroller);
+       elm_box_horizontal_set(box, EINA_FALSE);
+       elm_object_content_set(scroller, box);
+       evas_object_show(box);
+
+       pd->box = box;
+
+       /* Create Pages */
+       // page 1 layout
+       page_layout = elm_layout_add(box);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       evas_object_show(page_layout);
+       pd->page_layout[0] = page_layout;
+
+       // page 1 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 50, 0, 0, 50);
+       pd->page[0] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page1");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 2 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[1] = page_layout;
+
+       // page 2 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 50, 0, 50);
+       pd->page[1] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page2");
+
+       elm_box_pack_end(box, page_layout);
+
+       // page 3 layout
+       page_layout = elm_layout_add(box);
+       evas_object_size_hint_weight_set(page_layout, 0, 0);
+       evas_object_size_hint_align_set(page_layout, 0, EVAS_HINT_FILL);
+       elm_layout_file_set(page_layout, ELM_DEMO_EDJ, "elmdemo-test/pagecontrol/page");
+       evas_object_show(page_layout);
+       pd->page_layout[2] = page_layout;
+
+       // page 3 content
+       page = evas_object_rectangle_add(evas_object_evas_get(page_layout));
+       evas_object_color_set(page, 0, 0, 50, 50);
+       pd->page[2] = page;
+
+       elm_object_part_content_set(page_layout, "page", page);
+       elm_object_part_text_set(page_layout, "text", "Page3");
+
+       elm_box_pack_end(box, page_layout);
+
+       pd->current_page = 0;
+
+       /* Create Index */
+       index = elm_index_add(layout);
+       evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(index, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_style_set(index, "pagecontrol");
+       elm_index_horizontal_set(index, EINA_TRUE);
+       elm_index_autohide_disabled_set(index, EINA_TRUE);
+       elm_object_part_content_set(layout, "controller", index);
+
+       it = elm_index_item_append(index, "1", NULL, (void *) 0);
+       elm_index_item_append(index, "2", NULL, (void *) 1);
+       elm_index_item_append(index, "3", NULL, (void *) 2);
+
+       elm_index_level_go(index, 0);
+       elm_index_item_selected_set(it, EINA_TRUE);
+       pd->index = index;
+       pd->last_it = it;
+
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_DOWN, _on_index_mouse_down_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_MOVE, _on_index_mouse_move_cb, pd);
+       evas_object_event_callback_add(index, EVAS_CALLBACK_MOUSE_UP, _on_index_mouse_up_cb, pd);
+
+       return layout;
+}
+
+void vertical_loop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout_inner;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       layout_inner = _create_index(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("PageControl") , NULL, NULL, layout_inner, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/indicator.c b/live.viewer/dbox.app/src/indicator.c
new file mode 100644 (file)
index 0000000..f06d7f3
--- /dev/null
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "indicator.h"
+
+static void
+_autohide_indi_cb(void *data, Evas_Object *obj, void *ev)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *win, *conform;
+
+    if ((!ad->win_main) || (!ad->conform))
+    {
+       printf("[%s]:We can't get conformant\n", __FUNCTION__);
+       return;
+    }
+    win     = ad->win_main;
+    conform = ad->conform;
+
+    elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSPARENT);
+}
+
+static void
+_headerbg_indi_cb(void *data, Evas_Object *obj, void *ev)
+{
+
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *win, *conform, *bg;
+
+    if ((!ad->win_main) || (!ad->conform))
+    {
+       printf("[%s]:We can't get conformant\n", __FUNCTION__);
+       return;
+    }
+    win     = ad->win_main;
+    conform = ad->conform;
+
+    elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+    elm_object_signal_emit(conform, "elm,state,indicator,nooverlap", "elm");
+
+    bg = elm_bg_add(conform);
+    elm_object_style_set(bg, "indicator/headerbg");
+    elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+    evas_object_show(bg);
+}
+
+static void
+_translucent_indi_cb(void *data, Evas_Object *obj, void *ev)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *win, *conform, *bg;
+
+    if ((!ad->win_main) || (!ad->conform))
+    {
+       printf("[%s]:We can't get conformant\n", __FUNCTION__);
+       return;
+    }
+    win     = ad->win_main;
+    conform = ad->conform;
+
+    elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+    elm_object_signal_emit(conform, "elm,state,indicator,overlap", "elm");
+
+    bg = elm_bg_add(conform);
+    elm_object_style_set(bg, "indicator/translucent");
+    elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+    evas_object_show(bg);
+}
+
+static void
+_transparent_indi_cb(void *data, Evas_Object *obj, void *ev)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *win, *conform, *bg;
+
+    if ((!ad->win_main) || (!ad->conform))
+    {
+       printf("[%s]:We can't get conformant\n", __FUNCTION__);
+       return;
+    }
+    win     = ad->win_main;
+    conform = ad->conform;
+
+    elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+    elm_object_signal_emit(conform, "elm,state,indicator,overlap", "elm");
+
+    bg = elm_bg_add(conform);
+    elm_object_style_set(bg, "indicator/transparent");
+    elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+    evas_object_show(bg);
+}
+
+//recover indicator when indicator start
+static void
+_default_indi_cb(void *data, Evas_Object *obj, void *ev)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *win, *conform, *bg;
+
+    if ((!ad->win_main) || (!ad->conform))
+    {
+       printf("[%s]:We can't get conformant\n", __FUNCTION__);
+       return;
+    }
+    win     = ad->win_main;
+    conform = ad->conform;
+
+    elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_OPAQUE);
+    elm_object_signal_emit(conform, "elm,state,indicator,nooverlap", "elm");
+
+    bg = elm_bg_add(conform);
+    elm_object_style_set(bg, "indicator/default");
+    elm_object_part_content_set(conform, "elm.swallow.indicator_bg", bg);
+    evas_object_show(bg);
+}
+
+static Evas_Object *
+_create_box(Evas_Object *parent, void *data)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object * bx;
+    Evas_Object *bt;
+    Evas_Object *win;
+    win = ad->win_main;
+
+    // Create box
+    bx = elm_box_add(parent);
+
+    bt = elm_button_add(bx);
+    elm_object_text_set(bt, "Default indicator");
+    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
+    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+    evas_object_show(bt);
+    elm_box_pack_end(bx, bt);
+    evas_object_smart_callback_add(bt, "clicked", _default_indi_cb, data);
+
+    bt = elm_button_add(bx);
+    elm_object_text_set(bt, "Headerbg indicator");
+    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
+    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+    evas_object_show(bt);
+    elm_box_pack_end(bx, bt);
+    evas_object_smart_callback_add(bt, "clicked", _headerbg_indi_cb, data);
+
+    bt = elm_button_add(bx);
+    elm_object_text_set(bt, "Translucent indicator");
+    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
+    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+    evas_object_show(bt);
+    elm_box_pack_end(bx, bt);
+    evas_object_smart_callback_add(bt, "clicked", _translucent_indi_cb, data);
+
+    bt = elm_button_add(bx);
+    elm_object_text_set(bt, "Transparent indicator");
+    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
+    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+    evas_object_show(bt);
+    elm_box_pack_end(bx, bt);
+    evas_object_smart_callback_add(bt, "clicked", _transparent_indi_cb, data);
+
+    bt = elm_button_add(bx);
+    elm_object_text_set(bt, "Autohide indicator");
+    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0);
+    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+    evas_object_show(bt);
+    elm_box_pack_end(bx, bt);
+    evas_object_smart_callback_add(bt, "clicked", _autohide_indi_cb, data);
+    return bx;
+}
+
+void indicator_cb(void *data, Evas_Object *obj, void *event_info)
+{
+    struct appdata *ad = (struct appdata *) data;
+    Evas_Object *box;
+    Evas_Object *win, *conform;
+    win = ad->win_main;
+    conform = ad->conform;
+
+    box = _create_box(ad->nf, data);
+
+    elm_naviframe_item_push(ad->nf, _("Indicator"), NULL, NULL, box, NULL);
+
+}
diff --git a/live.viewer/dbox.app/src/instance.c b/live.viewer/dbox.app/src/instance.c
new file mode 100644 (file)
index 0000000..f1a0b25
--- /dev/null
@@ -0,0 +1,143 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <Eina.h>
+
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include "instance.h"
+
+struct instance {
+       char *id;
+       char *content;
+       int w;
+       int h;
+       void *data;
+};
+
+static struct info {
+       Eina_List *inst_list;
+} s_info = {
+       .inst_list = NULL,
+};
+
+struct instance *instance_create(const char *id, const char *content, int w, int h)
+{
+       struct instance *inst;
+
+       inst = calloc(1, sizeof(*inst));
+       if (!inst) {
+               return NULL;
+       }
+
+       inst->id = strdup(id);
+       if (!inst->id) {
+               free(inst);
+               return NULL;
+       }
+
+       inst->w = w;
+       inst->h = h;
+
+       s_info.inst_list = eina_list_append(s_info.inst_list, inst);
+
+       return inst;
+}
+
+int instance_destroy(struct instance *inst)
+{
+       s_info.inst_list = eina_list_remove(s_info.inst_list, inst);
+       free(inst->id);
+       free(inst);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+struct instance *instance_find(const char *id)
+{
+       Eina_List *l;
+       struct instance *inst;
+
+       if (!id) {
+               return NULL;
+       }
+
+       EINA_LIST_FOREACH(s_info.inst_list, l, inst) {
+               if (!strcmp(inst->id, id)) {
+                       return inst;
+               }
+       }
+
+       return NULL;
+}
+
+int instance_set_size_by_id(const char *id, int w, int h)
+{
+       struct instance *inst;
+
+       inst = instance_find(id);
+       if (!inst) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return instance_set_size_by_handle(inst, w, h);
+}
+
+int instance_set_size_by_handle(struct instance *inst, int w, int h)
+{
+       inst->w = w;
+       inst->h = h;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int instance_get_size_by_id(const char *id, int *w, int *h)
+{
+       struct instance *inst;
+
+       inst = instance_find(id);
+       if (!inst) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return instance_get_size_by_handle(inst, w, h);
+}
+
+int instance_get_size_by_handle(struct instance *inst, int *w, int *h)
+{
+       *w = inst->w;
+       *h = inst->h;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int instance_set_data(struct instance *inst, void *data)
+{
+       inst->data = data;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void *instance_data(struct instance *inst)
+{
+       return inst->data;
+}
+
+int instance_crawling(int (*cb)(struct instance *inst, void *data), void *data)
+{
+       Eina_List *l;
+       Eina_List *n;
+       struct instance *inst;
+       int cnt = 0;
+
+       EINA_LIST_FOREACH_SAFE(s_info.inst_list, l, n, inst) {
+               if (cb(inst, data) < 0) {
+                       break;
+               }
+               cnt++;
+       }
+
+       return cnt;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.app/src/label.c b/live.viewer/dbox.app/src/label.c
new file mode 100644 (file)
index 0000000..c082033
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "label.h"
+#include "label_textstyles.h"
+#include "label_linebreakmodes.h"
+#include "label_colorstyles.h"
+#include "label_ellipsis.h"
+#include "label_slide.h"
+
+static struct _menu_item menu_its[] = {
+       { "Styles", label_text_styles_cb },
+       { "Linebreakmodes", label_linebreak_modes_cb },
+       { "Color Styles", label_color_styles_cb },
+       { "Ellipsis", label_ellipsis_cb },
+       { "Text Slide", label_slide_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu_its[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void label_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Label"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/label_colorstyles.c b/live.viewer/dbox.app/src/label_colorstyles.c
new file mode 100644 (file)
index 0000000..4c9f136
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "label.h"
+#include "label_colorstyles.h"
+
+/*********************************************************
+ label
+ ********************************************************/
+static Evas_Object* _create_labels(Evas_Object* parent)
+{
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/label");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *label;
+       label = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label1", label);
+       elm_object_text_set(label, _("<align=center>font color black</align>"));
+
+       Evas_Object *label2;
+       label2 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label2", label2);
+       elm_object_text_set(label2, _("<color=#FF4500FF><align=center>font color orange red</align></color>"));
+
+       Evas_Object *label3;
+       label3 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label3", label3);
+       elm_object_text_set(label3, _("<color=#00008BFF><align=center>font color dark blue<align></color>"));
+
+       Evas_Object *label4;
+       label4 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label4", label4);
+       elm_object_text_set(label4, _("<color=#4D554BFF><align=center>pastel green colored bg</align></color>"));
+
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_object_text_set(label5, _("<color=#B3101FFF><align=center>pastel pink colored bg</align></color>"));
+
+       return layout;
+}
+
+
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void label_color_styles_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Color Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_labels(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/label_ellipsis.c b/live.viewer/dbox.app/src/label_ellipsis.c
new file mode 100644 (file)
index 0000000..dc9043d
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "label.h"
+#include "label_ellipsis.h"
+
+/*********************************************************
+ label
+ ********************************************************/
+static Evas_Object* _create_labels(Evas_Object* parent)
+{
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/label");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *label;
+       label = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label1", label);
+       elm_object_text_set(label, _("<font_size=24>If the string length exceeds the width</font_size>"));
+       elm_label_ellipsis_set(label, EINA_TRUE);
+       elm_label_wrap_width_set(label, 300);
+
+       Evas_Object *label2;
+       label2 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label2", label2);
+       elm_object_text_set(label2, _("<font_size=24>If the string length exceeds the width of the</font_size>"));
+       elm_label_ellipsis_set(label2, EINA_TRUE);
+       elm_label_wrap_width_set(label2, 300);
+
+       Evas_Object *label3;
+       label3 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label3", label3);
+       elm_object_text_set(label3, _("<font_size=24>If the string length exceeds the width of the widget, then the string will be ellipsised by label. but it's a exprimental api and very slow function.</font_size>"));
+       elm_label_wrap_width_set(label3, 300);
+       elm_label_ellipsis_set(label3, EINA_TRUE);
+
+       Evas_Object *label4;
+       label4 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label4", label4);
+       elm_object_text_set(label4, _("<font_size=24>If the string length exceeds the width of the widget, then the string will be ellipsised by label. but it's a exprimental api and very slow function.</font_size>"));
+       elm_label_wrap_width_set(label4, 300);
+       elm_label_ellipsis_set(label4, EINA_TRUE);
+
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_object_text_set(label5, _("If the string length exceeds the width of the widget, then the string will be ellipsised by label. However, it's a exprimental api and very slow function. Ellipsis feature supports multiline texts. Programmers should not misuse multiline ellipsis. It's slow a function."));
+       elm_label_wrap_width_set(label5, 300);
+       elm_label_ellipsis_set(label5, EINA_TRUE);
+
+       /*
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ");
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_style_set(label5, "extended/wrap_ellipsis");
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_label_line_wrap_set(label5, 1);
+       elm_object_text_set(label5, _("If the string length exceeds the width of the label, the font size is changed automatically. kdbGetKey(file/contact/display_order) failed(Resource temporarily unavailable) kdb Get(file/contact/display_order) failed ERR:e_dbus e_dbus_signal.c:71 cb_name_owner() Error: org.freedesktop.DBus.Errore [TAPI Library] [PID: 2384, tapi_send_request:170]  D-Bus API failure: errCode[0 [ 1198.769543] max8998 4-0066: Power Button Pushed (0x80) [keyrouter][DeliverDeviceKeyEvents] Non-grabbed key! Deliver KeyPress (keycode: [dix] Could not init font path element /usr/share/fonts/X11/cyrillic, removing from list!"));
+       elm_label_wrap_width_set(label5, 300);
+       elm_label_wrap_height_set(label5, 120);
+       elm_label_ellipsis_set(label5, 1);
+       //elm_object_style_set(label5, "extended/wrap_ellipsis");
+       elm_label_background_color_set(label5, 220, 227, 229, 255);
+       */
+
+       return layout;
+}
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void label_ellipsis_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Ellipsis"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_labels(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/label_linebreakmodes.c b/live.viewer/dbox.app/src/label_linebreakmodes.c
new file mode 100644 (file)
index 0000000..ed5e4ae
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "label.h"
+#include "label_linebreakmodes.h"
+
+/*********************************************************
+ label
+ ********************************************************/
+static Evas_Object* _create_labels(Evas_Object* parent)
+{
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/label");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *label;
+       label = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label1", label);
+       elm_object_text_set(label, _("<align=left>left aligned label</align>"));
+
+       Evas_Object *label2;
+       label2 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label2", label2);
+       elm_object_text_set(label2, _("<align=center>center aligned label<align>"));
+
+       Evas_Object *label3;
+       label3 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label3", label3);
+       elm_label_wrap_width_set(label3, 100);
+       elm_object_text_set(label3, _("<align=right>right aligned label</align>"));
+
+       Evas_Object *label4;
+        label4 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label4", label4);
+       elm_label_wrap_width_set(label4, 100);
+       elm_object_text_set(label4, _("<align=left>left aligned label</align>"));
+
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_label_line_wrap_set(label5, EINA_TRUE);
+       elm_label_wrap_width_set(label5, 100);
+       elm_object_text_set(label5, _("<align=left>label changes line automatically if label wrap width is set and the text length is bigger than the width of the label</align>"));
+
+       /*
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ");
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_label_wrap_width_set(label5, 100);
+       elm_object_style_set(label5, "extended/label_wordwrap");
+       elm_object_text_set(label5, _("label changes line automatically if label wrap width is set and the text length is bigger than the width of the label."));
+       elm_label_text_align_set(label5, "left");
+       elm_label_background_color_set(label5, 220, 227, 229, 255);
+       */
+
+       return layout;
+}
+
+
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void label_linebreak_modes_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout_inner, *scroller;
+       struct appdata *ad  = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Linebreakmodes"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_labels(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+}
diff --git a/live.viewer/dbox.app/src/label_slide.c b/live.viewer/dbox.app/src/label_slide.c
new file mode 100644 (file)
index 0000000..cd24e88
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "label.h"
+#include "label_slide.h"
+
+/*********************************************************
+ label
+ ********************************************************/
+
+
+static void
+_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *label = (Evas_Object *)data;
+       const char* text;
+       text = elm_object_text_get(obj);
+       if (strcmp(text,"Start Sliding") == 0)
+       {
+               while (label != NULL)
+                       {
+                               label = evas_object_data_get(label, "next_label");
+                               elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_AUTO);
+                               elm_label_slide_go(label);
+                       }
+               elm_object_text_set(obj, "Stop Sliding");
+       }
+       else
+       {
+               while (label != NULL)
+                       {
+                               label = evas_object_data_get(label, "next_label");
+                               elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_NONE);
+                               elm_label_slide_go(label);
+                       }
+               elm_object_text_set(obj, "Start Sliding");
+       }
+}
+
+static Evas_Object* _create_labels(Evas_Object* parent)
+{
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/label_slide");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *label_long_5sec;
+       label_long_5sec = elm_label_add(layout);
+       elm_object_style_set(label_long_5sec, "slide_long");
+       elm_object_text_set(label_long_5sec, "<color=#4D554BFF>This is a sample long text for sliding demo in elm label.</color>");
+       elm_object_part_content_set(layout, "swallow_label_1", label_long_5sec);
+       elm_label_wrap_width_set(label_long_5sec, 100);
+       elm_label_slide_duration_set(label_long_5sec, 5);
+       elm_label_slide_mode_set(label_long_5sec, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       Evas_Object *label_long_10sec;
+       label_long_10sec = elm_label_add(layout);
+       elm_object_style_set(label_long_10sec, "slide_long");
+       elm_object_text_set(label_long_10sec, "<color=#4D554BFF>This is a sample long text for sliding demo in elm label.</color>");
+       elm_object_part_content_set(layout, "swallow_label_2", label_long_10sec);
+       elm_label_wrap_width_set(label_long_10sec, 100);
+       elm_label_slide_duration_set(label_long_10sec, 10);
+       elm_label_slide_mode_set(label_long_10sec, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       Evas_Object *label_short;
+       label_short = elm_label_add(layout);
+       elm_object_style_set(label_short, "slide_short");
+       elm_object_text_set(label_short, "<color=#4D554BFF>This is a sample long text for sliding demo in elm label.</color>");
+       elm_object_part_content_set(layout, "swallow_label_3", label_short);
+       elm_label_wrap_width_set(label_short, 100);
+       elm_label_slide_duration_set(label_short, 5);
+       elm_label_slide_mode_set(label_short, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       Evas_Object *label_bounce;
+       label_bounce = elm_label_add(layout);
+       elm_object_style_set(label_bounce, "slide_bounce");
+       elm_object_text_set(label_bounce, "<color=#4D554BFF>This is a sample long text for sliding demo in elm label.</color>");
+       elm_object_part_content_set(layout, "swallow_label_4", label_bounce);
+       elm_label_wrap_width_set(label_bounce, 100);
+       elm_label_slide_duration_set(label_bounce, 3);
+       elm_label_slide_mode_set(label_bounce, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       Evas_Object *label_rollShort;
+       label_rollShort = elm_label_add(layout);
+       elm_object_style_set(label_rollShort, "slide_roll");
+       elm_object_text_set(label_rollShort, "<color=#4D554BFF>This is a sample roll style.</color>");
+       elm_object_part_content_set(layout, "swallow_label_5", label_rollShort);
+       elm_label_wrap_width_set(label_rollShort, 100);
+       elm_label_slide_mode_set(label_rollShort, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       Evas_Object *label_rollLong;
+       label_rollLong = elm_label_add(layout);
+       elm_object_style_set(label_rollLong, "slide_roll");
+       elm_object_text_set(label_rollLong, "<color=#4D554BFF>This is a sample long text for slide roll style demo in elm label.</color>");
+       elm_object_part_content_set(layout, "swallow_label_6", label_rollLong);
+       elm_label_wrap_width_set(label_rollLong, 100);
+       elm_label_slide_mode_set(label_rollLong, ELM_LABEL_SLIDE_MODE_ALWAYS);
+
+       evas_object_data_set(label_long_5sec, "next_label", label_long_10sec);
+       evas_object_data_set(label_long_10sec, "next_label", label_short);
+       evas_object_data_set(label_short, "next_label", label_bounce);
+       evas_object_data_set(label_bounce, "next_label", label_rollShort);
+       evas_object_data_set(label_rollShort, "next_label", label_rollLong);
+
+       Evas_Object *btn;
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, "Start Sliding");
+       evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, label_long_5sec);
+       elm_object_part_content_set(layout, "swallow_btn", btn);
+
+       return layout;
+}
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void label_slide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Slide Text"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_labels(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/label_textstyles.c b/live.viewer/dbox.app/src/label_textstyles.c
new file mode 100644 (file)
index 0000000..ebfcf76
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "label.h"
+#include "label_textstyles.h"
+
+/*********************************************************
+ label
+ ********************************************************/
+static Evas_Object* _create_labels(Evas_Object* parent)
+{
+       Evas_Object* layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/label");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *label;
+       label = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label1", label);
+       elm_object_text_set(label, _("<font_size=15><align=center>fontsize is set to 15</align></font_size>"));
+
+       Evas_Object *label2;
+       label2 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label2", label2);
+       elm_object_text_set(label2, _("<font_size=20><align=center>fontsize is set to 20</align></font_size>"));
+
+       Evas_Object *label3;
+       label3 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label3", label3);
+       elm_object_text_set(label3, _("<font_size=25><align=center>fontsize is set to 25</align></font_size>"));
+
+       Evas_Object *label4;
+       label4 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label4", label4);
+       elm_object_text_set(label4, _("<font_size=30><align=center>fontsize is set to 30</align></font_size>"));
+
+       Evas_Object *label5;
+       label5 = elm_label_add(layout);
+       elm_object_part_content_set(layout, "label5", label5);
+       elm_object_text_set(label5, _("<font_size=40><align=center>fontsize is set to 40</align></font_size>"));
+
+       return layout;
+}
+
+static Evas_Object* _create_scroller(Evas_Object* parent)
+{
+       Evas_Object* scroller = elm_scroller_add(parent);
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+void label_text_styles_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Text Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_labels(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/layout.c b/live.viewer/dbox.app/src/layout.c
new file mode 100644 (file)
index 0000000..87ff917
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "layout.h"
+
+/*********************************************************
+ SearchBar Normal
+ ********************************************************/
+
+static struct _menu_item menu_its[] = {
+       { "Nocontent Styles", layout_nocontent_styles_cb },
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if(ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while (menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+
+void layout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Layout"), NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/layout_nocontent_styles.c b/live.viewer/dbox.app/src/layout_nocontent_styles.c
new file mode 100644 (file)
index 0000000..35bfe2f
--- /dev/null
@@ -0,0 +1,337 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "layout.h"
+
+static Evas_Object *searchbar_layout;
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_focus_get(data)) {
+               if (elm_entry_is_empty(obj)) {
+                       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+               }
+               else
+                       elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       }
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+}
+
+static void _focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+       elm_object_signal_emit(data, "cancel,in", "");
+}
+
+static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
+       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+}
+
+static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_entry_entry_set(data, "");
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       const char* text;
+       evas_object_hide(obj);
+       elm_object_signal_emit(searchbar_layout, "cancel,out", "");
+       text = elm_entry_entry_get(data);
+       if (text != NULL && strlen(text) > 0)
+               elm_entry_entry_set(data, NULL);
+       elm_object_focus_set(data, EINA_FALSE);
+}
+
+static void _searchsymbol_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+       printf("\n[Search Bar] SearchSymbol Callback Called\n");
+}
+
+static void _google_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("google clicked\n");
+}
+
+static void _create_searchbar(void *data)
+{
+       Evas_Object *entry, *cancel_btn;
+       Evas_Object *layout = data;
+
+       searchbar_layout = elm_layout_add(layout);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_part_text_set(entry, "elm.guide", "Search");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, searchbar_layout);
+       evas_object_smart_callback_add(entry, "focused", _focused_cb, searchbar_layout);
+       evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, searchbar_layout);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+       elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       //in case cancel button is required add the following code
+       cancel_btn = elm_button_add(searchbar_layout);
+       elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
+       elm_object_style_set(cancel_btn, "searchbar/default");
+       elm_object_text_set(cancel_btn, "Cancel");
+       elm_object_focus_allow_set(cancel_btn, EINA_FALSE);
+       elm_object_signal_emit(searchbar_layout, "cancel,show", "");
+       evas_object_smart_callback_add(cancel_btn, "clicked", _cancel_clicked_cb, entry);
+
+       elm_object_signal_callback_add(searchbar_layout, "elm,action,click", "", _searchsymbol_clicked_cb, entry);
+
+       evas_object_show(searchbar_layout);
+
+}
+
+/* nocontents/search style of layout */
+static void nocontents_search_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout, *lay;
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       /* Create elm_layout with nocontents/search style */
+       lay = elm_layout_add (ad->nf);
+       elm_layout_theme_set(lay, "layout", "nocontents", "search");
+       elm_object_part_text_set (lay, "elm.text", _("No results found"));
+
+       /* Search(without google) view layout */
+       layout = elm_layout_add (ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+
+       _create_searchbar(layout);
+
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       elm_object_part_content_set(layout, "elm.swallow.content", lay);
+       elm_naviframe_item_push(ad->nf, _("Nocontents search"), NULL, NULL,layout, NULL);
+}
+
+/* nocontents/search style of layout displaying a button*/
+static void nocontents_google_search_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout, *lay, *custom_area, *btn, *icon;
+       char buf[255] = {0,};
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       _create_searchbar(ad);
+
+       /* Create google button */
+       custom_area = elm_layout_add (ad->nf);
+       elm_layout_file_set (custom_area, ELM_DEMO_EDJ, "elmdemo-test/nocontents/search_google");
+       evas_object_size_hint_weight_set (custom_area, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn = elm_button_add (ad->nf);
+       elm_object_style_set (btn, "searchbar/default");
+       icon = elm_image_add (ad->nf);
+       snprintf (buf, sizeof(buf), "%s/30_SmartSearch_google_icon.png", ICON_DIR);
+       elm_image_file_set (icon, buf, NULL);
+       elm_image_resizable_set (icon, 1, 1);
+       elm_object_content_set (btn, icon);
+       elm_object_text_set (btn, _("Search by Google"));
+       evas_object_smart_callback_add (btn, "clicked", _google_clicked_cb, ad);
+       elm_object_part_content_set (custom_area, "buttons", btn);
+
+       /* Create layout and set the theme as nocontents/search */
+       lay = elm_layout_add (ad->nf);
+       elm_layout_theme_set(lay, "layout", "nocontents", "search");
+       elm_object_part_text_set (lay, "elm.text", _("No search result"));
+       elm_object_part_content_set(lay, "custom", custom_area);
+
+       /* Search(with google) view layout */
+       layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+       elm_object_part_content_set(layout, "elm.swallow.content", lay);
+       elm_naviframe_item_push(ad->nf, _("Nocontents google search"), NULL, NULL, layout, NULL);
+}
+
+static Eina_Bool _access_action_cb(void *data, Evas_Object *obj,
+                               Elm_Access_Action_Info *action_info)
+{
+       if (!action_info) return EINA_FALSE;
+
+       printf("action type: %d, action by: %d, x: %d, y: %d, mouse_type: %d\n",
+                       action_info->action_type, action_info->action_by,
+                       action_info->x, action_info->y, action_info->mouse_type);
+
+       return EINA_TRUE;
+}
+
+static void _button_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       printf("\n button clicked \n");
+}
+
+static void _no_content_layout_create(void* data, char *name, char *group, Eina_Bool helptext)
+{
+       Evas_Object *layout, *lay, *btn, *icon;
+       char buf[128];
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       /* Full view layout */
+       layout = elm_layout_add (ad->nf);
+       elm_layout_file_set (layout, ELM_DEMO_EDJ, group);
+       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);
+
+       /* Create elm_layout and set its style as nocontents/text */
+       lay = elm_layout_add (layout);
+       if (!lay) return;
+       elm_layout_theme_set(lay, "layout", "nocontents", "default");
+       evas_object_size_hint_weight_set (lay, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(lay, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       icon = elm_image_add(lay);
+       snprintf(buf, sizeof(buf), "%s/00_nocontents_text.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_object_part_content_set(lay, "nocontents.image", icon);
+
+       snprintf(buf, sizeof(buf), "%s",_("No Items"));
+
+       elm_object_part_text_set(lay, "elm.text", buf);
+       elm_layout_signal_emit(lay, "text,disabled", "");
+
+       if (helptext) {
+               char buf1[4028];
+               snprintf(buf1, sizeof(buf1), "%s",_("No Contents help text. This part is for hints and useful information for users. "
+                               "No Contents help text. This part is for hints and useful information for users."));
+               elm_object_part_text_set(lay, "elm.help.text", buf1);
+               elm_layout_signal_emit(lay, "align.center", "elm");
+
+               btn = elm_button_add(lay);
+               elm_object_style_set(btn, "style1");
+               elm_object_text_set(btn, "Text button");
+               evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, NULL);
+
+               elm_object_part_content_set(lay, "swallow_area", btn);
+       }
+
+       elm_object_part_content_set (layout, "contents", lay);
+       elm_naviframe_item_push(ad->nf, _(name), NULL, NULL,layout, NULL);
+
+       Eina_List *l = NULL;
+       Evas_Object *po, *ao;
+       po = (Evas_Object *)edje_object_part_object_get
+                               (elm_layout_edje_get(layout), "access");
+
+       /* Other toolkit (Dali, OSP, Web, etc.) would refer to the following lines to convey access action */
+       ao = elm_access_object_register(po, layout);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "screen reader test");
+       l = eina_list_append(l, ao);
+       elm_object_focus_custom_chain_set(layout, l);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_HIGHLIGHT,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_UNHIGHLIGHT,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_HIGHLIGHT_PREV,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_ACTIVATE,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_UP,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_DOWN,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_READ,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_BACK,
+                                                       _access_action_cb, NULL);
+
+       elm_access_action_cb_set(ao, ELM_ACCESS_ACTION_SCROLL,
+                                                       _access_action_cb, NULL);
+}
+
+static void nocontents_full_without_helptext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _no_content_layout_create(data, "Nocontents full", "elmdemo-test/nocontents/full",
+                                                               EINA_FALSE);
+}
+
+static void nocontents_full_with_helptext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _no_content_layout_create(data, "Nocontents helptext full", "elmdemo-test/nocontents_helptext/full",
+                                                               EINA_TRUE);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+void layout_nocontent_styles_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+       Evas_Object *list;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+
+       elm_list_item_append(list, "Nocontents search", NULL, NULL, nocontents_search_cb, ad);
+       elm_list_item_append(list, "Nocontents google search", NULL, NULL, nocontents_google_search_cb, ad);
+       elm_list_item_append(list, "Nocontents full without Help Text", NULL, NULL, nocontents_full_without_helptext_cb, ad);
+       elm_list_item_append(list, "Nocontents full with Help Text", NULL, NULL, nocontents_full_with_helptext_cb, ad);
+
+       elm_list_go(list);
+       elm_naviframe_item_push(ad->nf, _("Nocontent Styles"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/list.c b/live.viewer/dbox.app/src/list.c
new file mode 100644 (file)
index 0000000..baf2fb0
--- /dev/null
@@ -0,0 +1,34 @@
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+extern char *genlist_demo_names[];
+
+void list_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       int i;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", NULL, NULL);
+       for (i = 0; i < 100 ; i++) {
+               Evas_Object *icon = elm_check_add(obj);
+               elm_object_style_set(icon, "default/genlist");
+               evas_object_repeat_events_set(icon, EINA_TRUE);
+               evas_object_propagate_events_set(icon, EINA_FALSE);
+
+               Evas_Object *end = elm_button_add(obj);
+               elm_object_text_set(end, "Resend");
+               evas_object_propagate_events_set(end, EINA_FALSE);
+
+               elm_list_item_append(list, genlist_demo_names[i%NUM_OF_GENLIST_DEMO_NAMES], icon, end, NULL, ad);
+       }
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("List"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/main.c b/live.viewer/dbox.app/src/main.c
new file mode 100644 (file)
index 0000000..b1d854d
--- /dev/null
@@ -0,0 +1,349 @@
+#include <Elementary.h>
+
+#include <Ecore_X.h>
+
+#include <app.h>
+#include <dlog.h>
+#include <vconf.h>
+
+#include <dynamicbox.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_provider_app.h>
+
+#include "debug.h"
+
+#include "entry.h"
+#include "util.h"
+#include "window.h"
+
+struct dynamicbox_data {
+       Evas_Object *win;
+       Evas_Object *bg;
+       Evas_Object *conformant;
+       char *content;
+};
+
+extern int htt_main(Evas_Object *win);
+
+static int dbox_create(const char *id, const char *content, int w, int h, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+       Evas_Object *tmp_parent;
+
+       dbox_data = calloc(1, sizeof(*dbox_data));
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       tmp_parent = dynamicbox_get_evas_object(id, 0);
+       if (!tmp_parent) {
+               free(dbox_data);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       dbox_data->win = elm_win_add(tmp_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+       evas_object_del(tmp_parent);
+       if (!dbox_data->win) {
+               free(dbox_data);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       dbox_data->content = strdup(content);
+       if (!dbox_data->content) {
+               evas_object_del(dbox_data->win);
+               dbox_data->win = NULL;
+               free(dbox_data);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       evas_object_resize(dbox_data->win, w, h);
+       evas_object_show(dbox_data->win);
+
+       dbox_data->bg = elm_bg_add(dbox_data->win);
+       if (dbox_data->bg) {
+               evas_object_resize(dbox_data->bg, w, h);
+               //elm_win_resize_object_add(dbox_data->win, dbox_data->bg);
+               elm_bg_color_set(dbox_data->bg, 255, 0, 0);
+               evas_object_show(dbox_data->bg);
+       }
+
+       htt_main(dbox_data->win);
+
+       DbgPrint("Resized to %dx%d\n", w, h);
+
+       dynamicbox_provider_app_set_data(id, dbox_data);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static int dbox_resize(const char *id, int w, int h, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       evas_object_resize(dbox_data->win, w, h);
+       evas_object_resize(dbox_data->bg, w, h);
+       evas_object_resize(dbox_data->conformant, w, h);
+
+       DbgPrint("Resized to %dx%d\n", w, h);
+
+       return 0;
+}
+
+static int dbox_destroy(const char *id, int reason, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+       dynamicbox_provider_app_set_data(id, NULL);
+
+       evas_object_del(dbox_data->win);
+       free(dbox_data->content);
+       free(dbox_data);
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int gbar_create(const char *id, int w, int h, double x, double y, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int gbar_resize_move(const char *id, int w, int h, double x, double y, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int gbar_destroy(const char *id, int reason, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+       /**
+        * @TODO:
+        */
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_update(const char *id, const char *content, int force, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+
+static int dbox_clicked(const char *id, const char *event, double x, double y, double timestamp, void *data) /**< If viewer calls dynamicbox_click function, this event callback will be called */
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int dbox_script_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t info, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int dbox_pause(const char *id, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static int dbox_resume(const char *id, void *data)
+{
+       struct dynamicbox_data *dbox_data;
+
+       dbox_data = dynamicbox_provider_app_data(id);
+       if (!dbox_data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /**
+        * @TODO:
+        */
+       return 0;
+}
+
+static bool app_create(void *data)
+{
+       /**
+        * @TODO:
+        */
+       return true;
+}
+
+static void app_terminate(void *data)
+{
+       if (window_list_destroy() != 0) {
+       }
+       /**
+        * @TODO:
+        */
+}
+
+static void app_pause(void *data)
+{
+       /**
+        * @TODO:
+        */
+       DbgPrint("Paused\n");
+}
+
+static void app_resume(void *data)
+{
+       /**
+        * @TODO:
+        */
+       DbgPrint("Resumed\n");
+}
+
+static void _app_control(app_control_h service, void *data)
+{
+       char *op = NULL;
+
+       app_control_get_operation(service, &op);
+       if (op && strcmp(op, "http://tizen.org/appcontrol/operation/main") == 0) {
+               if (dynamicbox_provider_app_init(service, data) == 0) {
+                       DbgPrint("initiated");
+               } else {
+                       // Do others
+               }
+       }
+       /**
+        * @TODO:
+        */
+}
+
+static void app_language_changed(void *data)
+{
+       /**
+        * @TODO:
+        */
+}
+
+static void provider_connected(void *data)
+{
+       dynamicbox_provider_app_manual_control(1);
+}
+
+int main(int argc, char *argv[])
+{
+       /**
+        * \note
+        * To allocate this table in the stack.
+        * Access this from callbacks.
+        */
+       struct dynamicbox_provider_event_callback table = {
+               .dbox = {
+                       .create = dbox_create,
+                       .resize = dbox_resize,
+                       .destroy = dbox_destroy,
+               },
+
+               .gbar = {
+                       .create = gbar_create,
+                       .resize_move = gbar_resize_move,
+                       .destroy = gbar_destroy,
+               },
+
+               .update = dbox_update,
+               .script_event = dbox_script_event,
+               .clicked = dbox_clicked,
+
+               .pause = dbox_pause,
+               .resume = dbox_resume,
+
+               .connected = provider_connected,
+               .disconnected = NULL,
+
+               .data = NULL,
+       };
+
+       setenv("ELM_ENGINE", "gl", 1);
+
+       app_event_callback_s app_callback = {
+               .create = app_create,
+               .terminate = app_terminate,
+               .pause = app_pause,
+               .resume = app_resume,
+               .app_control = _app_control,
+               .language_changed = app_language_changed,
+               .low_memory = NULL,
+               .low_battery = NULL,
+               .device_orientation = NULL,
+               .region_format_changed = NULL,
+       };
+
+       return app_efl_main(&argc, &argv, &app_callback, &table);
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.app/src/map.c b/live.viewer/dbox.app/src/map.c
new file mode 100644 (file)
index 0000000..7a01ce4
--- /dev/null
@@ -0,0 +1,840 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#include <stdlib.h>
+#include <Elementary.h>
+#ifndef DESKTOP
+       #include <location.h>
+       #include <vconf.h>
+       #include <utilX.h>
+       #include <sensor.h>
+#endif
+#include "elmdemo_util.h"
+#include "elmdemo_test.h"
+
+// FIXME: This is temporary. Each App. should make it's own UA.
+#define UA_TIZEN_WEB \
+       "Mozilla/5.0 (Linux; Tizen 2.1; SAMSUNG GT-I8800) AppleWebKit/537.3 (KHTML, like Gecko) Version/2.1 Mobile Safari/537.3"
+
+#define ENGINE_CHANGE               "Change engine"
+#define SOURCE_CHANGE               "Change source"
+#define GET_ADDRESS                 "Get address"
+#define ICON_ADD                    "Icon to center"
+#define CONTENT_ADD                 "Content to center"
+#define GOTO_ADDRESS                "Go to address"
+#define SHOW_SAMSUNG                "Show Samsung HQ"
+#define BRINGIN_SEOUL               "Bring in Seoul"
+
+#define NAVI_MY_POSITION            "My Position"
+#define NAVI_COMPASS                "Compass"
+
+#define MAP_MAPNIK                  "Mapnik"
+#define MAP_OSMARENDER              "Osmarender"
+#define MAP_CYCLEMAP                "CycleMap"
+#define MAP_MAPQUEST                "MaqQuest"
+#define MAP_MAPQUESTAERIAL          "MaqQuest Open Aerial"
+#define MAP_MODULE_GOOGLE_STREET    "Google Street"
+#define MAP_MODULE_GOOGLE_SATELLITE "Google Satellite"
+#define MAP_MODULE_DECARTA_NORMAL   "Decarta Normal"
+#define MAP_MODULE_BING_ROAD        "Bing Road"
+#define MAP_MODULE_BING_AERIAL      "Bing Aerial"
+#define MAP_MODULE_BING_HYBRID      "Bing Hybrid"
+
+#define NAME_ENTRY_TEXT             "Enter freeform address"
+
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+
+typedef struct _Map_App_Data
+{
+   struct appdata *ad;
+
+   Evas_Object *box;
+#ifndef DESKTOP
+   LocationObject *loc;
+#endif
+   Evas_Object *txt_popup;
+   Evas_Object *capture_popup;
+   Evas_Object *list_popup;
+
+   Evas_Object *map;
+   Elm_Map_Name *name;
+   Elm_Map_Overlay *ovl;
+   Elm_Map_Overlay *route_from, *route_to;
+   Elm_Map_Route *route;
+
+   Evas_Object *sav_obj;
+   int sensor_handle;
+   Ecore_Timer *sensor_timer;
+   unsigned long seid;
+   unsigned long suid;
+   double from_degree;
+   double old_to_degree;
+   double to_degree;
+   Ecore_Animator *rotate_animator;
+   Eina_Bool loaded;
+} Mad;
+
+Elm_Map_Overlay *clas;
+
+static void
+_dismissed_cb(void *data __UNUSED__, Evas_Object *obj , void *event __UNUSED__)
+{
+   if (!obj) return;
+   evas_object_del(obj);
+}
+
+#ifndef DESKTOP
+static Eina_Bool _add_proxy (void)
+{
+   char *proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
+   if (!proxy || (0 == strcmp(proxy, "")))
+     {
+        fprintf(stdout, "No Proxy\n");
+        return EINA_TRUE;
+     }
+   fprintf(stdout, "Current proxy: %s\n", proxy);
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_get_network_state()
+{
+   int net_conf;
+   int net_status;
+   vconf_get_int(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND, &net_conf);
+   vconf_get_int(VCONFKEY_NETWORK_STATUS, &net_status);
+   fprintf(stdout, "current network configuration (%d), Network status (%d)\n",
+           net_conf, net_status);
+
+   if (net_conf == 0 && net_status == VCONFKEY_NETWORK_OFF)
+     {
+        fprintf(stderr, "No wifi and No 3G\n");
+        return EINA_FALSE;
+     }
+   else
+     {
+        fprintf(stdout, "Network is available\n");
+        char *ip = vconf_get_str(VCONFKEY_NETWORK_IP);
+        fprintf(stdout, "Current ip: %s\n", ip);
+        if (!_add_proxy())
+          {
+             fprintf(stderr, "Add proxy failed\n");
+             return EINA_FALSE;
+          }
+     }
+   return EINA_TRUE;
+}
+
+static void
+_capture_popup_end_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Mad *mad = data;
+   evas_object_hide(obj);
+   if (mad->sav_obj)
+     {
+        evas_object_del(mad->sav_obj);
+        mad->sav_obj = NULL;
+     }
+}
+
+static void
+_capture(void *data, Evas_Object *obj, void *event_info)
+{
+   int x;
+   int y;
+   int width;
+   int height;
+   Ecore_X_Window x_win;
+   XImage *img;
+   Display *display;
+   char buf[PATH_MAX];
+   Evas_Object *popup;
+
+   Mad *mad = data;
+   if (!mad->capture_popup) mad->capture_popup = elm_popup_add(mad->map);
+   popup = mad->capture_popup;
+   if (mad->loaded)
+     {
+        if (!mad->sav_obj)
+           mad->sav_obj = evas_object_image_add(evas_object_evas_get(mad->map));
+        x_win = elm_win_xwindow_get(mad->sav_obj);
+        if (!x_win) return;
+
+        evas_object_geometry_get(mad->map, &x, &y, &width, &height);
+        printf("\nMap Geometry: x = %d y = %d w1 =%d h1 =%d\n", x, y, width, height);
+
+        display = XOpenDisplay(NULL);
+        img = XGetImage(display, x_win, x, y, width, height, XAllPlanes(), ZPixmap);
+        if (!img) return;
+        if (!img->data) return;
+
+        evas_object_image_size_set(mad->sav_obj, width, height);
+        evas_object_image_data_set(mad->sav_obj, img->data);
+        evas_object_image_filled_set(mad->sav_obj, EINA_TRUE);
+        snprintf(buf, sizeof(buf), "%s/capturemap.png", ICON_DIR);
+
+        if (!evas_object_image_save(mad->sav_obj, buf, NULL, "quality=100 compress=1"))
+           printf("failed to save image \n");
+        else
+           printf("Saved scene as '%s'\n", buf);
+        elm_object_style_set(popup, "content_expand");
+        elm_object_part_text_set(popup, "title,text", "Image saved");
+        elm_object_content_set(popup, mad->sav_obj);
+        evas_object_resize(mad->sav_obj, 500, 500);
+        evas_object_size_hint_min_set(mad->sav_obj, 500, 500);
+        evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        evas_object_smart_callback_add(popup, "block,clicked",
+                                       _capture_popup_end_cb, mad);
+     }
+   else
+     {
+        evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        elm_object_text_set(popup, "map not loaded yet,try again !");
+        elm_popup_timeout_set(popup, 3.0);
+        evas_object_smart_callback_add(popup, "timeout",
+                                       _capture_popup_end_cb, mad);
+        evas_object_smart_callback_add(popup, "block,clicked",
+                                       _capture_popup_end_cb, mad);
+     }
+   evas_object_show(popup);
+}
+
+#else
+static void _capture(void *data, Evas_Object *obj, void *event_info)
+{
+       fprintf(stderr, "ERR: Cannot support capturing\n");
+       return;
+}
+#endif
+
+static void
+_map_save_state(void* data)
+{
+   if (!data) return;
+
+   //int zoom;
+   double lon, lat;
+   //const char *src_name;
+   Mad *mad = data;
+   if (!mad->map) return;
+
+   elm_map_region_get(mad->map, &lon, &lat);
+   //zoom = elm_map_zoom_get(mad->map);
+   elm_map_zoom_get(mad->map);
+   //src_name = elm_map_source_get(mad->map, ELM_MAP_SOURCE_TYPE_TILE);
+   elm_map_source_get(mad->map, ELM_MAP_SOURCE_TYPE_TILE);
+
+   //FIXME: using vconf to save!!!
+   //printf("Saved, Zoom: %d, Longitude: %lf, Latitude:%lf\n", zoom, lon, lat);
+}
+
+static void
+_map_load_state(void *data)
+{
+   if (!data) return;
+
+#if 0 // FIXME: using vconf to revoke
+   Mad *mad = data;
+   int zoom = 15;
+   double lon = 127.05286;
+   double lat = 37.25768;
+   char *src_name;
+
+
+     {
+        elm_map_region_show(mad->map, lon, lat);
+        printf(" lon: %lf, lat: %lf", lon, lat);
+     }
+
+     {
+        if (src_name)
+          {
+             elm_map_source_set(mad->map, ELM_MAP_SOURCE_TYPE_TILE, src_name);
+             printf(" source name: %s", src_name);
+             free(src_name);
+          }
+        else fprintf(stderr, "src_name is NULL\n");
+     }
+   printf(", State is Loded\n");
+#endif
+}
+
+static Evas_Object *
+_group_icon_get(Evas_Object *obj)
+{
+   Evas_Object *icon = elm_image_add(obj);
+   elm_image_file_set(icon, ICON_DIR"/00_brightness_right.png", NULL);
+   evas_object_show(icon);
+   return icon;
+}
+
+static Evas_Object *
+_icon_get(Evas_Object *obj)
+{
+   Evas_Object *icon = elm_image_add(obj);
+   elm_image_file_set(icon, ICON_DIR"/logo.png", NULL);
+   evas_object_show(icon);
+   return icon;
+}
+
+static void
+_response_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   evas_object_del(data);
+}
+
+static void
+_txt_popup_show(Mad *mad, const char *text)
+{
+   if (!mad->txt_popup)
+     {
+        Evas_Object *btn;
+        mad->txt_popup = elm_popup_add(mad->box);
+        evas_object_size_hint_weight_set(mad->txt_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+        btn = elm_button_add(mad->txt_popup);
+        elm_object_text_set(btn, "Close");
+        elm_object_part_content_set(mad->txt_popup, "button1", btn);
+        evas_object_smart_callback_add(btn, "clicked", _response_cb, mad->txt_popup);
+     }
+   elm_object_text_set(mad->txt_popup, text);
+   evas_object_show(mad->txt_popup);
+}
+
+static void
+_route_loaded(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   if (!data) return;
+
+   Mad *mad = data;
+
+   double d;
+   const char *w, *n;
+   char buf[PATH_MAX];
+
+   d = elm_map_route_distance_get(mad->route);
+   sprintf(buf, "route distance = %lf km", d);
+
+   w = elm_map_route_waypoint_get(mad->route);
+   if (w) fprintf(stdout, "[waypoints]\n%s\n", w);
+
+   n = elm_map_route_node_get(mad->route);
+   if (n) fprintf(stdout, "[nodes]\n%s\n", n);
+
+   _txt_popup_show(mad, buf);
+}
+
+static void
+_name_loaded(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   if (!data) return;
+   Mad *mad = data;
+   if (!mad->name) return;
+
+   double lon, lat;
+   const char *addr;
+
+   elm_map_name_region_get(mad->name, &lon, &lat);
+   elm_map_zoom_set(mad->map, 18);
+   elm_map_region_show(mad->map, lon, lat);
+
+   addr = elm_map_name_address_get(mad->name);
+   _txt_popup_show(mad, addr);
+}
+
+static void
+_clicked_double(void *data, Evas_Object *obj, void *event)
+{
+   if (!data) return;
+
+   double lon, lat;
+   Mad *mad = data;
+   if (elm_map_zoom_get(mad->map) < 5) return;
+
+   Evas_Event_Mouse_Down *down = event;
+   elm_map_canvas_to_region_convert(obj, down->canvas.x, down->canvas.y,
+                                    &lon, &lat);
+   elm_map_region_bring_in(obj, lon, lat);
+   int zoom = elm_map_zoom_get(obj);
+   elm_map_zoom_set(obj, zoom+1);
+   printf("clicked,double, lon:%lf lat:%lf (%d %d), zoom: %d\n", lon, lat,
+                  down->canvas.x, down->canvas.y, zoom+1);
+}
+
+static void _on_load(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("Map loaded\n");
+   Mad *mad = data;
+   if (!mad->loaded) mad->loaded = EINA_TRUE;
+}
+
+static void
+_longpressed(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   Evas_Event_Mouse_Down *down = ei;
+   double lon, lat, flon, flat, tlon, tlat;
+   elm_map_canvas_to_region_convert(obj, down->canvas.x, down->canvas.y,
+                                    &lon, &lat);
+   if (!clas)
+     {
+        clas = elm_map_overlay_class_add(obj);
+        elm_map_overlay_icon_set(clas, _group_icon_get(obj));
+        elm_map_overlay_displayed_zoom_min_set(clas, 5);
+     }
+   if (mad->route_from && mad->route_to)
+     {
+        elm_map_overlay_del(mad->route_from);
+        elm_map_overlay_del(mad->route_to);
+        elm_map_route_del(mad->route);
+        mad->route_from = NULL;
+        mad->route_to = NULL;
+        mad->route = NULL;
+     }
+   if (!mad->route_from)
+     {
+        mad->route_from = elm_map_overlay_add(obj, lon, lat);
+        elm_map_overlay_class_append(clas, mad->route_from);
+        printf("route from: %lf %lf\n", lon, lat);
+     }
+   else if (!mad->route_to)
+     {
+        mad->route_to = elm_map_overlay_add(obj, lon, lat);
+        elm_map_overlay_class_append(clas, mad->route_to);
+        printf("route to: %lf %lf\n", lon, lat);
+     }
+   if ((mad->route_from) && (mad->route_to))
+     {
+        elm_map_overlay_region_get(mad->route_from, &flon, &flat);
+        elm_map_overlay_region_get(mad->route_to, &tlon, &tlat);
+        mad->route = elm_map_route_add(obj, ELM_MAP_ROUTE_TYPE_MOTOCAR,
+                                  ELM_MAP_ROUTE_METHOD_FASTEST, flon,
+                                  flat, tlon, tlat, NULL, NULL);
+        printf("Route from: %lf, %lf to: %lf, %lf\n", flon, flat, tlon, tlat);
+     }
+}
+
+static void
+_scroll_start(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   if (!data) return;
+
+   Mad *mad = data;
+   evas_object_smart_callback_del(mad->map, "longpressed", _longpressed);
+}
+
+static void
+_scroll_stop(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   if (!data) return;
+
+   Mad *mad = data;
+   evas_object_smart_callback_add(mad->map, "longpressed", _longpressed, mad);
+}
+
+static void
+_block_clicked_cb(void *data, Evas_Object *obj, void *ei)
+{
+   evas_object_del(data);
+}
+
+static void
+_src_select_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   const char *txt = elm_object_item_text_get(ei);
+   elm_map_source_set(mad->map, ELM_MAP_SOURCE_TYPE_TILE, txt);
+   printf("Source [%s] is selected\n", txt);
+   evas_object_del(mad->list_popup);
+   mad->list_popup = NULL;
+}
+
+static void
+_source_change_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Evas_Object *list, *popup;
+   int idx = 0;
+   Mad *mad = data;
+   popup = elm_popup_add(mad->map);
+   evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_style_set(popup, "menustyle");
+   elm_object_part_text_set(popup, "title,text", "Select Source");
+   evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+   evas_object_show(popup);
+
+   list = elm_list_add(mad->map);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_smart_callback_add(list, "selected", _src_select_cb, mad);
+
+   const char **sources = elm_map_sources_get(mad->map, ELM_MAP_SOURCE_TYPE_TILE);
+   while(sources[idx])
+     {
+        elm_list_item_append(list, sources[idx], NULL, NULL, NULL, NULL);
+        idx++;
+     }
+   elm_object_content_set(popup, list);
+   mad->list_popup = popup;
+   evas_object_del(obj);
+}
+
+static void
+_engine_select_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   const char *txt = elm_object_item_text_get(ei);
+   elm_map_engine_set(mad->map, txt);
+   printf("Engine [%s] is selected\n", txt);
+   evas_object_del(mad->list_popup);
+   mad->list_popup = NULL;
+}
+
+static void
+_engine_change_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Evas_Object *list, *popup;
+   int idx = 0;
+   Mad *mad = data;
+   popup = elm_popup_add(mad->map);
+   evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_style_set(popup, "menustyle");
+   elm_object_part_text_set(popup, "title,text", "Select Engine");
+   evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+   evas_object_show(popup);
+
+   list = elm_list_add(popup);
+   evas_object_show(popup);
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_smart_callback_add(list, "selected", _engine_select_cb, mad);
+
+   const char **engines = elm_map_engines_get(mad->map);
+   while(engines[idx])
+     {
+        elm_list_item_append(list, engines[idx], NULL, NULL, NULL, NULL);
+        idx++;
+     }
+   elm_object_content_set(popup, list);
+   mad->list_popup = popup;
+   evas_object_del(obj);
+}
+
+static void
+_address_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   double lon, lat;
+   elm_map_region_get(mad->map, &lon, &lat);
+
+   if (mad->name) elm_map_name_del(mad->name);
+   mad->name = elm_map_name_add(mad->map, NULL, lon, lat, NULL, NULL);
+   evas_object_del(obj);
+}
+
+static void
+_icon_overlay_add_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   double lon, lat;
+   elm_map_region_get(mad->map, &lon, &lat);
+
+   if (mad->ovl) elm_map_overlay_del(mad->ovl);
+   mad->ovl = elm_map_overlay_add(mad->map, lon, lat);
+   elm_map_overlay_icon_set(mad->ovl, _icon_get(mad->map));
+   evas_object_del(obj);
+}
+
+static void
+_content_overlay_add_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   double lon, lat;
+   Evas_Object *content;
+   elm_map_region_get(mad->map, &lon, &lat);
+
+   if (mad->ovl) elm_map_overlay_del(mad->ovl);
+   mad->ovl = elm_map_overlay_add(mad->map, lon, lat);
+   content = _icon_get(mad->map);
+   evas_object_resize(content, 120, 120);
+   elm_map_overlay_content_set(mad->ovl, content);
+   evas_object_del(obj);
+}
+
+static void
+_show_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   elm_map_region_show(mad->map, 127.052888, 37.257516);
+}
+
+static void
+_bringin_cb(void *data, Evas_Object *obj, void *ei)
+{
+   Mad *mad = data;
+   elm_map_region_bring_in(mad->map, 126.962305, 37.563927);
+}
+
+static void
+_menu_clicked(void *data, Evas_Object *obj, void *ei)
+{
+   if (!data) return;
+   Mad *mad = data;
+
+   Evas_Object *ctx;
+   Evas_Coord x, y;
+   evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+
+   ctx = elm_ctxpopup_add(mad->ad->nf);
+   evas_object_smart_callback_add(ctx,"dismissed", _dismissed_cb, NULL);
+   elm_ctxpopup_item_append(ctx, _(ENGINE_CHANGE), NULL, _engine_change_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(SOURCE_CHANGE), NULL, _source_change_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(GET_ADDRESS), NULL, _address_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(ICON_ADD), NULL, _icon_overlay_add_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(CONTENT_ADD), NULL, _content_overlay_add_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(SHOW_SAMSUNG), NULL, _show_cb, mad);
+   elm_ctxpopup_item_append(ctx, _(BRINGIN_SEOUL), NULL, _bringin_cb, mad);
+   evas_object_size_hint_max_set(ctx, 400, 600);
+   evas_object_move(ctx, x, y);
+   evas_object_show(ctx);
+}
+
+static void
+_overlay_cb(void *data, Evas_Object *map, void *ev)
+{
+       Elm_Map_Overlay *overlay = ev;
+       Elm_Map_Overlay_Type type = elm_map_overlay_type_get(overlay);
+       if (type == ELM_MAP_OVERLAY_TYPE_GROUP) {
+               Eina_List *l;
+               Elm_Map_Overlay *memb;
+               Eina_List *members = elm_map_overlay_group_members_get(overlay);
+               EINA_LIST_FOREACH(members, l, memb) {
+                       printf("\nmemb=%p\n", memb);
+               }
+       }
+       if (elm_map_overlay_data_get(overlay)) {
+               printf("\n%s\n", (char *)elm_map_overlay_data_get(overlay));
+               elm_map_overlay_paused_set(overlay, EINA_TRUE);
+       }
+       printf("Overlay clicked\n");
+}
+
+static Evas_Object *
+_label_get(Evas_Object *obj)
+{
+       Evas_Object *label;
+       label = elm_label_add(obj);
+       elm_object_text_set(label, "Frankfurt International Airport");
+       evas_object_show(label);
+       return label;
+}
+
+static void
+_get_cb(void *data __UNUSED__, Evas_Object *map, Elm_Map_Overlay *ovl)
+{
+       printf("\n\nIn get cb function\n");
+}
+
+static Evas_Object *
+_map_add(Mad *mad)
+{
+   Evas_Object *map, *txt;
+   Elm_Map_Overlay *grp1;
+   Elm_Map_Overlay *ovl_1, *ovl_2, *ovl_3, *ovl_7, *ovl_8, *ovl_9, *ovl_10;
+   Elm_Map_Overlay *ovl_circle, *ovl_bubble;
+
+   if (!mad) return NULL;
+   map = elm_map_add(mad->box);
+   if (!map) return map;
+   evas_object_show(map);
+
+   elm_map_user_agent_set(map, UA_TIZEN_WEB);
+   elm_map_engine_key_set(map, "Tizen Nokia Map",
+                          "SpMLqvWrvuFmp27kV4e6/Md_LeHoPn0b4LPOxB60p4A");
+   if (!elm_map_engine_set(map, "Tizen Nokia Map")) {
+          _txt_popup_show(mad, "Nokia Map engine set failed");
+   }
+
+   // Scale
+   elm_map_overlay_scale_add(map, 30, 100);
+
+   // Show Tour eiffel in Paris
+   elm_map_region_show(map, 2.29435, 48.85814);
+   elm_map_zoom_set(map, 10);
+   ovl_1 = elm_map_overlay_add(map, 2.29435, 48.85814);
+   elm_map_overlay_color_set(ovl_1, 0x00, 0xfa, 0x9a, 0xff);
+   elm_map_overlay_displayed_zoom_min_set(ovl_1, 2);
+
+   // Bubble on Paris
+   ovl_bubble = elm_map_overlay_bubble_add(map);
+   elm_map_overlay_bubble_follow(ovl_bubble, ovl_1);
+   txt = elm_label_add(map);
+   elm_object_text_set(txt, "It's Paris");
+   evas_object_show(txt);
+   elm_map_overlay_bubble_content_append(ovl_bubble, txt);
+
+   // Circle on Tokyo
+   ovl_circle = elm_map_overlay_circle_add(map, 139.794846, 35.541306, 5);
+   elm_map_overlay_color_set(ovl_circle, 64, 16, 16, 64);
+
+   // Frankfurt International Airport (content)
+   ovl_2 = elm_map_overlay_add(map, 8.5604, 50.0382);
+   elm_map_overlay_data_set(ovl_2, "data");
+   elm_map_overlay_content_set(ovl_2, _label_get(map));
+   elm_map_overlay_displayed_zoom_min_set(ovl_2, 2);
+
+   // Tower of Pisa (icon)
+   ovl_3 = elm_map_overlay_add(map, 10.396661, 43.723027);
+   elm_map_overlay_get_cb_set(ovl_3, _get_cb, NULL);
+   elm_map_overlay_icon_set(ovl_3, _icon_get(map));
+   elm_map_overlay_displayed_zoom_min_set(ovl_3, 2);
+
+   // Group Overlay (Rome)
+   grp1 = elm_map_overlay_class_add(map);
+   elm_map_overlay_icon_set(grp1, _group_icon_get(map));
+   // Colosseo
+   ovl_7 = elm_map_overlay_add(map, 12.49331, 41.88997);
+   elm_map_overlay_class_append(grp1, ovl_7);
+   // Sole al Pantheon Hotel
+   ovl_8 = elm_map_overlay_add(map, 12.47684, 41.89853);
+   elm_map_overlay_class_append(grp1, ovl_8);
+   // Gardens of Vatican City
+   ovl_9 = elm_map_overlay_add(map, 12.45016, 41.90360);
+   elm_map_overlay_class_append(grp1, ovl_9);
+
+   // Barcelonas Stadium in Spain
+   ovl_10 = elm_map_overlay_add(map, 2.12174, 41.38067);
+   elm_map_overlay_class_append(grp1, ovl_10);
+
+   printf("\ngroup type = %d\n", elm_map_overlay_type_get(grp1));
+   printf("\ndefault type = %d\n", elm_map_overlay_type_get(ovl_7));
+
+   evas_object_smart_callback_add(map, "overlay,clicked", _overlay_cb, map);
+   evas_object_smart_callback_add(map, "longpressed", _longpressed, mad);
+   evas_object_smart_callback_add(map, "clicked,double", _clicked_double, mad);
+   evas_object_smart_callback_add(map, "route,loaded", _route_loaded, mad);
+   evas_object_smart_callback_add(map, "name,loaded", _name_loaded, mad);
+   evas_object_smart_callback_add(map, "scroll,drag,start", _scroll_start, mad);
+   evas_object_smart_callback_add(map, "scroll,drag,stop", _scroll_stop, mad);
+   evas_object_smart_callback_add(map, "loaded", _on_load, mad);
+
+   return map;
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+   if (!data) return EINA_TRUE;
+
+   Mad *mad = data;
+
+   _map_save_state(mad);
+#ifndef DESKTOP
+   if (mad->loc)
+     {
+        location_stop(mad->loc);
+        location_free(mad->loc);
+     }
+   if (mad->sensor_handle >= 0)
+     {
+        sf_disconnect(mad->sensor_handle);
+        sf_stop(mad->sensor_handle);
+     }
+#endif
+   if (mad->rotate_animator) ecore_animator_del(mad->rotate_animator);
+   if (mad->sensor_timer) ecore_timer_del(mad->sensor_timer);
+   if (mad->txt_popup) evas_object_del(mad->txt_popup);
+   if (mad->capture_popup) evas_object_del(mad->capture_popup);
+   if (mad->list_popup) evas_object_del(mad->list_popup);
+   if (mad) free(mad);
+
+   return EINA_TRUE;
+}
+
+static Evas_Object *
+_box_add(Evas_Object *parent)
+{
+   if (!parent) return NULL;
+
+   Evas_Object *box = elm_box_add(parent);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(box);
+   return box;
+}
+
+static void
+_nf_push(Evas_Object *nf, Evas_Object *item, Mad *mad)
+{
+   if (!nf || !item) return;
+
+   Evas_Object *btn;
+   Elm_Object_Item *it = elm_naviframe_item_push(nf, _("Map"), NULL, NULL, item, NULL);
+   elm_naviframe_item_pop_cb_set(it, _pop_cb, mad);
+
+   btn = elm_button_add(nf);
+   elm_object_style_set(btn, "style1");
+   elm_object_text_set(btn, "Capture");
+   elm_object_item_part_content_set(it, "toolbar_button1", btn);
+   evas_object_smart_callback_add(btn, "clicked", _capture, mad);
+
+   btn = elm_button_add(nf);
+   elm_object_style_set(btn, "style1");
+   elm_object_text_set(btn, "Menu");
+   elm_object_item_part_content_set(it, "toolbar_button2", btn);
+   evas_object_smart_callback_add(btn, "clicked", _menu_clicked, mad);
+}
+
+void
+map_cb(void *data, Evas_Object *obj, void *event)
+{
+   if (!data) return;
+   fprintf(stdout, "\nMap test started\n");
+
+   struct appdata *ad = data;
+   Mad *mad = calloc(1, sizeof(Mad));
+
+   mad->ad = ad;
+   mad->sensor_handle = -1;
+
+   mad->box = _box_add(mad->ad->nf);
+   _nf_push(ad->nf, mad->box, mad);
+#ifndef DESKTOP
+   if (!_get_network_state())
+     {
+        _txt_popup_show(mad, "Network is not available");
+        Elm_Object_Item *it = elm_naviframe_top_item_get(ad->nf);
+        Evas_Object *btn =
+           elm_object_item_part_content_get(it, "toolbar_button1");
+        elm_object_disabled_set(btn, EINA_TRUE);
+        btn = elm_object_item_part_content_get(it, "toolbar_button2");
+        elm_object_disabled_set(btn, EINA_TRUE);
+        return;
+     }
+
+   location_init();
+#endif
+   mad->map = _map_add(mad);
+   if (!mad->map) {
+          _txt_popup_show(mad, "elm_map_add() failed");
+   }
+   _map_load_state(mad);
+
+   evas_object_size_hint_weight_set(mad->map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(mad->map, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(mad->box, mad->map);
+}
diff --git a/live.viewer/dbox.app/src/multibuttonentry.c b/live.viewer/dbox.app/src/multibuttonentry.c
new file mode 100644 (file)
index 0000000..cbdc655
--- /dev/null
@@ -0,0 +1,508 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "multibuttonentry.h"
+
+/*********************************************************
+ multibuttonentry
+ ********************************************************/
+
+#define BTN_NUM 4
+
+Evas_Object *multibuttonentry;
+Elm_Object_Item *clicked_item;
+
+static void _check_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *mbe = multibuttonentry;
+   if (!mbe || !obj) return;
+
+   if (!strcmp(elm_object_text_get(obj), "Editable"))
+      elm_multibuttonentry_editable_set(mbe, elm_check_state_get(obj));
+   else if (!strcmp(elm_object_text_get(obj), "Expanded"))
+      elm_multibuttonentry_expanded_set(mbe, elm_check_state_get(obj));
+
+   clicked_item = NULL;
+}
+
+static void _button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *mbe = multibuttonentry;
+   if (!mbe || !obj) return;
+
+   if (!strcmp(elm_object_text_get(obj), "Append"))
+     {
+        if (clicked_item)
+           elm_multibuttonentry_item_insert_after(mbe, clicked_item, "Append", NULL, NULL);
+        else
+           elm_multibuttonentry_item_append(mbe, "Append", NULL, NULL);
+     }
+   else if (!strcmp(elm_object_text_get(obj), "Delete"))
+     {
+        if (clicked_item)
+           elm_object_item_del(clicked_item);
+     }
+   else if (!strcmp(elm_object_text_get(obj), "Clear"))
+     {
+        elm_multibuttonentry_clear(mbe);
+     }
+   else if (!strcmp(elm_object_text_get(obj), "Item Disabled"))
+     {
+        const Eina_List *items, *l;
+        Elm_Object_Item *it;
+
+        items = elm_multibuttonentry_items_get(mbe);
+
+        EINA_LIST_FOREACH(items, l, it)
+          {
+             if (elm_object_item_disabled_get(it))
+               elm_object_item_disabled_set(it, EINA_FALSE);
+             else
+               elm_object_item_disabled_set(it, EINA_TRUE);
+          }
+     }
+   else if (!strcmp(elm_object_text_get(obj), "MBE Disabled"))
+     {
+         if (elm_object_disabled_get(mbe))
+          elm_object_disabled_set(mbe, EINA_FALSE);
+        else
+          elm_object_disabled_set(mbe, EINA_TRUE);
+     }
+
+   clicked_item = NULL;
+}
+
+static void _mouse_down_cb(void *data, Evas *evas, Evas_Object *o, void *ev)
+{
+   printf("%s\n", __func__);
+}
+
+static void _mouse_move_cb(void *data, Evas *evas, Evas_Object *o, void *ev)
+{
+   Evas_Coord x, y, w, h;
+
+   Evas_Event_Mouse_Move *event = (Evas_Event_Mouse_Move *)ev;
+   evas_object_geometry_get(data, &x, &y, &w, &h);
+   evas_object_move(data, event->cur.canvas.x - (w / 2), event->cur.canvas.y - (h / 2));
+}
+
+static void _mouse_up_cb(void *data, Evas *evas, Evas_Object *o, void *ev)
+{
+   printf("%s\n", __func__);
+
+   evas_object_event_callback_del_full(o, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, data);
+   evas_object_event_callback_del_full(o, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, data);
+   evas_object_event_callback_del_full(o, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, data);
+
+   evas_object_del(data);
+}
+
+static void _refresh_end_text(Evas_Object *obj)
+{
+   Evas_Object *end, *entry;
+   const char *end_text, *entry_text;
+   char buf[1024];
+
+   if (!obj) return;
+
+   end = (Evas_Object *)evas_object_data_get(obj, "end");
+   entry = elm_multibuttonentry_entry_get(obj);
+   if (end)
+     {
+        entry_text = elm_object_text_get(entry);
+        end_text = elm_object_text_get(end);
+        if (entry_text && strlen(entry_text))
+          {
+             if (end_text && strlen(end_text))
+               snprintf(buf, sizeof(buf), "%s, %s", end_text, entry_text);
+             else
+               snprintf(buf, sizeof(buf), "%s", entry_text);
+             elm_object_text_set(end, buf);
+          }
+     }
+}
+
+static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+   printf("\nselected item = %s\n", elm_object_item_text_get(item));
+}
+
+static void _item_added_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+   printf("\nadded item = %s\n", elm_object_item_text_get(item));
+
+   _refresh_end_text(obj);
+}
+
+static void _item_deleted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("\ndeleted item!\n");
+
+   _refresh_end_text(obj);
+}
+
+static void _item_clicked_cb( void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+   printf("\nclicked item = %s\n", elm_object_item_text_get(item));
+
+   clicked_item = item;
+}
+
+static void _item_longpressed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+   printf("\npressed_item = %s\n", elm_object_item_text_get(item));
+
+   Evas_Object *item_obj, *new_obj;
+   Evas_Coord x, y, w, h;
+   const char *buf;
+
+   item_obj = elm_multibuttonentry_item_object_get(item);
+   buf = elm_object_part_text_get(item_obj, "elm.btn.text");
+
+   if (!item_obj) return;
+   evas_object_geometry_get(item_obj, &x, &y, &w, &h);
+
+   new_obj = elm_layout_add(data);
+   elm_layout_theme_set(new_obj, "multibuttonentry", "btn", elm_object_style_get(item_obj));
+   elm_object_part_text_set(new_obj, "elm.btn.text", buf);
+
+   evas_object_smart_calculate(new_obj);
+   elm_layout_signal_emit(new_obj, "elm,state,text,ellipsis", "");
+
+   evas_object_event_callback_add(data, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, new_obj);
+   evas_object_event_callback_add(data, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, new_obj);
+   evas_object_event_callback_add(data, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, new_obj);
+
+   evas_object_move(new_obj, x, y);
+   evas_object_resize(new_obj, w, h);
+   evas_object_show(new_obj);
+   elm_object_item_del(item);
+}
+
+static void _mbe_clicked_cb( void *data, Evas_Object *obj, void *event_info )
+{
+   printf("multibuttonentry is clicked!\n");
+}
+
+static void _mbe_focused_cb( void *data, Evas_Object *obj, void *event_info )
+{
+   printf("multibuttonentry is focused!\n");
+
+   Evas_Object *end;
+
+   end = (Evas_Object *)evas_object_data_get(obj, "end");
+   if (end)
+     elm_object_text_set(end, NULL);
+}
+
+static void _mbe_unfocused_cb( void *data, Evas_Object *obj, void *event_info )
+{
+   printf("multibuttonentry is unfocused!\n");
+
+   _refresh_end_text(obj);
+}
+
+static void _expanded_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("multibuttonentry is expanded!\n");
+}
+
+static void _contracted_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("multibuttonentry is contracted!\n");
+}
+
+static void _expand_state_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   if (elm_multibuttonentry_expanded_get(obj))
+      printf("\nexpand state changed: expanded!!\n");
+   else
+      printf("\nexpand state changed: shrinked!!\n");
+}
+
+static Eina_Bool _item_filter_cb(Evas_Object *obj, const char* item_label, const void *item_data, const void *data)
+{
+   printf("\"%s\" item will be added\n", item_label);
+
+   char *str = strstr(item_label, "S");
+
+   Evas_Object *end = (Evas_Object *)evas_object_data_get(obj, "end");
+   if (end)
+     elm_object_text_set(end, NULL);
+
+   if (str)
+     return EINA_FALSE;
+   else
+     return EINA_TRUE;
+}
+
+static Evas_Object* _add_multibuttonentry(Evas_Object* parent)
+{
+   Evas_Object* scroller = NULL;
+   Evas_Object* mbe = NULL;
+
+   scroller = elm_scroller_add(parent);
+   elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+   elm_scroller_policy_set(scroller,ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_AUTO);
+   evas_object_show(scroller);
+
+   // add a multibuttonentry object
+   mbe = elm_multibuttonentry_add(parent);
+   multibuttonentry = mbe;
+   elm_object_text_set(mbe, "To: ");
+   elm_object_part_text_set(mbe, "guide", "Tap to add recipient");
+   evas_object_size_hint_weight_set(mbe, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(mbe, EVAS_HINT_FILL, 0.0);
+   elm_object_content_set(scroller, mbe);
+
+   // add item filter callback
+   elm_multibuttonentry_item_filter_append(mbe, _item_filter_cb, NULL);
+
+   // add state-related callbacks
+   evas_object_smart_callback_add(mbe, "clicked", _mbe_clicked_cb, NULL);
+   evas_object_smart_callback_add(mbe, "focused", _mbe_focused_cb, NULL);
+   evas_object_smart_callback_add(mbe, "unfocused", _mbe_unfocused_cb, NULL);
+
+   // add size-related callbacks
+   evas_object_smart_callback_add(mbe, "expanded", _expanded_cb, NULL);
+   evas_object_smart_callback_add(mbe, "contracted", _contracted_cb, NULL);
+   evas_object_smart_callback_add(mbe, "expand,state,changed", _expand_state_changed_cb, NULL);
+
+   // add item-related callbacks
+   evas_object_smart_callback_add(mbe, "item,selected", _item_selected_cb, NULL);
+   evas_object_smart_callback_add(mbe, "item,added", _item_added_cb, NULL);
+   evas_object_smart_callback_add(mbe, "item,deleted", _item_deleted_cb, NULL);
+   evas_object_smart_callback_add(mbe, "item,clicked", _item_clicked_cb, NULL);
+   evas_object_smart_callback_add(mbe, "longpressed", _item_longpressed_cb, parent);
+
+   elm_object_focus_set(mbe, EINA_TRUE);
+
+   return scroller;
+}
+
+#if 0
+static void _1000_items_test_cb(void *data, Evas_Object *obj, void *event_info)
+{
+
+   Evas_Object *mbe = multibuttonentry;
+   Evas *e = evas_object_evas_get(mbe);
+   int i = 0;
+   char *str;
+   double starttime = 0.0, endtime = 0.0;
+   Elm_Object_Item* item = NULL;
+   switch((int)data)
+     {
+        case 0:
+           str = "111111111111";
+           starttime = ecore_time_get();
+           for (i = 0; i < 1000; i++)
+             {
+                item = elm_multibuttonentry_item_append(mbe, str, NULL, NULL);
+                if (!item)
+                  {
+                     printf("item insert fail at %d\n", i);
+                     break;
+                  }
+             }
+           evas_render(e);
+           endtime = ecore_time_get();
+           break;
+        case 1:
+           str = "11111";
+           starttime = ecore_time_get();
+           for (i = 0; i < 1000; i++)
+             {
+                item = elm_multibuttonentry_item_append(mbe, str, NULL, NULL);
+                if (!item)
+                  {
+                     printf("item insert fail at %d\n", i);
+                     break;
+                  }
+             }
+           evas_render(e);
+           endtime = ecore_time_get();
+           break;
+        case 2:
+           str = "1";
+           starttime = ecore_time_get();
+           for (i = 0; i < 1000; i++)
+             {
+                item = elm_multibuttonentry_item_append(mbe, str, NULL, NULL);
+                if (!item)
+                  {
+                     printf("item insert fail at %d\n", i);
+                     break;
+                  }
+             }
+           evas_render(e);
+           endtime = ecore_time_get();
+           break;
+        case 3:
+           starttime = ecore_time_get();
+           for (i = 0; i < 1000; i++)
+             {
+                item = elm_multibuttonentry_first_item_get(mbe);
+                if (item)
+                  elm_object_item_del(item);
+                else
+                  break;
+             }
+           evas_render(e);
+           endtime = ecore_time_get();
+           break;
+     }
+   printf("test %d items starttime: %02.06lf, endtime: %02.06lf, endtime - starttime: %02.06lf\n",
+          i, starttime, endtime, endtime - starttime);
+}
+
+
+static Evas_Object* _add_1000_test_buttons(Evas_Object* parent)
+{
+   Evas_Object* bx = NULL;
+   Evas_Object* btn[BTN_NUM] = {0,};
+   char *label[BTN_NUM] = {
+        "1000 items insert, 1 line by 2 items",
+        "1000 items insert, 1 line by 5 items",
+        "1000 Items insert, 1 line by 15 items",
+        "Items remove all, one by one"
+   };
+   int i;
+
+   bx = elm_box_add(parent);
+   elm_box_horizontal_set(bx, EINA_FALSE);
+   elm_box_homogeneous_set(bx, EINA_TRUE);
+
+   for (i = 0; i < BTN_NUM; i++)
+     {
+        btn[i] = elm_button_add(parent);
+        evas_object_smart_callback_add(btn[i], "clicked", _1000_items_test_cb, (void *)i);
+        elm_object_text_set(btn[i], label[i]);
+        evas_object_size_hint_weight_set(btn[i], EVAS_HINT_EXPAND, 0.0);
+        evas_object_size_hint_align_set(btn[i], EVAS_HINT_FILL, EVAS_HINT_FILL);
+        elm_box_pack_end(bx, btn[i]);
+        evas_object_show(btn[i]);
+     }
+   return bx;
+}
+#endif
+
+static Evas_Object *_add_check_buttons(Evas_Object *parent)
+{
+   Evas_Object *bx;
+   Evas_Object *chk;
+
+   bx = elm_box_add(parent);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   evas_object_show(bx);
+
+   chk = elm_check_add(bx);
+   elm_object_text_set(chk, "Editable");
+   elm_check_state_set(chk, EINA_TRUE);
+   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(chk, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_smart_callback_add(chk, "changed", _check_changed_cb, NULL);
+   elm_box_pack_end(bx, chk);
+   evas_object_show(chk);
+
+   chk = elm_check_add(bx);
+   elm_object_text_set(chk, "Expanded");
+   elm_check_state_set(chk, EINA_TRUE);
+   evas_object_size_hint_weight_set(chk, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(chk, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_smart_callback_add(chk, "changed", _check_changed_cb, NULL);
+   elm_box_pack_end(bx, chk);
+   evas_object_show(chk);
+
+   return bx;
+}
+
+static Evas_Object *_add_buttons(Evas_Object *parent)
+{
+   Evas_Object *bx;
+   Evas_Object *btn[BTN_NUM];
+   char *text[BTN_NUM] = {"Unfocus", "Append", "Delete", "Clear"};
+   int i;
+
+   bx = elm_box_add(parent);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   evas_object_show(bx);
+
+   for (i = 0; i < BTN_NUM; i++)
+     {
+        btn[i] = elm_button_add(parent);
+        elm_object_text_set(btn[i], text[i]);
+        evas_object_smart_callback_add(btn[i], "clicked", _button_clicked_cb, NULL);
+        evas_object_size_hint_weight_set(btn[i], EVAS_HINT_EXPAND, 0.0);
+        evas_object_size_hint_align_set(btn[i], EVAS_HINT_FILL, 0.0);
+        elm_box_pack_end(bx, btn[i]);
+        evas_object_show(btn[i]);
+     }
+
+   return bx;
+}
+
+void multibuttonentry_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *ly = NULL;
+   Evas_Object *sc = NULL;
+   Evas_Object *bx = NULL;
+   Evas_Object *btn1 = NULL;
+   Evas_Object *btn2 = NULL;
+
+   struct appdata *ad = (struct appdata *) data;
+   if (ad == NULL) return;
+
+   multibuttonentry = NULL;
+   clicked_item = NULL;
+
+   ly = elm_layout_add(ad->nf);
+   evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_layout_file_set(ly, ELM_DEMO_EDJ, "multibuttonentry_test");
+   elm_naviframe_item_push(ad->nf, _("Multibuttonentry"), NULL, NULL, ly, NULL);
+
+   bx = _add_check_buttons(ly);
+   elm_object_part_content_set(ly, "check_box", bx);
+
+   bx = _add_buttons(ly);
+   elm_object_part_content_set(ly, "button_box", bx);
+
+   btn1 = elm_button_add(ly);
+   elm_object_text_set(btn1, "Item Disabled");
+   evas_object_smart_callback_add(btn1, "clicked", _button_clicked_cb, NULL);
+   evas_object_size_hint_weight_set(btn1, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(btn1, EVAS_HINT_FILL, 0.0);
+   elm_object_part_content_set(ly, "btn1", btn1);
+   evas_object_show(btn1);
+
+   btn2 = elm_button_add(ly);
+   elm_object_text_set(btn2, "MBE Disabled");
+   evas_object_smart_callback_add(btn2, "clicked", _button_clicked_cb, NULL);
+   evas_object_size_hint_weight_set(btn2, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(btn2, EVAS_HINT_FILL, 0.0);
+   elm_object_part_content_set(ly, "btn2", btn2);
+   evas_object_show(btn2);
+
+   sc = _add_multibuttonentry(ly);
+   elm_object_part_content_set(ly, "multibuttonentry", sc);
+}
+
diff --git a/live.viewer/dbox.app/src/naviframe.c b/live.viewer/dbox.app/src/naviframe.c
new file mode 100644 (file)
index 0000000..28d3fc3
--- /dev/null
@@ -0,0 +1,840 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "naviframe.h"
+
+/*********************************************************
+  Naviframe
+ ********************************************************/
+
+static Evas_Object *layout_main = NULL;
+static Evas_Object *layout_tab = NULL;
+static Evas_Object *conform = NULL;
+
+static Evas_Object *_create_nocontent(Evas_Object *parent, const char *text)
+{
+       Evas_Object *layout, *noc, *sc, *icon;
+       char buf[128];
+
+       //Scroller
+       sc = elm_scroller_add(parent);
+       if (!sc) return NULL;
+       elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+
+       //Base Layout
+       layout = elm_layout_add(sc);
+       if (!layout)
+       {
+               evas_object_del(sc);
+               return NULL;
+       }
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/nocontents/full");
+       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);
+
+       //NoContent Layout
+       noc = elm_layout_add(layout);
+       if (!noc)
+       {
+               evas_object_del(layout);
+               evas_object_del(sc);
+               return NULL;
+       }
+       elm_layout_theme_set(noc, "layout", "nocontents", "full");
+       elm_object_part_text_set(noc, "elm.text", text);
+
+       //Icon of NoContent Layout
+       icon = elm_image_add(noc);
+       if (!icon)
+       {
+               evas_object_del(noc);
+               evas_object_del(layout);
+               evas_object_del(sc);
+               return NULL;
+       }
+       snprintf(buf, sizeof(buf), "%s/00_nocontents_text.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_object_part_content_set(noc, "nocontents.image", icon);
+
+       elm_object_part_content_set(layout, "contents", noc);
+       elm_object_content_set(sc, layout);
+       return sc;
+}
+
+static Evas_Object *_create_title_edit_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
+{
+       Evas_Object *ic;
+       char buf[PATH_MAX];
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) return NULL;
+       elm_object_style_set(btn, "naviframe/title_icon");
+       ic = elm_image_add(parent);
+       snprintf(buf, sizeof(buf), "%s/00_icon_edit.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", ic);
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       return btn;
+}
+
+static Evas_Object *_create_title_plus_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
+{
+       Evas_Object *ic;
+       char buf[PATH_MAX];
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) return NULL;
+       elm_object_style_set(btn, "naviframe/title_icon");
+       ic = elm_image_add(parent);
+       snprintf(buf, sizeof(buf), "%s/00_icon_plus.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", ic);
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       return btn;
+}
+
+static Evas_Object *_create_title_text_btn(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
+{
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) return NULL;
+       elm_object_style_set(btn, "naviframe/title_text");
+       elm_object_text_set(btn, text);
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       return btn;
+}
+
+static Evas_Object *_create_drawers_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
+{
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) return NULL;
+       elm_object_style_set(btn, "naviframe/drawers");
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       return btn;
+}
+
+static Evas_Object *create_toolbar_more_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
+{
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) return NULL;
+       elm_object_style_set(btn, "naviframe/more/default");
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       return btn;
+}
+
+static void _quit_func(Evas_Object *nf)
+{
+       if (conform) {
+               if (nf) {
+                       elm_object_content_unset(conform);
+                       evas_object_del(nf);
+               }
+               if (layout_main) {
+                       elm_object_content_set(conform, layout_main);
+                       evas_object_show(layout_main);
+               }
+               conform = NULL;
+       }
+}
+
+static Eina_Bool _quit_cb(void *data, Elm_Object_Item *it)
+{
+       _quit_func(data);
+       return EINA_FALSE;
+}
+
+static void _quit_button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _quit_func(data);
+}
+
+static void _prev_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *nf = (Evas_Object *) data;
+       elm_naviframe_item_pop(nf);
+       evas_object_smart_callback_del(obj, "clicked", _prev_cb);
+}
+
+static void _title_slide_stop(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *nf = (Evas_Object *) data;
+
+       //Emit signal to start title text slide
+       elm_object_signal_emit(nf, "elm,action,title,slide,stop", "");
+}
+
+static void _title_slide_start(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *nf = (Evas_Object *) data;
+
+       //Emit signal to start title text slide
+       elm_object_signal_emit(nf, "elm,action,title,slide,start", "");
+}
+
+static void _twelfth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 12");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "This title slides to go. This title slides 3 times. Now you can read an over length text!", NULL, NULL, content, NULL);
+
+       //Subtitle
+       elm_object_item_part_text_set(navi_it, "subtitle", "This subtitle slides to go. This subtitle slides 3 times. Now you can read an over length text!");
+
+       //Title Text Left Button
+       btn = _create_title_text_btn(nf, "Prev", _prev_cb, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Text Right Button
+       btn = _create_title_text_btn(nf, "Quit", _quit_button_cb, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Title slide stop", _title_slide_stop, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Title slide start", _title_slide_start, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static Eina_Bool _eleventh_pop_cb(void *data, Elm_Object_Item *it)
+{
+       //Delete item without transition effect
+       elm_object_item_del(it);
+
+       /* Return EINA_FALSE not to pop the item in this case
+               since the item is deleted explicitly. */
+       return EINA_FALSE;
+}
+
+static void _eleventh_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *top_it, *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 11");
+
+       //Get the top item of naviframe
+       top_it = elm_naviframe_top_item_get(nf);
+
+       /* Insert a new item after the input item.
+               elm_naviframe_item_insert_after does not show transition effect. */
+       navi_it = elm_naviframe_item_insert_after(nf, top_it, "No Transition", NULL, NULL, content, NULL);
+
+       //Register item pop callback function
+       elm_naviframe_item_pop_cb_set(navi_it, _eleventh_pop_cb, NULL);
+
+       //Title Icon Left Button
+       btn = _create_title_edit_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _twelfth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _title_hide(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *navi_it = (Elm_Object_Item *) data;
+
+       /* Disable naviframe title with title transition effect.
+               The third argument of elm_naviframe_item_title_enabled_set
+               sets the title transition effect. */
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_FALSE, EINA_TRUE);
+}
+
+static void _title_show(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *navi_it = (Elm_Object_Item *) data;
+
+       /* Enable naviframe title with title transition effect
+               The third argument of elm_naviframe_item_title_enabled_set
+               sets the title transition effect. */
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_TRUE);
+}
+
+static void _tenth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 10");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title Show/Hide", NULL, NULL, content, NULL);
+
+       //Title Text Left Button
+       btn = _create_title_text_btn(nf, "Prev", _prev_cb, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Text Right Button
+       btn = _create_title_text_btn(nf, "Next", _eleventh_page, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Title Hide", _title_hide, navi_it);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Title Show", _title_show, navi_it);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_focus_get(data)) {
+               if (elm_entry_is_empty(obj))
+                       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+               else
+                       elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       }
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+}
+
+static void _focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+       elm_object_signal_emit(data, "cancel,in", "");
+}
+
+static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
+       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+}
+
+static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_entry_entry_set(data, "");
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _searchsymbol_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+       printf("\n[Search Bar] SearchSymbol Callback Called\n");
+}
+
+static Evas_Object *_create_searchbar(Evas_Object *parent)
+{
+       Evas_Object *searchbar_layout, *entry;
+
+       if (parent == NULL) return NULL;
+
+       //Searchbar
+       searchbar_layout = elm_layout_add(parent);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "default");
+
+       //Entry
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_part_text_set(entry, "elm.guide", "Search");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, searchbar_layout);
+       evas_object_smart_callback_add(entry, "focused", _focused_cb, searchbar_layout);
+       evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, searchbar_layout);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+       elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_signal_callback_add(searchbar_layout, "elm,action,click", "", _searchsymbol_clicked_cb, entry);
+
+       evas_object_show(searchbar_layout);
+       return searchbar_layout;
+}
+
+static void _nineth_trans_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *searchbar_layout = (Evas_Object *) data;
+
+       //Unregister smart callback function which is called after naviframe transition is finished
+       evas_object_smart_callback_del(obj, "transition,finished", _nineth_trans_finished_cb);
+
+       //Enable focus set to entry
+       elm_object_tree_focus_allow_set(searchbar_layout, EINA_TRUE);
+
+       //Set focus to entry to show keypad
+       elm_object_focus_set(searchbar_layout, EINA_TRUE);
+}
+
+static void _nineth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *searchbar_layout, *content, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 9");
+
+       //Searchbar
+       searchbar_layout = _create_searchbar(nf);
+
+       //Register smart callback function which is called after naviframe transition is finished
+       evas_object_smart_callback_add(nf, "transition,finished", _nineth_trans_finished_cb, searchbar_layout);
+
+       //Disable focus set to entry
+       elm_object_tree_focus_allow_set(searchbar_layout, EINA_FALSE);
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, content, "empty");
+
+       //Set Searchbar to "title" part in "empty" item style
+       elm_object_item_part_content_set(navi_it, "title", searchbar_layout);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _tenth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _view_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *sub_content = NULL;
+
+       switch ((int)data)
+       {
+               case 1:
+                       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-1");
+                       break;
+               case 2:
+                       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-2");
+                       break;
+               case 3:
+                       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-3");
+                       break;
+               case 4:
+                       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-4");
+                       break;
+               case 5:
+                       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-5");
+                       break;
+       }
+       //Previous content is deleted automatically
+       elm_object_part_content_set(layout_tab, "elm.swallow.content", sub_content);
+}
+
+static void _eighth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *sub_content, *tabbar, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+       Elm_Object_Item *tabbar_it;
+
+       if (nf == NULL) return;
+
+       layout_tab = elm_layout_add(nf);
+       elm_layout_theme_set(layout_tab, "layout", "application", "default");
+       sub_content = _create_nocontent(layout_tab, "Naviframe Demo<br>Page 8-1");
+       elm_object_part_content_set(layout_tab, "elm.swallow.content", sub_content);
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, NULL, NULL, NULL, layout_tab, "tabbar/notitle");
+
+       //Tabbar
+       tabbar = elm_toolbar_add(nf);
+       if (tabbar) {
+               elm_object_style_set(tabbar, "tabbar");
+               elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
+               elm_toolbar_reorder_mode_set(tabbar, EINA_TRUE);
+               elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
+               elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
+               tabbar_it = elm_toolbar_item_append(tabbar, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _view_changed_cb, (void *)1);
+               elm_toolbar_item_append(tabbar, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _view_changed_cb, (void *)2);
+               elm_toolbar_item_append(tabbar, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _view_changed_cb, (void *)3);
+               elm_toolbar_item_append(tabbar, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _view_changed_cb, (void *)4);
+               elm_toolbar_item_append(tabbar, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", _view_changed_cb, (void *)5);
+
+               elm_toolbar_item_selected_set(tabbar_it, EINA_TRUE);
+               elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+       }
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _nineth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _seventh_view_2_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content;
+       Evas_Object *nf = (Evas_Object *) data;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 7-2");
+
+       //Previous content is deleted automatically
+       elm_object_part_content_set(nf, NULL, content);
+}
+
+static void _seventh_view_1_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content;
+       Evas_Object *nf = (Evas_Object *) data;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 7-1");
+
+       //Previous content is deleted automatically
+       elm_object_part_content_set(nf, NULL, content);
+}
+
+static void _seventh_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *tabbar, *toolbar, *btn;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *tabbar_it, *toolbar_it[3];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 7-1");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Tabbar", NULL, NULL, content, "tabbar");
+
+       //Tabbar
+       tabbar = elm_toolbar_add(nf);
+       elm_toolbar_shrink_mode_set(tabbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(tabbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(tabbar, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_object_style_set(tabbar, "tabbar/item_with_title");
+       if (tabbar) {
+               tabbar_it = elm_toolbar_item_append(tabbar, NULL, "View 1", _seventh_view_1_cb, nf);
+               elm_toolbar_item_append(tabbar, NULL, "View 2", _seventh_view_2_cb, nf);
+
+               elm_toolbar_item_selected_set(tabbar_it, EINA_TRUE);
+               elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+       }
+
+       //Title Icon Left Button
+       btn = _create_title_edit_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //3 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "None", NULL, nf);
+       toolbar_it[2] = elm_toolbar_item_append(toolbar, NULL, "Next", _eighth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _go_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Eina_Bool state = elm_check_state_get(obj);
+
+       printf("Check state : %d\n", state);
+}
+
+static void _sixth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *check, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 6");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title on&off Button", NULL, NULL, content, NULL);
+
+       // Title on&off Button
+       check = elm_check_add(nf);
+       elm_check_state_set(check, EINA_FALSE);
+       elm_object_style_set(check, "naviframe/title_on&off");
+       elm_object_item_part_content_set(navi_it, "title_right_btn", check);
+       evas_object_smart_callback_add(check, "changed", _go_check_clicked_cb, NULL);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _seventh_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _fifth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 5");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Drawers Button", NULL, NULL, content, "drawers");
+
+       //Subtitle
+       elm_object_item_part_text_set(navi_it, "subtitle", "Subtitle Text");
+
+       //Drawers Button
+       btn = _create_drawers_btn(nf, _sixth_page, nf);
+       elm_object_item_part_content_set(navi_it, "drawers", btn);
+
+       //Title Icon Left Button
+       btn = _create_title_edit_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _sixth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _fourth_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 4");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title Badge", NULL, NULL, content, NULL);
+
+       //Subtitle
+       elm_object_item_part_text_set(navi_it, "subtitle", "Subtitle Text");
+
+       //Title Badge
+       elm_object_item_part_text_set(navi_it, "title_badge", "999");
+
+       //Title Icon Left Button
+       btn = _create_title_edit_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _fifth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _third_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *ic;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+       char buf[PATH_MAX] = {0,};
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 3");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title Icon", NULL, NULL, content, NULL);
+
+       //Subtitle
+       elm_object_item_part_text_set(navi_it, "subtitle", "Subtitle Text");
+
+       //Title Icon
+       ic = elm_image_add(nf);
+       snprintf(buf, sizeof(buf), "%s/g1.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_item_part_content_set(navi_it, "icon", ic);
+
+       //Title Icon Left Button
+       btn = _create_title_edit_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, NULL, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _fourth_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _second_page(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Object_Item *navi_it, *toolbar_it[2];
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 2");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title Text Button", NULL, NULL, content, NULL);
+
+       //Title Text Left Button
+       btn = _create_title_text_btn(nf, "Prev", _prev_cb, nf);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+
+       //Title Text Right Button
+       btn = _create_title_text_btn(nf, "Next", _third_page, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //2 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       toolbar_it[0] = elm_toolbar_item_append(toolbar, NULL, "Prev", _prev_cb, nf);
+       toolbar_it[1] = elm_toolbar_item_append(toolbar, NULL, "Next", _third_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _first_page(Evas_Object *nf)
+{
+       Evas_Object *content, *btn, *toolbar;
+       Elm_Object_Item *navi_it;
+
+       if (nf == NULL) return;
+
+       content = _create_nocontent(nf, "Naviframe Demo<br>Page 1");
+
+       //Push a new item
+       navi_it = elm_naviframe_item_push(nf, "Title Text", NULL, NULL, content, NULL);
+
+       //Register item pop callback function
+       elm_naviframe_item_pop_cb_set(navi_it, _quit_cb, nf);
+
+       //Title Icon Right Button
+       btn = _create_title_plus_btn(nf, _second_page, nf);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+
+       //HW More Button
+       btn = create_toolbar_more_btn(nf, _second_page, navi_it);
+       elm_object_item_part_content_set(navi_it, "toolbar_more_btn", btn);
+
+       //1 Item Toolbar
+       toolbar = elm_toolbar_add(nf);
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(toolbar, NULL, "Next", _second_page, nf);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+void naviframe_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *nf;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       layout_main = ad->layout_main;
+       elm_object_content_unset(ad->conform);
+       evas_object_hide(ad->layout_main);
+
+       nf = elm_naviframe_add(ad->conform);
+       elm_object_content_set(ad->conform, nf);
+       evas_object_show(nf);
+
+       //Register HW back button and HW more button for naviframe
+       ea_object_event_callback_add(nf, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
+       ea_object_event_callback_add(nf, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
+
+       conform = ad->conform;
+       _first_page(nf);
+}
diff --git a/live.viewer/dbox.app/src/panes.c b/live.viewer/dbox.app/src/panes.c
new file mode 100644 (file)
index 0000000..22df27b
--- /dev/null
@@ -0,0 +1,346 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "panes.h"
+
+/*********************************************************
+ panes
+ ********************************************************/
+static void _panes_default_cb(void *data, Evas_Object *obj, void *event_info);
+
+static void _panes_fixed_cb(void *data, Evas_Object *obj, void *event_info);
+
+static Evas_Object *_create_default_panes(Evas_Object *parent);
+
+static Evas_Object *_create_fixed_panes(Evas_Object *parent);
+
+static double size = 0.0;
+
+static struct _menu_item menu_its[] = {
+       {"Movable Pane", _panes_default_cb},
+       {"Fixed Pane", _panes_fixed_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+typedef struct _Panes_Data Panes_Data;
+
+struct _Panes_Data
+{
+       Evas_Object *parent;
+       Evas_Object *panes;
+       Evas_Object *content_right;
+       Eina_Bool panes_pressed;
+};
+
+static Panes_Data pd;
+
+static void
+_list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       Panes_Data *pd = (Panes_Data *) data;
+
+       set_rotate_cb_for_winset(NULL, NULL);
+       if (pd->content_right) {
+               elm_object_part_content_unset(pd->panes, "right");
+               evas_object_del(pd->content_right);
+       }
+
+       return EINA_TRUE;
+}
+
+static int
+_rotate_panes_cb(enum appcore_rm rotmode, void *data)
+{
+       Panes_Data *pd = (Panes_Data *) data;
+
+       if (pd->panes_pressed)
+               evas_event_feed_mouse_up(evas_object_evas_get(pd->panes), 1, EVAS_BUTTON_NONE, 0, NULL);
+
+       switch (rotmode) {
+               case APPCORE_RM_PORTRAIT_NORMAL:
+               case APPCORE_RM_PORTRAIT_REVERSE:
+                       elm_object_part_content_set(pd->panes, "right", pd->content_right);
+                       break;
+
+               case APPCORE_RM_LANDSCAPE_NORMAL:
+               case APPCORE_RM_LANDSCAPE_REVERSE:
+                       elm_object_part_content_set(pd->panes, "right", pd->content_right);
+                       break;
+
+               case APPCORE_RM_UNKNOWN:
+                       elm_panes_content_left_size_set(pd->panes, 1.0);
+                       elm_object_part_content_unset(pd->panes, "right");
+                       evas_object_hide(pd->content_right);
+                       break;
+       }
+       return 0;
+}
+
+static Evas_Object *
+_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+static void
+_panes_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *panes;
+       Elm_Object_Item *it;
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+       panes = _create_default_panes(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Movable"), NULL, NULL, panes, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, (void *)&pd);
+}
+
+static void
+_panes_fixed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *panes;
+       Elm_Object_Item *it;
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+       panes = _create_fixed_panes(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Fixed"), NULL, NULL, panes, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, (void *)&pd);
+}
+
+static void
+_press(void *data, Evas_Object *obj, void *event_info)
+{
+       pd.panes_pressed = EINA_TRUE;
+       printf("press\n");
+}
+
+static void
+_unpress(void *data, Evas_Object *obj, void *event_info)
+{
+       pd.panes_pressed = EINA_FALSE;
+       printf("unpress, size : %f\n", elm_panes_content_left_size_get(obj));
+}
+
+static void
+_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("clicked\n");
+}
+
+static void
+_clicked_double(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("clicked double\n");
+       if (elm_panes_content_left_size_get(obj) > 0) {
+               size = elm_panes_content_left_size_get(obj);
+               elm_panes_content_left_size_set(obj, 0.0);
+       }
+       else
+               elm_panes_content_left_size_set(obj, size);
+}
+
+static Evas_Object *
+_create_default_panes(Evas_Object *parent)
+{
+       Evas_Object *panes, *panes_h, *btn;
+       Eina_Bool current_mode;
+
+       panes = elm_panes_add(parent);
+       pd.parent = parent;
+       pd.panes = panes;
+       //by default, pane's type is vertical
+       //setting the expansion weight hints for the pane
+       evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(panes);
+
+       //handlers for the signals emitted by the outer pane
+       evas_object_smart_callback_add(panes, "clicked", _clicked, panes);
+       evas_object_smart_callback_add(panes, "clicked,double", _clicked_double, panes);
+
+       evas_object_smart_callback_add(panes, "press", _press, panes);
+       evas_object_smart_callback_add(panes, "unpress", _unpress, panes);
+
+       //creating a control to be set as one of the contents of the pane
+       btn = elm_button_add(panes);
+       elm_object_text_set(btn, "Left");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the relative size of the left view of the pane
+       elm_panes_content_left_size_set(panes, 0.5);
+       //setting the left content of the pane
+       elm_object_part_content_set(panes, "left", btn);
+
+       //right content of the pane
+       panes_h = elm_panes_add(panes);
+       elm_panes_horizontal_set(panes_h, EINA_TRUE);
+       evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes_h, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(panes_h);
+
+       evas_object_smart_callback_add(panes_h, "clicked", _clicked, panes_h);
+       evas_object_smart_callback_add(panes_h, "clicked,double", _clicked_double, panes_h);
+
+       evas_object_smart_callback_add(panes_h, "press", _press, panes_h);
+       evas_object_smart_callback_add(panes_h, "unpress", _unpress, panes_h);
+
+       btn = elm_button_add(panes_h);
+       elm_object_text_set(btn, "Up");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the relative size of the left view of the pane
+       elm_panes_content_left_size_set(panes_h, 0.3);
+       //setting the top content of the horizontal pane
+       elm_object_part_content_set(panes_h, "left", btn);
+
+       btn = elm_button_add(panes_h);
+       elm_object_text_set(btn, "Down");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the bottom content of the horizontal pane
+       elm_object_part_content_set(panes_h, "right", btn);
+       pd.content_right = panes_h;
+       set_rotate_cb_for_winset(_rotate_panes_cb, &pd);
+       current_mode = is_portrait_mode();
+       if (current_mode == EINA_TRUE) {
+               _rotate_panes_cb(APPCORE_RM_PORTRAIT_NORMAL, &pd);
+       }
+       else {
+               _rotate_panes_cb(APPCORE_RM_LANDSCAPE_NORMAL, &pd);
+       }
+       return panes;
+}
+
+static Evas_Object *
+_create_fixed_panes(Evas_Object *parent)
+{
+       Evas_Object *panes, *panes_h, *btn;
+       Eina_Bool current_mode;
+
+       panes = elm_panes_add(parent);
+       pd.parent = parent;
+       pd.panes = panes;
+       //by default, pane's type is vertical
+       //setting the expansion weight hints for the pane
+       evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(panes);
+       //restrict the movement of handler with user interaction
+       elm_panes_fixed_set(panes, EINA_TRUE);
+
+       //handlers for the signals emitted by the outer pane
+       evas_object_smart_callback_add(panes, "clicked", _clicked, panes);
+       evas_object_smart_callback_add(panes, "clicked,double", _clicked_double, panes);
+
+       evas_object_smart_callback_add(panes, "press", _press, panes);
+       evas_object_smart_callback_add(panes, "unpress", _unpress, panes);
+
+       //creating a control to be set as one of the contents of the pane
+       btn = elm_button_add(panes);
+       elm_object_text_set(btn, "Left");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the relative size of the left view of the pane
+       elm_panes_content_left_size_set(panes, 0.5);
+       //setting the left content of the pane
+       elm_object_part_content_set(panes, "left", btn);
+
+       //right content of the pane
+       panes_h = elm_panes_add(panes);
+       elm_panes_horizontal_set(panes_h, EINA_TRUE);
+       evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes_h, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(panes_h);
+       //restrict the movement of handler with user interaction
+       elm_panes_fixed_set(panes_h, EINA_TRUE);
+
+       evas_object_smart_callback_add(panes_h, "clicked", _clicked, panes_h);
+       evas_object_smart_callback_add(panes_h, "clicked,double", _clicked_double, panes_h);
+
+       evas_object_smart_callback_add(panes_h, "press", _press, panes_h);
+       evas_object_smart_callback_add(panes_h, "unpress", _unpress, panes_h);
+
+       btn = elm_button_add(panes_h);
+       elm_object_text_set(btn, "Up");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the relative size of the left view of the pane
+       elm_panes_content_left_size_set(panes_h, 0.3);
+       //setting the top content of the horizontal pane
+       elm_object_part_content_set(panes_h, "left", btn);
+
+       btn = elm_button_add(panes_h);
+       elm_object_text_set(btn, "Down");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       //setting the bottom content of the horizontal pane
+       elm_object_part_content_set(panes_h, "right", btn);
+       pd.content_right = panes_h;
+       set_rotate_cb_for_winset(_rotate_panes_cb, &pd);
+       current_mode = is_portrait_mode();
+       if (current_mode == EINA_TRUE) {
+               _rotate_panes_cb(APPCORE_RM_PORTRAIT_NORMAL, &pd);
+       }
+       else {
+               _rotate_panes_cb(APPCORE_RM_LANDSCAPE_NORMAL, &pd);
+       }
+       return panes;
+}
+
+void
+panes_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Split View"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/popup.c b/live.viewer/dbox.app/src/popup.c
new file mode 100644 (file)
index 0000000..d57b032
--- /dev/null
@@ -0,0 +1,2695 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "popup.h"
+
+/*********************************************************
+  popup
+ ********************************************************/
+static Evas_Object *popup_global = NULL;
+static Evas_Object *popup_global_2 = NULL;
+static Elm_Genlist_Item_Class itc;
+static Ecore_Timer *pb_timer = NULL;
+static Ecore_Timer *del_timer = NULL;
+static Evas_Object *list = NULL;
+static Eina_Bool rotcb_set = EINA_FALSE;
+static Eina_Bool rotation_cb = EINA_FALSE;
+static Evas_Object *inner_layout = NULL;
+static Evas_Object *label1 = NULL;
+static Evas_Object *label2 = NULL;
+static int state_index = 0; //selected radio index
+static Evas_Object *gen_popup = NULL;
+Evas_Object *win = NULL;
+
+#define IMAGE_MAX 20
+
+typedef struct _Item_Data
+{
+       int index;
+       Evas_Object *genlist;
+       Elm_Object_Item *item;
+} Item_Data;
+
+static void _on_rotation_changed(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_1line_change(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_2line_change(void *data, Evas_Object *obj, void *event_info );
+static void _on_rotation_gengrid_3line_change(void *data, Evas_Object *obj, void *event_info );
+static void _text_rotation_changed(void *data, Evas_Object *obj, void *event_info );
+
+typedef struct _Colorplane_Data Colorplane_Data;
+struct _Colorplane_Data
+{
+       Evas_Object *layout;
+       Evas_Object *colorselector;
+       Elm_Object_Item *it_last;
+       Elm_Object_Item *sel_it;
+       struct appdata *ad;
+       Eina_Bool changed;
+       int r, g, b, a;
+};
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *text;
+       const char *path;
+} Testitem;
+
+typedef struct _grid_data
+{
+       Elm_Object_Item *selected_item;
+       Eina_Bool selected;
+} grid_data;
+
+static char *Items[] = {
+       "Benny Benassi", "Main Item 2", "Main Item 3",
+       "Main Item 4", "Main Item 5", "Main Item 6",
+       "Main Item 7", "Main Item 8"
+};
+static char *Sub_Items[] = {
+       "08282828282", "Sub Item 2", "Sub Item 3",
+       "Sub Item 4", "Sub Item 5", "Sub Item 6",
+       "Sub Item 7", "Sub Item 8"
+};
+
+static void _popup_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_scroll_freeze_get(list)) elm_object_scroll_freeze_pop(list);
+}
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       if (popup_global) {
+               evas_object_del(popup_global);
+               popup_global = NULL;
+       }
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+
+       return EINA_TRUE;
+}
+
+static void _genlist_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_genlist_selected_item_get(obj);
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_genlist_item_selected_set(it, EINA_FALSE);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (!it) return;
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _show_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *icon;
+       char buf[1024];
+       icon = elm_image_add(inner_layout);
+       snprintf(buf, sizeof(buf), "%s/00_img_smart_stay.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_aspect_fixed_set(icon, EINA_FALSE);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       evas_object_show(label1);
+       evas_object_show(label2);
+       elm_object_part_content_set(inner_layout, "elm.swallow.content1", label1);
+       elm_object_part_content_set(inner_layout, "elm.swallow.content3", label2);
+       elm_object_part_content_set(inner_layout, "elm.swallow.content2", icon);
+}
+
+
+static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       if (rotation_cb) {
+               evas_object_smart_callback_del(win, "rotation,changed", _text_rotation_changed);
+               rotation_cb = EINA_FALSE;
+       }
+       evas_object_del(obj);
+}
+
+static void _timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       evas_object_del(obj);
+}
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+
+       if (rotcb_set) {
+               evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_changed);
+               rotcb_set = EINA_FALSE;
+       }
+
+       evas_object_del(data);
+}
+
+static void _password_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
+               if (elm_object_focus_get(obj)) {
+                       if (elm_entry_is_empty(obj))
+                               elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+                       else
+                               elm_object_signal_emit(obj, "elm,state,clear,visible", "");
+               }
+       }
+}
+
+static void _password_focused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear")) {
+               if (!elm_entry_is_empty(obj))
+                       elm_object_signal_emit(obj, "elm,state,clear,visible", "");
+               else
+                       elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+       }
+       elm_object_signal_emit(obj, "elm,state,focus,on", "");
+}
+
+static void _password_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (elm_object_part_content_get(obj, "elm.swallow.clear"))
+               elm_object_signal_emit(obj, "elm,state,clear,hidden", "");
+       elm_object_signal_emit(obj, "elm,state,focus,off", "");
+}
+
+static void _eraser_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_entry_entry_set(data, "");
+}
+
+static void _password_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout = data;
+       Evas_Object *entry = elm_object_part_content_get(layout, "elm.swallow.content");
+       Eina_Bool state;
+       state = elm_check_state_get(obj);
+
+       if (state)
+               elm_entry_password_set(entry, EINA_FALSE);
+       else
+               elm_entry_password_set(entry, EINA_TRUE);
+}
+
+static void _response_global_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_scroll_freeze_pop(list);
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       evas_object_hide(data);
+}
+
+static void _list_item_click(Evas_Object *obj, int index)
+{
+       printf("Index of the list=%d\n", index);
+       evas_object_del(obj);
+}
+
+static void _test(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!data) return;
+       Evas_Object *e_n = (Evas_Object *)data;
+       if (!elm_entry_is_empty(obj) && elm_entry_is_empty(e_n)) {
+               elm_object_focus_set(e_n, EINA_TRUE);
+               elm_entry_cursor_end_set(e_n);
+       }
+}
+
+static Eina_Bool _timer_cb(void *data)
+{
+       Evas_Object *popup = (Evas_Object *)data;
+       _timeout_cb(NULL, popup, NULL);
+       del_timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("item selected: %p\n", event_info);
+}
+
+static char * grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if (!strcmp(part, "elm.text"))
+               return strdup(ti->text);
+
+       return NULL;
+}
+
+static Evas_Object * grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+
+       if(!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_gengrid_sel(void *data, Evas_Object *obj, void *ei)
+{
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_1line_change);
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_2line_change);
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_3line_change);
+       evas_object_del(data);
+}
+
+static void
+_gengrid_sel_mode(void *data, Evas_Object *obj, void *ei)
+{
+       grid_data *gd = data;
+       elm_gengrid_item_selected_set(ei, EINA_FALSE);
+       printf("sel | item:%p, sel_it:%p, sel:%d\n",ei, gd->selected_item, gd->selected);
+       if(gd->selected && gd->selected_item == ei){
+               gd->selected = EINA_FALSE;
+           gd->selected_item = NULL;
+       }
+       else{
+               elm_object_item_signal_emit(ei, "elm,select,enabled", "");
+           gd->selected = EINA_TRUE;
+           gd->selected_item = ei;
+       }
+}
+
+static void
+_gengrid_unsel_mode(void *data, Evas_Object *obj, void *ei)
+{
+       grid_data *gd = data;
+       printf("unsel | item:%p, sel_it:%p, sel:%d\n",ei, gd->selected_item, gd->selected);
+       if(gd->selected_item)
+               elm_object_item_signal_emit(gd->selected_item, "elm,select,disabled", "");
+}
+
+static Evas_Object *
+_create_gengrid(void *data, Evas_Object *popup, int row, int col, void *gdata)
+{
+       Evas_Object *parent = (Evas_Object *)data;
+       Evas_Object *gengrid;
+       Elm_Gengrid_Item_Class *gic;
+       int i, j, n, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX];
+       grid_data *gd = gdata;
+
+       gengrid = elm_gengrid_add(parent);
+       elm_object_style_set(gengrid, "popup");
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_gengrid_align_set(gengrid, 0.5, 0.5);
+
+       double scale = elm_config_scale_get();
+       w = (int)((190 + (14 * 2)) * scale); // Gengrid item width (image area width + left/right padding) from Winset UX Guide
+       h = (int)((150 + (37 * 2)) * scale); // Gengrid item height (image area height + top/bottom padding) from Winset UX Guide
+
+       elm_gengrid_item_size_set(gengrid, w, h);
+       if (gd) {
+               gd->selected = EINA_FALSE;
+               gd->selected_item = NULL;
+               evas_object_smart_callback_add(gengrid, "selected", _gengrid_sel_mode, gd);
+               evas_object_smart_callback_add(gengrid, "unselected", _gengrid_unsel_mode, gd);
+       } else evas_object_smart_callback_add(gengrid, "selected", _gengrid_sel, popup);
+
+       gic = elm_gengrid_item_class_new();
+       gic->item_style = "default";
+       gic->func.text_get = grid_text_get;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       for (j = 0; j < row; j++) {
+               for (i = 0; i < col; i++) {
+                       n = i + (j * IMAGE_MAX);
+                       snprintf(buf, sizeof(buf), "%s/grid_image/%d_raw.jpg", ICON_DIR, i + 1);
+                       ti[n].path = eina_stringshare_add(buf);
+
+                       ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected,
+                                       &(ti[i]));
+                       if (n % 4 == 0)
+                               ti[n].text = strdup("yyyjjjyyyABCDEFG");
+                       else if (n % 4 == 1)
+                               ti[n].text = strdup("ABCDEFGBiiijjjhhk");
+                       else if (n % 4 == 2)
+                               ti[n].text = strdup("LMNOPLKDKlkixjjjii");
+                       else
+                       ti[n].text = strdup("I have long name.jpg");
+               }
+       }
+       elm_gengrid_item_class_free(gic);
+
+       elm_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_OFF,ELM_SCROLLER_POLICY_OFF);
+       evas_object_show(gengrid);
+       return gengrid;
+}
+
+static void _back_text_popup_cb(void *data, Evas_Object *obj, void *event_info )
+{
+       if (rotation_cb) {
+               evas_object_smart_callback_del(win, "rotation,changed", _text_rotation_changed);
+               rotation_cb = EINA_FALSE;
+       }
+       evas_object_del(obj);
+}
+
+
+static void _popup_label_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *scroller;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *label;
+       int rotation;
+       char str[1000]= {'\0'};
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_text_popup_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       strcpy(str, "This popup has only text which can be set by two ways, "
+               "if text is small set is via description text. If text is more than a "
+               "limit,create a layout in popup, this layout will have a scroller which "
+               "minimum value will be decided by application from layout and then "
+               "label will have text.Add this label to scroller and scroller is added "
+               "to layout, then set layout as content of popup.This way to be used when "
+               " application has text will does not fit in screen and popup needs to "
+               " be restricted in size after a limit. ");
+
+       if (strlen(str) < 500) {
+               elm_object_text_set(popup, str);
+       }
+       else {
+               layout = elm_layout_add(popup);
+               rotation = elm_win_rotation_get(ad->win_main);
+               if (rotation == 90 || rotation == 270)
+                       elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout_landscape");
+               else
+                       elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout");
+               evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+               label = elm_label_add(popup);
+               elm_object_style_set(label, "popup/default");
+               elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+               elm_object_text_set(label, str);
+               evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+               evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_show(label);
+
+               scroller = elm_scroller_add(layout);
+               elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+               elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+               evas_object_show(scroller);
+               elm_object_content_set(scroller, label);
+
+               elm_object_part_content_set(layout, "elm.swallow.content", scroller);
+
+               elm_object_content_set(popup, layout);
+               evas_object_smart_callback_add(ad->win_main, "rotation,changed", _text_rotation_changed, layout);
+               rotation_cb = EINA_TRUE;
+       }
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_info_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_text_popup_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, "This popup has only text which is set via desc set"
+                       " function, (This popup gets hidden when user "
+                       " clicks outside) here timeout of 3 sec is set.");
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       if (!elm_config_access_get())
+       {
+               elm_popup_timeout_set(popup, 3.0);
+               evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       }
+       else
+       {
+               evas_object_smart_callback_add(popup, "access,read,stop", _timeout_cb, NULL);
+       }
+       evas_object_show(popup);
+
+}
+
+static void _popup_center_title_info_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       elm_popup_timeout_set(popup, 3.0);
+       elm_object_text_set(popup,"This Popup has title area and description area "
+               "testing wrapping ABCDE-FGHIJ-KLMNO-PQRST-UVWXYZ (This popup gets "
+               "hidden when user clicks outside and has a timeout of 3 seconds)");
+       evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_2button_cb(void *data, Evas_Object *obj,
+       void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has two buttons OK and Cancel.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_3button_cb(void *data, Evas_Object *obj,
+       void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has two buttons OK, Cancel and Close.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_vertical_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_style_set(popup, "verticalbuttonstyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This popup has content area and two buttons,"
+               " aligned vertically.");
+       elm_layout_signal_emit(popup, "elm,state,2button", "elm");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_vertical_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+               (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_style_set(popup, "verticalbuttonstyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This popup has content area and three buttons,"
+               " aligned vertically.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad = (struct appdata *) data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has title area, content area and action"
+               " area set, action area has two buttons OK and Cancel.");
+       elm_object_part_text_set(popup, "title,text", "Title");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_basic_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       struct appdata *ad = (struct appdata *) data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has content area and "
+               "action area, action area has one button OK.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_1_button_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global = NULL;
+}
+
+static void _popup_center_title_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *btn1;
+       struct appdata *ad = (struct appdata *) data;
+
+       elm_object_scroll_freeze_push(list);
+       if (popup_global) {
+               evas_object_show(popup_global);
+       } else {
+               popup_global = elm_popup_add(ad->win_main);
+               evas_object_event_callback_add
+                    (popup_global, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+               ea_object_event_callback_add(popup_global, EA_CALLBACK_BACK,
+                               _popup_center_title_1_button_back_cb, NULL);
+
+               elm_object_part_text_set(popup_global, "title,text", "Title");
+               elm_object_text_set(popup_global, "This Popup has title area,"
+                       " content area and action area,"
+                       " action area has one button OK");
+               btn1 = elm_button_add(popup_global);
+               elm_object_style_set(btn1, "popup");
+               elm_object_text_set(btn1, "OK");
+               elm_object_part_content_set(popup_global, "button1", btn1);
+               evas_object_smart_callback_add(btn1, "clicked", _response_global_cb, popup_global);
+               evas_object_show(popup_global);
+       }
+}
+
+static Eina_Bool _fn_pb_timer(void *data)
+{
+       double value=0.0;
+       Evas_Object *progressbar = (Evas_Object*) data;
+
+       value = elm_progressbar_value_get(progressbar);
+       if (value == 1.0) {
+               _timeout_cb(NULL, popup_global_2, NULL);
+               pb_timer = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+       value = value + 0.01;
+       elm_progressbar_value_set(progressbar, value);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void _popup_center_processing_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *label;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "pop-up dialog box, a child window that blocks user interact to the parent");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_processingview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_object_style_set(progressbar, "process_large");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_content_set(layout, "elm.swallow.text", label);
+
+       elm_object_content_set(popup, layout);
+       elm_popup_timeout_set(popup, 3.0);
+       evas_object_smart_callback_add(popup, "timeout", _timeout_cb, NULL);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_processing_1button_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+}
+
+static void _popup_center_processing_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_processing_1button_back_cb, NULL);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_processingview_1button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_object_style_set(progressbar, "process_large");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_text_set(layout, "elm.text", "processing ");
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Cancel");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_progressbar_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+}
+
+static void _popup_center_progressbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *progressbar;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_progressbar_back_cb, NULL);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_progressview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       pb_timer = ecore_timer_add(0.1, _fn_pb_timer, progressbar);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_text_set(layout, "elm.title", "Text Text");
+       elm_object_part_text_set(layout, "elm.text.left", "Text");
+       elm_object_part_text_set(layout, "elm.text.right", "TextTextTextText");
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Cancel");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_text_progressbar_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       popup_global_2 = NULL;
+
+       if (pb_timer) {
+               ecore_timer_del(pb_timer);
+               pb_timer = NULL;
+       }
+}
+
+static void _popup_center_text_progressbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup,*progressbar;
+       struct appdata *ad;
+       Evas_Object *layout, *label;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_text_progressbar_back_cb, NULL);
+
+       label = elm_label_add(popup);
+       elm_object_style_set(label, "popup/progressview");
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Push the WPS button on your wireless access point");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_text_progressview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_progress");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       pb_timer = ecore_timer_add(0.1, _fn_pb_timer, progressbar);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
+       elm_object_part_text_set(layout, "elm.text.subtext1", "Left-Text");
+       elm_object_part_text_set(layout, "elm.text.subtext2", "Right-Text");
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Cancel");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       popup_global_2 = popup;
+       evas_object_show(popup);
+}
+
+static void _popup_center_check_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *label;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Use packet data must be enabled to access data service. change settings?");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_checkview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(popup);
+       elm_object_style_set(check, "multiline");
+       elm_object_text_set(check, "Don't ask again Don't ask again  Don't ask again  Don't ask again  Don't ask again  Don't ask again  ");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(check);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static char *_access_info_cb(void *data, Evas_Object *obj)
+{
+       char * text = (char *)data;
+       return strdup(text);
+}
+
+static void _popup_center_check_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *label;
+       Evas_Object *icon;
+       struct appdata *ad;
+       char *text = NULL;
+       char buf[1024];
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       elm_object_part_text_set(popup, "title,text", "Title");
+       label = elm_label_add(popup);
+       elm_label_line_wrap_set(label, ELM_WRAP_MIXED);
+       elm_object_text_set(label, "Use packet data must be enabled to access data service. change settings?");
+       evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label);
+
+       text = (char*)elm_object_text_get(label);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_checkview_image");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Don't ask again");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(check);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/wood_01.jpg", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_aspect_fixed_set(icon, EINA_FALSE);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", label);
+       elm_object_part_content_set(layout, "elm.swallow.icon", icon);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_access_object_unregister(label);
+
+       Evas_Object * body = (Evas_Object*)edje_object_part_object_get(_EDJ(popup), "access.body");
+       Evas_Object *ao = elm_access_object_register(body, popup);
+       elm_access_info_cb_set(ao, ELM_ACCESS_INFO, _access_info_cb, text);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static Evas_Object * item_provider(void *images, Evas_Object *en, const char *item)
+{
+       Evas_Object *obj = NULL;
+       char buf[1024];
+
+       if (!strcmp(item, "itemprovider"))
+       {
+               snprintf(buf, sizeof(buf), "%s/00_button_radio_press1.png", ICON_DIR);
+               obj = evas_object_image_filled_add(evas_object_evas_get(en));
+               evas_object_image_file_set(obj, buf, NULL);
+       }
+
+       return obj;
+}
+
+static void _text_rotation_changed(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "label_layout");
+}
+
+static void _on_rotation_changed(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1");
+}
+
+static void _popup_center_check_text_image_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+
+       if (rotcb_set) {
+               evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_changed);
+               rotcb_set = EINA_FALSE;
+       }
+}
+
+static void _popup_center_check_text_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *check;
+       Evas_Object *layout;
+       Evas_Object *scroller;
+       Evas_Object *btn;
+
+       struct appdata *ad;
+       int rotation;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_center_check_text_image_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Smart stay");
+
+       label1 = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(label1, EINA_TRUE);
+       elm_entry_editable_set(label1, EINA_FALSE);
+       elm_object_text_set(label1, "<align=left>Smart stay disables screen timeout if device detects that your face is watching the screen.</align>");
+       evas_object_size_hint_weight_set(label1, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       label2 = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(label2, EINA_TRUE);
+       elm_entry_editable_set(label2, EINA_FALSE);
+       elm_entry_item_provider_append(label2, item_provider, NULL);
+       elm_object_text_set(label2, "<align=left>Smart stay may not work in these situations.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when front camera fails to detect face.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when using device in the dark.<br>"
+               "<item size=42x42 vsize=full href=itemprovider></item> when front camera is used for the application.</align>");
+       evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       layout = elm_layout_add(popup);
+       rotation = elm_win_rotation_get(ad->win_main);
+       if (rotation == 90 || rotation == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1_landscape");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_smartstay1");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       inner_layout = elm_layout_add(popup);
+       elm_layout_file_set(inner_layout, ELM_DEMO_EDJ, "popup_smartstay1_internal");
+       evas_object_size_hint_weight_set(inner_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       scroller = elm_scroller_add(layout);
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+       elm_object_content_set(scroller, inner_layout);
+
+       elm_object_part_content_set(layout, "elm.swallow.layout", scroller);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Don't ask again");
+       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       evas_object_smart_callback_add(popup, "show,finished", _show_clicked_cb,
+               NULL);
+       elm_object_content_set(popup, layout);
+       btn = elm_button_add(popup);
+       elm_object_style_set(btn, "popup");
+       elm_object_text_set(btn, "OK");
+       elm_object_part_content_set(popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_changed, layout);
+       rotcb_set = EINA_TRUE;
+}
+
+static void _popup_center_image_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *icon;
+       char buf[4096];
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_style_set(popup, "content_expand");
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_center_image");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_video call.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", icon);
+
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void __popup_keypad_on(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object * popup = data;
+       int rotation = elm_win_rotation_get(win);
+       if (rotation == 90 || rotation == 270)
+               elm_popup_orient_set(popup, ELM_POPUP_ORIENT_BOTTOM);
+       else
+               elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+}
+
+static void __popup_keypad_off(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object * popup = data;
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+}
+
+static void _entry_popup_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       evas_object_del(obj);
+       evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,on", __popup_keypad_on);
+       evas_object_smart_callback_del(ad->conform, "virtualkeypad,state,off", __popup_keypad_off);
+}
+
+static void _popup_entry_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *btn1;
+
+       ad = (struct appdata *) data;
+
+       popup = elm_popup_add(ad->nf);
+       elm_object_style_set(popup, "no_effect");
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _entry_popup_back_cb, ad);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_entryview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       entry = elm_entry_add(popup);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_object_text_set(entry, "This is a scrolled entry hence has a default size");
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+       elm_object_content_set(popup, layout);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,on", __popup_keypad_on, popup);
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,off", __popup_keypad_off, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_entry_password_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *entry2;
+       Evas_Object *entry3;
+       Evas_Object *entry4;
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->nf);
+       elm_object_style_set(popup, "no_effect");
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "entrypasswordview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       entry = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_entry_password_set(entry, EINA_TRUE);
+       limit_filter_data.max_byte_count = 0;
+       limit_filter_data.max_char_count = 1;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_object_style_set(entry, "popup");
+       elm_object_part_content_set(layout, "elm.entry1", entry);
+
+       entry2 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry2, EINA_TRUE);
+       elm_entry_password_set(entry2, EINA_TRUE);
+       elm_entry_markup_filter_append(entry2, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_object_style_set(entry2, "popup");
+       elm_object_part_content_set(layout, "elm.entry2", entry2);
+
+       entry3 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry3, EINA_TRUE);
+       elm_entry_password_set(entry3, EINA_TRUE);
+       elm_entry_markup_filter_append(entry3, elm_entry_filter_limit_size,
+               &limit_filter_data);
+       elm_object_style_set(entry3, "popup");
+       elm_object_part_content_set(layout, "elm.entry3", entry3);
+
+       entry4 = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry4, EINA_TRUE);
+       elm_entry_password_set(entry4, EINA_TRUE);
+       elm_entry_markup_filter_append(entry4, elm_entry_filter_limit_size,
+               &limit_filter_data);
+       elm_object_style_set(entry4, "popup");
+       elm_object_part_content_set(layout, "elm.entry4", entry4);
+
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb,
+               NULL);
+       evas_object_smart_callback_add(entry, "changed", _test, entry2);
+       evas_object_smart_callback_add(entry2, "changed", _test, entry3);
+       evas_object_smart_callback_add(entry3, "changed", _test, entry4);
+       evas_object_smart_callback_add(entry4, "changed", _test, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_entry_password_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *entry;
+       Evas_Object *check;
+       Evas_Object *button;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       popup = elm_popup_add(ad->nf);
+       elm_object_style_set(popup, "no_effect");
+
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "popup", "entrypasswordview_2button");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(popup, "title,text", "Enter password");
+
+       entry = elm_entry_add(layout);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_object_style_set(entry, "editfield/password/popup");
+       elm_entry_password_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_prediction_allow_set(entry, EINA_FALSE);
+       elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
+       elm_object_part_text_set(entry, "elm.guide", "editfield/password/popup");
+       evas_object_smart_callback_add(entry, "changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "preedit,changed", _password_changed_cb, NULL);
+       evas_object_smart_callback_add(entry, "focused", _password_focused_cb, NULL);
+       evas_object_smart_callback_add(entry, "unfocused", _password_unfocused_cb, NULL);
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+
+       button = elm_button_add(layout);
+       elm_object_style_set(button, "search_clear");
+       elm_object_focus_allow_set(button, EINA_FALSE);
+       elm_object_part_content_set(entry, "elm.swallow.clear", button);
+       evas_object_smart_callback_add(button, "clicked", _eraser_btn_clicked_cb, entry);
+
+       check = elm_check_add(popup);
+       elm_object_text_set(check, "Show Password");
+       elm_object_focus_allow_set(check, EINA_FALSE);
+       evas_object_smart_callback_add(check, "changed", _password_check_cb, layout);
+       elm_object_part_content_set(layout, "elm.swallow.end", check);
+
+       elm_object_content_set(popup, layout);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "OK");
+       elm_object_part_content_set(popup, "button1", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       button = elm_button_add(popup);
+       elm_object_style_set(button, "popup");
+       elm_object_text_set(button, "Cancel");
+       elm_object_part_content_set(popup, "button2", button);
+       evas_object_smart_callback_add(button, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+}
+
+static void _volume_ver_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       double value;
+       Evas_Object *icon;
+       char buf[4096];
+       static double old_value = 10.0;
+
+       icon = elm_object_part_content_get(obj, "icon");
+       value = elm_slider_value_get(obj);
+
+       if (value < 1.0 && old_value >= 1.0) {
+               snprintf(buf, sizeof(buf), "%s/00_volume_icon_mute.png", ICON_DIR);
+               elm_image_file_set(icon, buf, NULL);
+       }
+       else if (value >= 1.0 && old_value < 1.0){
+               snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+               elm_image_file_set(icon, buf, NULL);
+       }
+       old_value = value;
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+       del_timer = ecore_timer_add(3.0, _timer_cb, data);
+}
+
+static void _popup_volumepopup1_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       Evas_Object *setting_icon;
+       Evas_Object *ao;
+       Eina_List *l = NULL;
+       char buf[4096];
+       char buf1[4096];
+
+       popup = elm_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumebar");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(popup);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(popup);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       setting_icon = elm_image_add(layout);
+       snprintf(buf1, sizeof(buf1), "%s/00_volume_icon_settings.png", ICON_DIR);
+       elm_image_file_set(setting_icon, buf1, NULL);
+       elm_image_resizable_set(setting_icon, EINA_TRUE, EINA_TRUE);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", vbar);
+       elm_object_part_content_set(layout, "elm.swallow.icon", setting_icon);
+
+       ao = elm_access_object_register(setting_icon, layout);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, "sound setting");
+
+       l = eina_list_append(l, vbar);
+       l = eina_list_append(l, ao);
+
+       elm_object_focus_custom_chain_set(layout, l);
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_volumepopup1_text_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *setting_icon;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       Evas_Object *layout1;
+       char buf[4096];
+       char buf1[4096];
+
+       popup = elm_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumebar_text");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout1 = elm_layout_add(popup);
+       elm_layout_file_set(layout1, ELM_DEMO_EDJ, "popup_volumebar");
+       evas_object_size_hint_weight_set(layout1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(layout1);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(layout1);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       setting_icon = elm_image_add(layout1);
+       snprintf(buf1, sizeof(buf1), "%s/00_volume_icon_settings.png", ICON_DIR);
+       elm_image_file_set(setting_icon, buf1, NULL);
+       elm_image_resizable_set(setting_icon, EINA_TRUE, EINA_TRUE);
+
+       elm_object_part_content_set(layout1, "elm.swallow.content", vbar);
+       elm_object_part_content_set(layout1, "elm.swallow.icon", setting_icon);
+       elm_object_part_content_set(layout, "elm.swallow.content1", layout1);
+       elm_object_part_text_set(layout, "elm.swallow.text", "High volumes may harm your hearing if you listen for a long time");
+
+       evas_object_show(layout1);
+       evas_object_show(layout);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(vbar, "changed", _volume_ver_change_cb,popup);
+       del_timer = ecore_timer_add(3.0, _timer_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_volumepopup_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(obj);
+       if (del_timer) {
+               ecore_timer_del(del_timer);
+               del_timer = NULL;
+       }
+}
+
+static void _popup_volumepopup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *vbar;
+       Evas_Object *icon;
+       Evas_Object *layout;
+       char buf[4096];
+
+       popup = elm_popup_add(list);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _popup_volumepopup_back_cb, NULL);
+
+       elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP);
+
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_volumestyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       vbar = elm_slider_add(popup);
+       elm_slider_min_max_set(vbar, 0.0, 15.0);
+       elm_slider_value_set(vbar, 10.0);
+       icon = elm_image_add(popup);
+       snprintf(buf, sizeof(buf), "%s/00_volume_icon.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_FALSE, EINA_FALSE);
+       elm_object_part_content_set(vbar, "icon", icon);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", vbar);
+       elm_object_content_set(popup, layout);
+       evas_object_smart_callback_add(vbar, "changed", _volume_ver_change_cb,popup);
+       del_timer = ecore_timer_add(3.0, _timer_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _popup_center_title_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"This Popup has title area, content area and "
+                       "action area set, action area has three buttons OK, Cancel and "
+                       "Close.");
+       elm_object_part_text_set(popup, "title,text", "Title");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup = data;
+       int index = 0;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       if (item) {
+               index = (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n",Items[index]);
+       }
+       _list_item_click(popup, index);
+}
+
+static void _gl_radio_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       if (item) {
+               Item_Data *id = elm_object_item_data_get(item);
+               int index = id->index;
+               Evas_Object *radio = elm_object_item_part_content_get(item, "elm.icon");
+               state_index = index;
+               if (elm_radio_value_get(radio) == index) {
+                       elm_genlist_item_selected_set(item, EINA_FALSE);
+               }
+               elm_radio_value_set(radio, state_index);
+       }
+}
+
+static void
+_radio_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       evas_object_del(gen_popup);
+}
+
+static Evas_Object *
+_gl_radio_content_get(void *data, Evas_Object *obj, const char *part)
+{
+
+       Item_Data *id = data;
+       int index = id->index;
+       Evas_Object *radio;
+       Evas_Object *radio_main = evas_object_data_get(obj, "radio_main");
+
+       if (!strcmp(part, "elm.icon")) {
+               radio = elm_radio_add(obj);
+               elm_radio_group_add(radio, radio_main);
+               elm_radio_state_value_set(radio, index);
+               if (index == state_index) elm_radio_value_set(radio, state_index);
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND,EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_propagate_events_set(radio, EINA_FALSE);
+               elm_object_signal_callback_add(radio, "elm,action,show,finished", "elm",
+                               _radio_cb, NULL);
+               return radio;
+       }
+       return NULL;
+}
+
+static char *_gl_radio_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       Item_Data *id = (Item_Data *) data;
+
+       if (!strcmp(part, "elm.text.sub"))
+               return strdup(Sub_Items[id->index]);
+       else
+               return strdup(Items[id->index]);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data;
+
+       if (!strcmp(part, "elm.text.sub"))
+               return strdup(Sub_Items[index]);
+       else
+               return strdup(Items[index]);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       if (!strcmp(part, "elm.icon")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       else {
+               return NULL;
+       }
+}
+
+static void _gl_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!event_info) return;
+       int index = (int)elm_object_item_data_get(event_info);
+
+       if (index == 7) {
+               elm_object_item_signal_emit(event_info, "elm,state,bottomline,hide", "");
+       }
+}
+
+static void _track_resize(void *data, Evas *e, Evas_Object *obj, void *ei)
+{
+       char buf[256];
+       int idx;
+       Evas_Object *genlist;
+       Evas_Coord gh, h[4];
+       genlist = elm_object_item_widget_get(data);
+       idx = elm_genlist_item_index_get(data);
+       if (idx < 0) return;
+
+       evas_object_geometry_get(obj, NULL, NULL, NULL, &h[idx]);
+       snprintf(buf, 255, "item_h%d", idx);
+       evas_object_data_set(genlist, buf, (void *)h[idx]);
+
+       h[0] = (int)evas_object_data_get(genlist, "item_h0");
+       h[1] = (int)evas_object_data_get(genlist, "item_h1");
+       h[2] = (int)evas_object_data_get(genlist, "item_h2");
+       h[3] = (int)evas_object_data_get(genlist, "item_h3");
+
+       gh = h[0] + h[1] + h[2] + h[3];
+       evas_object_size_hint_min_set(genlist, 0, gh);
+       printf("track resize: %d: h:%d = %d + %d + %d + %d\n", idx, gh,
+                       h[0], h[1], h[2], h[3]);
+}
+
+static void _gl_realized_track(void *data, Evas_Object *obj, void *ei)
+{
+       if (!ei) return;
+       int index = (int)elm_object_item_data_get(ei);
+
+       // track usage
+       Evas_Object *track = elm_object_item_track(ei);
+       evas_object_event_callback_add(track, EVAS_CALLBACK_RESIZE, _track_resize, ei);
+
+       if (index == 3) {
+               elm_object_item_signal_emit(ei, "elm,state,bottomline,hide", "");
+       }
+}
+
+static void _popup_center_liststyle_1button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *btn1;
+       Evas_Object *box;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       itc.item_style = "1text/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       genlist = elm_genlist_add(box);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+       elm_box_pack_end(box, genlist);
+       evas_object_show(genlist);
+       /* The height of popup being adjusted by application here based on app requirement */
+       evas_object_size_hint_min_set(box, 618, 436);
+       evas_object_show(box);
+
+       elm_object_content_set(popup, box);
+       evas_object_show(popup);
+}
+
+static void _popup_center_liststyle_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *lst;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       Evas_Object *btn3;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       btn3 = elm_button_add(popup);
+       elm_object_style_set(btn3, "popup");
+       elm_object_text_set(btn3, "Close");
+       elm_object_part_content_set(popup, "button3", btn3);
+       evas_object_smart_callback_add(btn3, "clicked", _response_cb, popup);
+
+       lst = elm_list_add(layout);
+       elm_object_style_set(lst, "popup");
+       evas_object_size_hint_weight_set(lst, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(lst, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(lst, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_list_item_append(lst, Items[index], NULL, NULL, _gl_sel, data);
+       }
+       elm_object_part_content_set(layout, "elm.swallow.content" , lst);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_1linetext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       itc.item_style = "1text/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized_track, NULL);
+       for (index = 0; index < 4; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+
+       Evas_Object *base = (Evas_Object*)edje_object_part_object_get(_EDJ(popup), "access.base");
+       elm_access_object_unregister(base);
+
+       evas_object_show(popup);
+}
+
+static void _popup_2linetext_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       itc.item_style = "2text.2/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       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 (index = 0; index < 4; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized_track, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Evas_Object *genlist, *radio_main;
+       Evas_Object *layout;
+       struct appdata *ad = data;
+       gen_popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (gen_popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(gen_popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+       evas_object_size_hint_weight_set(gen_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(gen_popup);
+       elm_layout_theme_set(layout, "layout", "content", "liststyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       genlist = elm_genlist_add(layout);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized_track, NULL);
+
+       radio_main = elm_radio_add(genlist);
+       elm_radio_state_value_set(radio_main, 0);
+       elm_radio_value_set(radio_main, 0);
+       evas_object_data_set(genlist, "radio_main", radio_main);
+
+       itc.item_style = "1text.1icon.3/popup";
+       itc.func.text_get = _gl_radio_text_get;
+       itc.func.content_get = _gl_radio_content_get;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       for (index = 0; index < 4; index++) {
+               Item_Data *id = calloc(sizeof(Item_Data), 1);
+               id->index  = index;
+               Elm_Object_Item *item = elm_genlist_item_append(genlist, &itc, id, NULL,
+                               ELM_GENLIST_ITEM_NONE, _gl_radio_sel, NULL);
+               id->item = item;
+               id->genlist = genlist;
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(gen_popup, layout);
+       evas_object_show(gen_popup);
+}
+
+static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf(" \n popup item selected: %s\n", elm_object_item_text_get(event_info));
+}
+
+static void _popup_itemlist_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       unsigned int index;
+       Elm_Object_Item *item;
+       char buf[4096];
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       for (index = 0; index < 7; index++) {
+               snprintf(buf, sizeof(buf), "Item%u", index+1);
+               item = elm_popup_item_append(popup, buf, NULL, _item_selected_cb, NULL);
+               if (index == 1)
+                       elm_object_item_disabled_set(item ,EINA_TRUE);
+               if (index == 6)
+                       elm_object_item_signal_emit(item, "elm,state,bottomline,hide", "");
+       }
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_center_liststyle_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       int index;
+       Evas_Object *genlist;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       Evas_Object *btn2;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+
+       itc.item_style = "1text.1icon.2/popup";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+       genlist = elm_genlist_add(layout);
+       evas_object_smart_callback_add(genlist, "selected", _genlist_click, genlist);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_smart_callback_add(genlist, "realized", _gl_realized, NULL);
+       for (index = 0; index < 8; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, popup);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , genlist);
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_center_buttonstyle_3button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *btn;
+       Evas_Object *ic;
+       Evas_Object *btn1;
+       Evas_Object *layout;
+       char buf[4096];
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "nbpopup_3button_view");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_text_set(layout, "contact_label", "Text Text Text Text Text");
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_default", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_call.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Call"));
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_center", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_message.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Message"));
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_text_only_style1", btn);
+       ic = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_popup_icon_video call.png", ICON_DIR);
+       elm_image_file_set(ic, buf, NULL);
+       evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(btn, ic);
+       elm_object_text_set(btn, _("Video call"));
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_center_buttonstyle_2button_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *btn1;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "nbpopup_2button_view");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_object_part_text_set(layout, "contact_label", "Text Text Text Text Text");
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       Evas_Object *btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_default", btn);
+       elm_object_text_set(btn, _("Call"));
+
+       btn = elm_button_add(layout);
+       elm_object_part_content_set(layout, "btn_center", btn);
+       elm_object_text_set(btn, _("Message"));
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+}
+
+static void _popup_colorpalette_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r = 0, g = 0, b = 0 ,a = 0;
+       Colorplane_Data *cp = (Colorplane_Data *)data;
+       Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+       cp->sel_it = color_it;
+       elm_colorselector_palette_item_color_get(color_it, &r, &g, &b, &a);
+       elm_colorselector_color_set(cp->colorselector, r, g, b, a);
+}
+
+
+static void _popup_colorplane_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int r, g, b, a;
+       Colorplane_Data *cp = (Colorplane_Data*)data;
+       if (!cp->changed) {
+               elm_object_item_signal_emit(cp->it_last, "elm,state,custom,hide", "");
+               cp->changed = EINA_TRUE;
+       }
+       elm_colorselector_color_get(cp->colorselector, &r, &g, &b, &a);
+       cp->r = r;
+       cp->g = g;
+       cp->b = b;
+       cp->a = a;
+       elm_colorselector_palette_item_color_set(cp->it_last, r, g, b, a);
+       if (cp->sel_it != cp->it_last)
+               elm_object_item_signal_emit(cp->it_last, "elm,state,selected", "elm");
+}
+
+static void _popup_colorpalette(Evas_Object *layout, Colorplane_Data *cp)
+{
+       /* add color palette widget */
+       Eina_List *color_list, *last_list;
+
+       cp->colorselector = elm_colorselector_add(layout);
+       elm_object_style_set(cp->colorselector, "colorplane");
+       elm_colorselector_mode_set(cp->colorselector, ELM_COLORSELECTOR_PALETTE_PLANE);
+       evas_object_size_hint_fill_set(cp->colorselector, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(cp->colorselector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_content_set(layout, "colorpalette", cp->colorselector);
+       evas_object_smart_callback_add(cp->colorselector, "color,item,selected", _popup_colorpalette_cb, cp);
+
+       color_list = elm_colorselector_palette_items_get(cp->colorselector);
+       last_list = eina_list_last(color_list);
+       cp->it_last = eina_list_data_get(last_list);
+       elm_object_item_signal_emit(cp->it_last, "elm,state,custom,show", "");
+       cp->changed = EINA_FALSE;
+       evas_object_smart_callback_add(cp->colorselector, "changed", _popup_colorplane_cb, cp);
+       cp->sel_it = eina_list_nth(color_list, 3);
+       elm_object_item_signal_emit(cp->sel_it, "elm,state,selected", "elm");
+}
+
+static Evas_Object *_popup_create_colorplane(Evas_Object *parent, Colorplane_Data *cp)
+{
+       cp->layout = elm_layout_add(parent);
+       elm_layout_file_set(cp->layout, ELM_DEMO_EDJ, "colorplane_popup");
+       evas_object_size_hint_weight_set(cp->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(cp->layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(cp->layout);
+       _popup_colorpalette(cp->layout, cp);
+       return cp->layout;
+}
+
+static void _popup_colorpicker_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *content,*popup,*btn1,*btn2;
+       static Colorplane_Data cp;
+       if (data == NULL) return;
+       struct appdata *ad = data;
+       cp.ad = data;
+
+       popup = elm_popup_add(ad->nf);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, ea_popup_back_cb, NULL);
+
+       content = _popup_create_colorplane(popup, &cp);
+       elm_object_content_set(popup, content);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "Ok");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+
+       evas_object_show(popup);
+}
+
+static void _back_rotate_gengrid_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       grid_data *gd = NULL;
+       if (data) gd = data;
+       if (gd) free(gd);
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_1line_change);
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_2line_change);
+       evas_object_smart_callback_del(win, "rotation,changed", _on_rotation_gengrid_3line_change);
+       evas_object_del(obj);
+}
+
+static void _on_rotation_gengrid_1line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+}
+
+static void _popup_gengrid_1line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 1, 3, NULL);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_gengrid_1line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_gengrid_1line_select_mode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+       grid_data *gd;
+    gd = calloc(1, sizeof(grid_data));
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, gd);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_1line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_1line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 1, 3, gd);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_gengrid_1line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+static void _on_rotation_gengrid_2line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_2line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_2line");
+}
+
+static void _popup_gengrid_2line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_2line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_2line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 2, 3, NULL);
+
+       elm_gengrid_item_show(elm_gengrid_first_item_get(gengrid), ELM_GENGRID_ITEM_SCROLLTO_TOP);
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_gengrid_2line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _on_rotation_gengrid_3line_change(void *data, Evas_Object *obj, void *event_info )
+{
+       int rot = -1;
+       Evas_Object *win = obj;
+       Evas_Object *layout = data;
+
+       rot = elm_win_rotation_get(win);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+}
+
+static void _popup_gengrid_3line_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 3, 3, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_gengrid_3line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+static void _popup_gengrid_3line_scroll_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *gengrid;
+       int rot = -1;
+       struct appdata *ad = data;
+
+
+       popup = elm_popup_add(ad->win_main);
+       elm_object_scroll_freeze_push(list);
+       evas_object_event_callback_add
+            (popup, EVAS_CALLBACK_DEL, _popup_del_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _back_rotate_gengrid_cb, NULL);
+
+       elm_object_part_text_set(popup, "title,text", "Title");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       layout = elm_layout_add(popup);
+       rot = elm_win_rotation_get(ad->win_main);
+       if (rot == 90 || rot == 270)
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_rotate_3line");
+       else
+               elm_layout_file_set(layout, ELM_DEMO_EDJ, "popup_gengrid_custom_3line");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       gengrid = _create_gengrid(layout, popup, 6, 3, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , gengrid);
+       elm_object_content_set(popup, layout);
+
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _on_rotation_gengrid_3line_change, layout);
+       evas_object_smart_callback_add(popup, "block,clicked", _block_clicked_cb, NULL);
+       evas_object_show(popup);
+}
+
+void popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it;
+       struct appdata *ad = data;
+       if (ad == NULL) return;
+
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+       win = ad->win_main;
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+       it = elm_naviframe_item_push(ad->nf, _("Popup"), NULL, NULL, list, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+       elm_list_item_append(list, "popup- text", NULL, NULL,
+                       _popup_center_info_cb, ad);
+       elm_list_item_append(list, "popup- text+1 button", NULL, NULL,
+                       _popup_center_basic_1button_cb, ad);
+       elm_list_item_append(list, "popup- text+2 buttons", NULL, NULL,
+                       _popup_center_basic_2button_cb, ad);
+       elm_list_item_append(list, "popup- text+3 buttons", NULL, NULL,
+                       _popup_center_basic_3button_cb, ad);
+       elm_list_item_append(list, "popup- title+text", NULL, NULL,
+                       _popup_center_title_info_cb, ad);
+       elm_list_item_append(list, "popup- title+text+1 button", NULL, NULL,
+                       _popup_center_title_1button_cb, ad);
+       elm_list_item_append(list, "popup- title+text+2 buttons", NULL, NULL,
+                       _popup_center_title_2button_cb, ad);
+       elm_list_item_append(list, "popup- title+text+3 buttons", NULL, NULL,
+                       _popup_center_title_3button_cb, ad);
+       elm_list_item_append(list, "popup- text+2 vertical buttons", NULL, NULL,
+                       _popup_center_vertical_2button_cb, ad);
+       elm_list_item_append(list, "popup- text+3 vertical buttons", NULL, NULL,
+                       _popup_center_vertical_3button_cb, ad);
+       elm_list_item_append(list, "popup- text+check", NULL, NULL,
+                       _popup_center_check_cb, ad);
+       elm_list_item_append(list, "popup- text+check+image", NULL, NULL,
+                       _popup_center_check_image_cb, ad);
+       elm_list_item_append(list, "popup- text+image+text+check", NULL, NULL,
+                       _popup_center_check_text_image_cb, ad);
+       elm_list_item_append(list, "popup- big-icon", NULL, NULL,
+                       _popup_center_image_cb, ad);
+       elm_list_item_append(list, "popup-list -1btn", NULL, NULL,
+                       _popup_center_liststyle_1button_cb, ad);
+       elm_list_item_append(list, "popup-list -2btns", NULL, NULL,
+                       _popup_center_liststyle_2button_cb, ad);
+       elm_list_item_append(list, "popup-list -3btns", NULL, NULL,
+                       _popup_center_liststyle_3button_cb, ad);
+       elm_list_item_append(list, "popup-buttonstyle-3btns", NULL, NULL,
+                       _popup_center_buttonstyle_3button_cb, ad);
+       elm_list_item_append(list, "popup-buttonstyle-2btns", NULL, NULL,
+                       _popup_center_buttonstyle_2button_cb, ad);
+       elm_list_item_append(list, "popup-volumebar", NULL, NULL,
+                       _popup_volumepopup_cb, ad);
+       elm_list_item_append(list, "popup-volumebar1", NULL, NULL,
+                               _popup_volumepopup1_cb, ad);
+       elm_list_item_append(list, "popup-volumebar1_text", NULL, NULL,
+                       _popup_volumepopup1_text_cb, ad);
+       elm_list_item_append(list, "popup-center-progressbar", NULL, NULL,
+                       _popup_center_progressbar_cb, ad);
+       elm_list_item_append(list, "popup-center-processing", NULL, NULL,
+                       _popup_center_processing_cb, ad);
+       elm_list_item_append(list, "popup-center-processing_1button", NULL, NULL,
+                       _popup_center_processing_1button_cb, ad);
+       elm_list_item_append(list, "popup-entry", NULL, NULL,
+                       _popup_entry_cb, ad);
+       elm_list_item_append(list, "popup-entry-password", NULL, NULL,
+                       _popup_entry_password_cb, ad);
+       elm_list_item_append(list, "popup-entry-password-2-button", NULL, NULL,
+                       _popup_entry_password_2button_cb, ad);
+       elm_list_item_append(list, "popup-center_text-progressbar", NULL, NULL,
+                       _popup_center_text_progressbar_cb, ad);
+       elm_list_item_append(list, "popup-1 line", NULL, NULL,
+                       _popup_1linetext_cb, ad);
+       elm_list_item_append(list, "popup-2 line", NULL, NULL,
+                       _popup_2linetext_cb, ad);
+       elm_list_item_append(list, "popup-radio", NULL, NULL,
+                       _popup_radio_cb, ad);
+       elm_list_item_append(list, "popup-item list", NULL, NULL,
+                       _popup_itemlist_cb, ad);
+       elm_list_item_append(list, "popup-color picker", NULL, NULL,
+                       _popup_colorpicker_cb, ad);
+       elm_list_item_append(list, "popup-item 1line grid", NULL, NULL,
+                       _popup_gengrid_1line_cb, ad);
+       elm_list_item_append(list, "popup-item 2line grid", NULL, NULL,
+                       _popup_gengrid_2line_cb, ad);
+       elm_list_item_append(list, "popup-item 3line grid", NULL, NULL,
+                       _popup_gengrid_3line_cb, ad);
+       elm_list_item_append(list, "popup-item 3line scroll grid", NULL, NULL,
+                       _popup_gengrid_3line_scroll_cb, ad);
+       elm_list_item_append(list, "popup-item 1line grid select mode", NULL, NULL,
+                       _popup_gengrid_1line_select_mode_cb, ad);
+       elm_list_item_append(list, "popup- label+scroller", NULL, NULL,
+                       _popup_label_cb, ad);
+       elm_list_go(list);
+}
diff --git a/live.viewer/dbox.app/src/progressbar.c b/live.viewer/dbox.app/src/progressbar.c
new file mode 100644 (file)
index 0000000..32ab7f0
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "progressbar.h"
+#include "progressbar_custom.h"
+
+#define PROGRESS_INCREASE_STEP 0.01
+#define TIMER_LAP_TIME 0.5
+
+static Evas_Object *in_layout = NULL;
+static Evas_Object *progressbar = NULL;
+
+static struct _menu_item menu_its[] = {
+   { "Default Style", progressbar_default_cb},
+   { "Custom Style", progressbar_custom_cb},
+   { NULL, NULL }
+};
+
+void
+progressbar_add(char *style_name, char *container_name, Evas_Object *layout, Ecore_Timer *timer)
+{
+   progressbar = elm_progressbar_add(layout);
+
+   elm_object_style_set(progressbar, style_name);
+   elm_object_text_set(progressbar, "Label");
+   elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+   elm_progressbar_value_set(progressbar, 0.0);
+   elm_object_part_content_set(layout, container_name, progressbar);
+
+   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);
+
+   if (timer) ecore_timer_del(timer);
+   timer = ecore_timer_add(TIMER_LAP_TIME, fn_pb_timer, progressbar);
+
+   evas_object_show(progressbar);
+}
+
+void
+progressbar_pulse_add(char *style_name, char *container_name, Evas_Object *layout)
+{
+   progressbar = elm_progressbar_add(layout);
+
+   elm_object_style_set(progressbar, style_name);
+   elm_progressbar_pulse(progressbar, EINA_TRUE);
+   elm_object_part_content_set(layout, container_name, progressbar);
+
+   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);
+}
+
+static void
+_list_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+   if (it == NULL)
+     {
+        fprintf(stderr, "list item is NULL\n");
+        return;
+     }
+
+   elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+Eina_Bool
+fn_pb_timer(void *data)
+{
+   if(!progressbar) return EINA_FALSE;
+
+
+   Evas_Object *progressbar = (Evas_Object*) data;
+   double value = elm_progressbar_value_get(progressbar);
+
+   if (value == 1.0) value = 0.0;
+   value += PROGRESS_INCREASE_STEP;
+
+   elm_progressbar_value_set(progressbar, value);
+
+   return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+   if (pb_timer_1) ecore_timer_del(pb_timer_1);
+   if (pb_timer_2) ecore_timer_del(pb_timer_2);
+   if (pb_timer_3) ecore_timer_del(pb_timer_3);
+
+   if (in_layout) in_layout = NULL;
+   if (progressbar) progressbar = NULL;
+
+   elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+
+   return EINA_TRUE;
+}
+
+static Evas_Object*
+_list_winset_create(struct appdata *ad)
+{
+   Evas_Object *li;
+   if (ad == NULL) return NULL;
+
+   li = elm_list_add(ad->nf);
+   elm_list_mode_set(li, ELM_LIST_COMPRESS);
+   evas_object_smart_callback_add(li, "selected", _list_clicked, NULL);
+
+   int idx = 0;
+   while (menu_its[idx].name != NULL)
+     {
+        elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+        ++idx;
+     }
+
+   elm_list_go(li);
+
+   return li;
+}
+
+void
+progressbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   struct appdata *ad = data;
+   if (ad == NULL) return;
+   Evas_Object *list = _list_winset_create(ad);
+
+   elm_naviframe_item_push(ad->nf, _("ProgressBar"), NULL, NULL, list, NULL);
+}
+
+Evas_Object *scroller_create(Evas_Object *parent)
+{
+   Evas_Object* scroller = elm_scroller_add(parent);
+
+   elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+   elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+
+   evas_object_show(scroller);
+
+   return scroller;
+}
+
+void
+progressbars_create(void *data, Evas_Object *obj, void *event_info,
+                    char *page_name, PROGRESSBAR_CREATE _progressbar_create)
+{
+   Evas_Object *scroller_main, *layout_inner;
+   Elm_Object_Item *it;
+   struct appdata *ad = data;
+
+   if (ad == NULL) return;
+
+   elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+   scroller_main = scroller_create(ad->nf);
+
+   it = elm_naviframe_item_push(ad->nf, _(page_name), NULL, NULL, scroller_main, NULL);
+   elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+
+   layout_inner = _progressbar_create(ad->nf);
+   elm_object_content_set(scroller_main, layout_inner);
+}
+
diff --git a/live.viewer/dbox.app/src/progressbar_custom.c b/live.viewer/dbox.app/src/progressbar_custom.c
new file mode 100644 (file)
index 0000000..1da3e3e
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "progressbar_custom.h"
+#include "progressbar.h"
+
+static Evas_Object*
+_custom_progressbar_list_create(Evas_Object *parent)
+{
+   Evas_Object *in_layout = elm_layout_add(parent);
+   elm_layout_file_set(in_layout, ELM_DEMO_EDJ, "pingpongs");
+   evas_object_size_hint_weight_set(in_layout, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+
+   // pingpong_bounces progress mode
+   progressbar_add("pingpong_bounces", "pingpong_bounces_progress",
+                   in_layout, pb_timer_1);
+
+   // pingpong progress mode
+   progressbar_add("pingpong", "pingpong_progress",
+                   in_layout, pb_timer_2);
+
+   // pingpong_bounces pulse mode
+   progressbar_pulse_add("pingpong_bounces", "pingpong_bounces_pulse", in_layout);
+
+   return in_layout;
+}
+
+void
+progressbar_custom_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   progressbars_create(data, obj, event_info, "Custom Style",
+                       _custom_progressbar_list_create);
+}
diff --git a/live.viewer/dbox.app/src/progressbar_default.c b/live.viewer/dbox.app/src/progressbar_default.c
new file mode 100644 (file)
index 0000000..95adafe
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "progressbar_custom.h"
+#include "progressbar.h"
+
+static Evas_Object*
+_default_progressbar_list_create(Evas_Object *parent)
+{
+   Evas_Object *in_layout = elm_layout_add(parent);
+   elm_layout_file_set(in_layout, ELM_DEMO_EDJ, "progessbar");
+   evas_object_size_hint_weight_set(in_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+   // list_progress style
+   progressbar_add("list_progress", "list_progress", in_layout, pb_timer_1);
+
+   // list_title_progress style
+   progressbar_add("list_title_progress", "progress_list_text", in_layout, pb_timer_2);
+
+  // pending_list style
+   progressbar_pulse_add("pending_list", "pending_list", in_layout);
+
+   // Progress circle style
+   progressbar_add("progress_circle", "progress_circle", in_layout, pb_timer_3);
+
+   // list_process style
+   progressbar_pulse_add("process_Xlarge", "process_Xlarge", in_layout);
+
+   // process_medium style
+   progressbar_pulse_add("process_large", "process_large", in_layout);
+
+   // list process small style
+   progressbar_pulse_add("process_medium", "process_medium", in_layout);
+
+   // list_process black style
+   progressbar_pulse_add("process_small", "process_small", in_layout);
+
+   return in_layout;
+}
+
+void
+progressbar_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   progressbars_create(data, obj, event_info, "Default Style", _default_progressbar_list_create);
+}
diff --git a/live.viewer/dbox.app/src/radio.c b/live.viewer/dbox.app/src/radio.c
new file mode 100644 (file)
index 0000000..8fa00ef
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "radio.h"
+
+/*********************************************************
+ button
+ ********************************************************/
+static Evas_Object *_create_scroller(Evas_Object *parent);
+static Evas_Object *_create_radios(Evas_Object *parent);
+static Evas_Object *_create_custom_radios(Evas_Object *parent);
+static void _style_radio_cb(void *data, Evas_Object * obj, void *event_info);
+static void _custom_style_radio_cb(void *data, Evas_Object * obj, void *event_info);
+
+static struct _menu_item _menu_its[] = {
+       {"Normal Styles", _style_radio_cb},
+       {"Custom Styles", _custom_style_radio_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int x = 0;
+       printf("Selected Radio:%d\n", (int)(long)data);
+       x = elm_radio_value_get(obj);
+       //will print the value assigned to the currently selected radio
+       printf("selected value for the group:%d\n", x);
+}
+
+static Evas_Object *_create_radios(Evas_Object *parent)
+{
+       Evas_Object *radio, *rdg = NULL;
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/radio");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       //adding a radio instance
+       radio = elm_radio_add(layout);
+       elm_object_part_content_set(layout, "radio1", radio);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 10);
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)1);
+       //creating a radio group with first radio
+       rdg = radio;
+
+       radio = elm_radio_add(layout);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 20);
+       //adding this radio to the group containing the first radio
+       elm_radio_group_add(radio, rdg);
+       elm_object_part_content_set(layout, "radio2", radio);
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)2);
+
+       radio = elm_radio_add(layout);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 30);
+       //adding this radio to the group containing the first radio
+       elm_radio_group_add(radio, rdg);
+       elm_object_part_content_set(layout, "radio3", radio);
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)3);
+
+       radio = elm_radio_add(layout);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 40);
+       //adding this radio to the group containing the first radio
+       elm_radio_group_add(radio, rdg);
+       elm_object_part_content_set(layout, "radio4", radio);
+       elm_object_disabled_set(radio, EINA_TRUE);
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)4);
+
+       //selecting the second radio in the group with value set to 10. This will set the 2nd radio instance
+       elm_radio_value_set(rdg, 10);
+       return layout;
+}
+
+static Evas_Object *_create_custom_radios(Evas_Object *parent)
+{
+       Evas_Object *radio, *rdg = NULL;
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/radio-custom");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       //adding a radio instance
+       radio = elm_radio_add(layout);
+       elm_object_part_content_set(layout, "radio1", radio);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 10);
+       elm_object_style_set(radio, "water");
+        elm_object_signal_emit(radio, "elm,state,radio,begin", "");
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)1);
+       //creating a radio group with first radio
+       rdg = radio;
+
+       radio = elm_radio_add(layout);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 20);
+       //adding this radio to the group containing the first radio
+       elm_radio_group_add(radio, rdg);
+       elm_object_part_content_set(layout, "radio2", radio);
+       elm_object_style_set(radio, "water");
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)2);
+
+       radio = elm_radio_add(layout);
+       //assigning a unique value(within the group) to the radio instance
+       elm_radio_state_value_set(radio, 30);
+       //adding this radio to the group containing the first radio
+       elm_radio_group_add(radio, rdg);
+       elm_object_part_content_set(layout, "radio3", radio);
+       elm_object_style_set(radio, "water");
+       evas_object_smart_callback_add(radio, "changed", _radio_cb, (void *)3);
+
+       //selecting the second radio in the group with value set to 10. This will set the 2nd radio instance
+       elm_radio_value_set(rdg, 10);
+       return layout;
+}
+
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+static void _custom_style_radio_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Custom Styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_custom_radios(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static void _style_radio_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *scroller, *layout_inner;
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Normal styles"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _create_radios(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad); ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+       return EINA_TRUE;
+}
+
+void radio_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+       Elm_Object_Item *it;
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+       list = _create_list_winset(ad);
+       it=elm_naviframe_item_push(ad->nf, _("Radio"), NULL, NULL, list, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/searchbar.c b/live.viewer/dbox.app/src/searchbar.c
new file mode 100644 (file)
index 0000000..8ebffee
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "searchbar.h"
+
+/*********************************************************
+ SearchBar Normal
+ ********************************************************/
+
+static struct _menu_item menu_its[] = {
+       { "SearchBar Normal", searchbar_normal_cb },
+       { "SearchBar External", searchbar_external_cb },
+       { "SearchBar No Search Icon", searchbar_no_search_icon_cb },
+       { "SearchBar VI", searchbar_vi_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if(ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while (menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+
+void searchbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("SearchBar"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/searchbar_external.c b/live.viewer/dbox.app/src/searchbar_external.c
new file mode 100644 (file)
index 0000000..b238662
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "searchbar.h"
+
+/*********************************************************
+ SearchBar
+ ********************************************************/
+
+#define NUM_OF_ITEMS 50
+
+static Evas_Object *search_gl = NULL;
+static Elm_Object_Item *git = NULL;
+static Elm_Genlist_Item_Class itc, itc2;
+static Evas_Object *searchbar_layout, *layout;
+
+static char *names[] = { "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson" };
+
+static char *group[5] = { N_("Family"), N_("Friends"), N_("Colleagues"), N_("Relatives"),
+       N_("Classmates") };
+
+static void genlist_item_search(const char *search_word);
+static void genlist_clear(void);
+static void genlist_item_add();
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part);
+static void _create_genlist_group_title_style(void *data);
+
+static int _search(void *data);
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_searchbar(void *data);
+
+static void genlist_item_search(const char *search_word)
+{
+   int index;
+   Elm_Object_Item *item_del = NULL;
+
+       int flag = 0;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       flag = 0;
+                       item_del = git;
+               }
+               else {
+                       if (strcasestr(names[index], search_word)) {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       flag = 1;
+                       }
+               }
+               if (index == (NUM_OF_ITEMS-1)) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+               }
+       }
+}
+
+static void genlist_clear(void)
+{
+       if(search_gl == NULL) return;
+       elm_genlist_clear(search_gl);
+}
+
+static void genlist_item_add()
+{
+       int index;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               }
+               else {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       }
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[256];
+       int index = (int) data % NUM_OF_ITEMS;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       else {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       static Eina_Bool flag = EINA_FALSE;
+       if (!flag) {
+               elm_object_signal_emit(layout, "elm,state,hide,searchbar,animation", "elm");
+               flag = EINA_TRUE;
+       }
+       else {
+               elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+               flag = EINA_FALSE;
+       }
+       if (item!=NULL) {
+               int index= (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n", names[index]);
+       }
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[PATH_MAX];
+       int index = ((int) data / 5) % 5;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", group[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static void _genlist_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+}
+
+static void _create_genlist_group_title_style(void *data)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       itc2.item_style = "groupindex";
+       itc2.func.text_get = _gl_text_get_title;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       evas_object_smart_callback_add(genlist, "scroll,edge,top", _genlist_scroll_edge_top_cb, NULL);
+
+       search_gl = genlist;
+
+       genlist_item_add();
+}
+
+static int _search(void *data)
+{
+       Evas_Object *entry = data;
+       const char* text;
+
+       text = elm_object_text_get(entry);
+
+       printf("\n[Search Bar] Changed Callback Called, Search Word : %s\n", text);
+       genlist_clear();
+
+       if (text != NULL && strlen(text) > 0)
+               genlist_item_search(text);
+       else
+               genlist_item_add();
+
+       return 0;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _search(obj);
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *searchbar_layout = (Evas_Object *)data;
+       Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
+       const char* text;
+       text = elm_entry_entry_get(entry);
+       if (text != NULL && strlen(text) > 0)
+               elm_entry_entry_set(entry, NULL);
+       elm_object_focus_set(search_gl, EINA_TRUE); /*Transfer the focus to some other object*/
+}
+
+static void _create_searchbar(void *data)
+{
+       Evas_Object *entry, *cancel_btn;
+       Evas_Object *layout = data;
+
+       searchbar_layout = elm_layout_add(layout);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_SEARCH");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, NULL);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       //in case cancel button is required add the following code
+       cancel_btn = elm_button_add(searchbar_layout);
+       elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
+       elm_object_style_set(cancel_btn, "searchbar/default");
+       elm_object_domain_translatable_text_set(cancel_btn, "sys_string", "IDS_IDLE_BUTTON_CANCEL");
+       evas_object_smart_callback_add(cancel_btn, "clicked", _cancel_clicked_cb, searchbar_layout);
+       elm_object_signal_emit(searchbar_layout, "cancel,show", "");
+}
+
+void searchbar_external_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       if(ad == NULL) return;
+
+       _create_genlist_group_title_style(ad);
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       _create_searchbar(layout);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", search_gl);
+       elm_naviframe_item_push(ad->nf, _("SearchBar"), NULL, NULL, layout, NULL);
+}
diff --git a/live.viewer/dbox.app/src/searchbar_no_search_icon.c b/live.viewer/dbox.app/src/searchbar_no_search_icon.c
new file mode 100644 (file)
index 0000000..d808c10
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "searchbar.h"
+
+/*********************************************************
+ SearchBar
+ ********************************************************/
+
+#define NUM_OF_ITEMS 50
+
+static Evas_Object *search_gl = NULL;
+static Elm_Object_Item *git = NULL;
+static Elm_Genlist_Item_Class itc, itc2;
+static Evas_Object *searchbar_layout, *layout;
+
+static char *names[] = { "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson" };
+
+static char *group[5] = { N_("Family"), N_("Friends"), N_("Colleagues"), N_("Relatives"),
+       N_("Classmates") };
+
+static void genlist_item_search(const char *search_word);
+static void genlist_clear(void);
+static void genlist_item_add();
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part);
+static void _create_genlist_group_title_style(void *data);
+
+static int _search(void *data);
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_searchbar(void *data);
+
+static void genlist_item_search(const char *search_word)
+{
+   int index;
+   Elm_Object_Item *item_del = NULL;
+
+       int flag = 0;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       flag = 0;
+                       item_del = git;
+               }
+               else {
+                       if (strcasestr(names[index], search_word)) {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       flag = 1;
+                       }
+               }
+               if (index == (NUM_OF_ITEMS-1)) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+               }
+       }
+}
+
+static void genlist_clear(void)
+{
+       if(search_gl == NULL) return;
+       elm_genlist_clear(search_gl);
+}
+
+static void genlist_item_add()
+{
+       int index;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               }
+               else {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       }
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[256];
+       int index = (int) data % NUM_OF_ITEMS;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       else {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       static Eina_Bool flag = EINA_FALSE;
+       if (!flag) {
+               elm_object_signal_emit(layout, "elm,state,hide,searchbar,animation", "elm");
+               flag = EINA_TRUE;
+       }
+       else {
+               elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+               flag = EINA_FALSE;
+       }
+       if (item!=NULL) {
+               int index= (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n", names[index]);
+       }
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[PATH_MAX];
+       int index = ((int) data / 5) % 5;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", group[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static void _genlist_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+}
+
+static void _create_genlist_group_title_style(void *data)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       itc2.item_style = "groupindex";
+       itc2.func.text_get = _gl_text_get_title;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       evas_object_smart_callback_add(genlist, "scroll,edge,top", _genlist_scroll_edge_top_cb, NULL);
+
+       search_gl = genlist;
+
+       genlist_item_add();
+}
+
+static int _search(void *data)
+{
+       Evas_Object *entry = data;
+       const char* text;
+
+       text = elm_object_text_get(entry);
+
+       printf("\n[Search Bar] Changed Callback Called, Search Word : %s\n", text);
+       genlist_clear();
+
+       if (text != NULL && strlen(text) > 0)
+               genlist_item_search(text);
+       else
+               genlist_item_add();
+
+       return 0;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _search(obj);
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *searchbar_layout = (Evas_Object *)data;
+       Evas_Object *entry = elm_object_part_content_get(searchbar_layout, "elm.swallow.content");
+       const char* text;
+       text = elm_entry_entry_get(entry);
+       if (text != NULL && strlen(text) > 0)
+               elm_entry_entry_set(entry, NULL);
+       elm_object_focus_set(search_gl, EINA_TRUE); /*Transfer the focus to some other object*/
+}
+
+static void _create_searchbar(void *data)
+{
+       Evas_Object *entry, *cancel_btn;
+       Evas_Object *layout = data;
+
+       searchbar_layout = elm_layout_add(layout);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button");
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_signal_emit(entry, "elm,action,hide,search_icon", "");
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_SEARCH");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, NULL);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       //in case cancel button is required add the following code
+       cancel_btn = elm_button_add(searchbar_layout);
+       elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn);
+       elm_object_style_set(cancel_btn, "searchbar/default");
+       elm_object_domain_translatable_text_set(cancel_btn, "sys_string", "IDS_IDLE_BUTTON_CANCEL");
+       evas_object_smart_callback_add(cancel_btn, "clicked", _cancel_clicked_cb, searchbar_layout);
+       elm_object_signal_emit(searchbar_layout, "cancel,show", "");
+}
+
+void searchbar_no_search_icon_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       if(ad == NULL) return;
+
+       _create_genlist_group_title_style(ad);
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       _create_searchbar(layout);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", search_gl);
+       elm_naviframe_item_push(ad->nf, _("SearchBar"), NULL, NULL, layout, NULL);
+}
diff --git a/live.viewer/dbox.app/src/searchbar_normal.c b/live.viewer/dbox.app/src/searchbar_normal.c
new file mode 100644 (file)
index 0000000..ba14c4a
--- /dev/null
@@ -0,0 +1,273 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "searchbar.h"
+
+/*********************************************************
+ SearchBar Normal
+ ********************************************************/
+
+#define NUM_OF_ITEMS 5000
+
+static Evas_Object *search_gl = NULL;
+static Elm_Object_Item *git = NULL;
+static Elm_Genlist_Item_Class itc, itc2;
+static Evas_Object *searchbar_layout, *layout;
+
+static char *names[] = { "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson" };
+
+static char *group[5] = { N_("Family"), N_("Friends"), N_("Colleagues"), N_("Relatives"),
+       N_("Classmates") };
+
+static void genlist_item_search(const char *search_word);
+static void genlist_clear(void);
+static void genlist_item_add();
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part);
+static void _create_genlist_group_title_style(void *data);
+
+static int _search(void *data);
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_searchbar(void *data);
+
+static void genlist_item_search(const char *search_word)
+{
+   int index;
+   Elm_Object_Item *item_hide = NULL;
+       Elm_Object_Item* it = NULL;
+       int flag = 0;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       if (item_hide && flag == 0) {
+                               elm_genlist_item_hide_set(item_hide, EINA_TRUE);
+                               item_hide = NULL;
+                       }
+
+                       it = elm_genlist_nth_item_get(search_gl, index);
+
+                       if (elm_genlist_item_hide_get(it)) {
+                               elm_genlist_item_hide_set(it, EINA_FALSE);
+                       }
+                       flag = 0;
+                       item_hide = it;
+               } else {
+                       if (strcasestr(names[index % 50], search_word)) {
+                               it = elm_genlist_nth_item_get(search_gl, index);
+                               if (elm_genlist_item_hide_get(it)) {
+                                       elm_genlist_item_hide_set(it, EINA_FALSE);
+                               }
+                               flag = 1;
+                       } else {
+                               it = elm_genlist_nth_item_get(search_gl, index);
+                               elm_genlist_item_hide_set(it, EINA_TRUE);
+                       }
+               }
+               if (index == (NUM_OF_ITEMS-1)) {
+                       if (item_hide && flag == 0) {
+                               elm_genlist_item_hide_set(item_hide, EINA_TRUE);
+                               item_hide = NULL;
+                       }
+               }
+       }
+}
+
+static void genlist_clear(void)
+{
+       if(search_gl == NULL) return;
+       elm_genlist_clear(search_gl);
+}
+
+static void genlist_item_add()
+{
+       int index;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               } else {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       }
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[256];
+       int index = (int) data % NUM_OF_ITEMS;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", names[index % 50]);
+               return strdup(buf);
+       } else {
+               snprintf(buf, sizeof(buf), "%s", names[index % 50]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       static Eina_Bool flag = EINA_FALSE;
+       if (!flag) {
+               elm_object_signal_emit(layout, "elm,state,hide,searchbar,animation", "elm");
+               flag = EINA_TRUE;
+       } else {
+               elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+               flag = EINA_FALSE;
+       }
+       if (item!=NULL) {
+               int index= (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n", names[index % 50]);
+       }
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[PATH_MAX];
+       int index = ((int) data / 5) % 5;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", group[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static void _genlist_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+}
+
+static void _create_genlist_group_title_style(void *data)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       itc2.item_style = "groupindex";
+       itc2.func.text_get = _gl_text_get_title;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       evas_object_smart_callback_add(genlist, "scroll,edge,top", _genlist_scroll_edge_top_cb, NULL);
+
+       search_gl = genlist;
+
+       genlist_item_add();
+}
+
+static int _search(void *data)
+{
+       Evas_Object *entry = data;
+       const char* text;
+
+       text = elm_object_text_get(entry);
+
+       printf("\n[Search Bar] Changed Callback Called, Search Word : %s\n", text);
+
+       if (text != NULL && strlen(text) > 0) {
+               genlist_item_search(text);
+       } else {
+               int i;
+               Elm_Object_Item* it = NULL;
+               for (i = 0; i < elm_genlist_items_count(search_gl); i++) {
+                       it = elm_genlist_nth_item_get(search_gl, i);
+                       elm_genlist_item_hide_set(it, EINA_FALSE);
+               }
+       }
+
+       return 0;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _search(obj);
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _create_searchbar(void *data)
+{
+       Evas_Object *entry;
+       Evas_Object *layout = data;
+
+       searchbar_layout = elm_layout_add(layout);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "default");
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_SEARCH");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, NULL);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+}
+
+void searchbar_normal_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       if(ad == NULL) return;
+
+       _create_genlist_group_title_style(ad);
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       _create_searchbar(layout);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", search_gl);
+       elm_naviframe_item_push(ad->nf, _("SearchBar"), NULL, NULL, layout, NULL);
+}
diff --git a/live.viewer/dbox.app/src/searchbar_vi.c b/live.viewer/dbox.app/src/searchbar_vi.c
new file mode 100644 (file)
index 0000000..8149938
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+
+#include "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "searchbar.h"
+
+/*********************************************************
+ SearchBar VI
+ ********************************************************/
+
+#define NUM_OF_ITEMS 50
+
+static Evas_Object *search_gl = NULL;
+static Elm_Object_Item *git = NULL;
+static Elm_Genlist_Item_Class itc, itc2;
+static Evas_Object *searchbar_layout, *layout;
+
+static char *names[] = { "Aaliyah", "Aamir", "Aaralyn", "Aaron", "Abagail",
+       "Babitha", "Bahuratna", "Bandana", "Bulbul", "Cade", "Caldwell",
+       "Chandan", "Caster", "Dagan ", "Daulat", "Dag", "Earl", "Ebenzer",
+       "Ellison", "Elizabeth", "Filbert", "Fitzpatrick", "Florian", "Fulton",
+       "Frazer", "Gabriel", "Gage", "Galen", "Garland", "Gauhar", "Hadden",
+       "Hafiz", "Hakon", "Haleem", "Hank", "Hanuman", "Jabali ", "Jaimini",
+       "Jayadev", "Jake", "Jayatsena", "Jonathan", "Kamaal", "Jeirk",
+       "Jasper", "Jack", "Mac", "Macy", "Marlon", "Milson" };
+
+static char *group[5] = { N_("Family"), N_("Friends"), N_("Colleagues"), N_("Relatives"),
+       N_("Classmates") };
+
+static void genlist_item_search(const char *search_word);
+static void genlist_clear(void);
+static void genlist_item_add();
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part);
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part);
+static void _gl_del(void *data, Evas_Object *obj);
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info);
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part);
+static void _create_genlist_group_title_style(void *data);
+
+static int _search(void *data);
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void _create_searchbar(void *data);
+
+static void genlist_item_search(const char *search_word)
+{
+   int index;
+   Elm_Object_Item *item_del = NULL;
+
+       int flag = 0;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       flag = 0;
+                       item_del = git;
+               }
+               else {
+                       if (strcasestr(names[index], search_word)) {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       flag = 1;
+                       }
+               }
+               if (index == (NUM_OF_ITEMS-1)) {
+                       if (item_del && flag == 0) {
+                               elm_object_item_del(item_del);
+                               item_del = NULL;
+                       }
+               }
+       }
+}
+
+static void genlist_clear(void)
+{
+       if(search_gl == NULL) return;
+       elm_genlist_clear(search_gl);
+}
+
+static void genlist_item_add()
+{
+       int index;
+
+       for (index=0; index < NUM_OF_ITEMS; index++) {
+               if (index % 5 == 0) {
+                       git = elm_genlist_item_append(search_gl, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               }
+               else {
+                       elm_genlist_item_append(search_gl, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       }
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[256];
+       int index = (int) data % NUM_OF_ITEMS;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       else {
+               snprintf(buf, sizeof(buf), "%s", names[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       static Eina_Bool flag = EINA_FALSE;
+       if (!flag) {
+               elm_object_signal_emit(layout, "elm,state,hide,searchbar,animation", "elm");
+               flag = EINA_TRUE;
+       }
+       else {
+               elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+               flag = EINA_FALSE;
+       }
+       if (item!=NULL) {
+               int index= (int)elm_object_item_data_get(item);
+               fprintf(stdout, "selected text %s\n", names[index]);
+       }
+}
+
+static char* _gl_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       char buf[PATH_MAX];
+       int index = ((int) data / 5) % 5;
+
+       if (strcmp(part, "elm.text") == 0) {
+               snprintf(buf, sizeof(buf), "%s", group[index]);
+               return strdup(buf);
+       }
+       return NULL;
+}
+
+static void _genlist_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_signal_emit(layout, "elm,state,show,searchbar,animation", "elm");
+}
+
+static void _create_genlist_group_title_style(void *data)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+
+       itc.item_style = "default";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+
+       itc2.item_style = "groupindex";
+       itc2.func.text_get = _gl_text_get_title;
+
+       genlist = elm_genlist_add(ad->nf);
+       elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       evas_object_smart_callback_add(genlist, "scroll,edge,top", _genlist_scroll_edge_top_cb, NULL);
+
+       search_gl = genlist;
+
+       genlist_item_add();
+}
+
+static int _search(void *data)
+{
+       Evas_Object *entry = data;
+       const char* text;
+
+       text = elm_object_text_get(entry);
+
+       printf("\n[Search Bar] Changed Callback Called, Search Word : %s\n", text);
+       genlist_clear();
+
+       if (text != NULL && strlen(text) > 0)
+               genlist_item_search(text);
+       else
+               genlist_item_add();
+
+       return 0;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       _search(obj);
+}
+
+static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_object_focus_set(data, EINA_TRUE);
+}
+
+static void _create_searchbar(void *data)
+{
+       Evas_Object *entry;
+
+       searchbar_layout = elm_layout_add(layout);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "default");
+       elm_object_part_content_set(layout, "searchbar", searchbar_layout);
+
+       entry = ea_editfield_add(searchbar_layout, EA_EDITFIELD_SEARCHBAR);
+       elm_object_domain_translatable_part_text_set(entry, "elm.guide", "sys_string", "IDS_COM_BODY_SEARCH");
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, NULL);
+       elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry);
+
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       evas_object_size_hint_weight_set(searchbar_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(searchbar_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+}
+
+static void _keypad_on_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *nf = (Evas_Object *)data;
+       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(nf);
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_FALSE, EINA_TRUE);
+}
+
+static void _keypad_off_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *nf = (Evas_Object *)data;
+       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(nf);
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_TRUE);
+}
+
+static void _trans_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_object_tree_focus_allow_set(layout, EINA_TRUE);
+       evas_object_smart_callback_del(obj, "transition,finished", _trans_finished_cb);
+}
+
+void searchbar_vi_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       if(ad == NULL) return;
+
+       _create_genlist_group_title_style(ad);
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_theme_set(layout, "layout", "application", "searchbar_base");
+       elm_object_signal_emit(layout, "elm,state,show,searchbar", "elm");
+
+       _create_searchbar(ad->nf);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", search_gl);
+       elm_object_tree_focus_allow_set(layout, EINA_FALSE);
+
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,on", _keypad_on_cb, ad->nf);
+       evas_object_smart_callback_add(ad->conform, "virtualkeypad,state,off", _keypad_off_cb, ad->nf);
+
+       elm_naviframe_item_push(ad->nf, _("SearchBar"), NULL, NULL, layout, NULL);
+       evas_object_smart_callback_add(ad->nf, "transition,finished", _trans_finished_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/segmentcontrol.c b/live.viewer/dbox.app/src/segmentcontrol.c
new file mode 100644 (file)
index 0000000..1793a07
--- /dev/null
@@ -0,0 +1,385 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+/*********************************************************
+Segment Control
+ ********************************************************/
+
+typedef struct _Layout_info Layout_info;
+struct _Layout_info
+{
+   Evas_Object* btn1;
+   Evas_Object* btn2;
+   Evas_Object* btn3;
+   Evas_Object* ctrlb_segment;
+   Evas_Object* segment1;
+   Evas_Object* segment2;
+   Evas_Object* disabled_seg1;
+   Evas_Object* segment4;
+   Evas_Object* disabled_seg2;
+};
+
+static void
+_cb1(void* data, Evas_Object* obj, void* event_info)
+{
+   Elm_Object_Item * it = NULL;
+   Layout_info *info = data;
+
+   int count = elm_segment_control_item_count_get(info->segment1);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->segment1);
+        if (it)
+          elm_object_item_del(it);
+     }
+   count = elm_segment_control_item_count_get(info->segment2);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->segment2);
+        if (it)
+          elm_object_item_del(it);
+     }
+   count = elm_segment_control_item_count_get(info->disabled_seg1);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->disabled_seg1);
+        if (it)
+          elm_object_item_del(it);
+     }
+   count = elm_segment_control_item_count_get(info->segment4);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->segment4);
+        if (it)
+          elm_object_item_del(it);
+     }
+   count = elm_segment_control_item_count_get(info->disabled_seg2);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->disabled_seg2);
+        if (it)
+          elm_object_item_del(it);
+     }
+   count = elm_segment_control_item_count_get(info->ctrlb_segment);
+   if (count > 1)
+     {
+        it = elm_segment_control_item_selected_get(info->ctrlb_segment);
+        if (it)
+          elm_object_item_del(it);
+     }
+   return;
+}
+
+static void
+_cb3(void* data, Evas_Object* obj, void* event_info)
+{
+   Layout_info *info = data;
+
+   int count = elm_segment_control_item_count_get(info->segment1);
+   if (count < 7)
+     {
+        char buf[PATH_MAX];
+        Evas_Object *ic;
+
+        ic = elm_image_add(info->segment1);
+        snprintf(buf, sizeof(buf), "%s/logo_small.png", ICON_DIR);
+        elm_image_file_set(ic, buf, NULL);
+        evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+        elm_segment_control_item_insert_at(info->segment1, ic, "ins", 1);
+     }
+   count = elm_segment_control_item_count_get(info->segment2);
+   if (count < 7)
+     elm_segment_control_item_insert_at(info->segment2, NULL, "ins", 1);
+   count = elm_segment_control_item_count_get(info->disabled_seg1);
+   if (count < 7)
+     elm_segment_control_item_insert_at(info->disabled_seg1, NULL, "disabled ins", 1);
+   count = elm_segment_control_item_count_get(info->segment4);
+   if (count < 7)
+     elm_segment_control_item_insert_at(info->segment4, NULL, "ins", 1);
+   count = elm_segment_control_item_count_get(info->disabled_seg2);
+   if (count < 7)
+     elm_segment_control_item_insert_at(info->disabled_seg2, NULL, "disabled ins", 1);
+   count = elm_segment_control_item_count_get(info->ctrlb_segment);
+   if (count < 7)
+     elm_segment_control_item_insert_at(info->ctrlb_segment, NULL, "ins", 1);
+   return;
+}
+
+static void
+_cb2(void* data, Evas_Object* obj, void* event_info)
+{
+   Elm_Object_Item * it = NULL;
+   Layout_info *info = data;
+
+   int count = elm_segment_control_item_count_get(info->segment1);
+   if (count < 7)
+     {
+        char buf[PATH_MAX];
+        Evas_Object *ic;
+
+        ic = elm_image_add(info->segment1);
+        snprintf(buf, sizeof(buf), "%s/logo_small.png", ICON_DIR);
+        elm_image_file_set(ic, buf, NULL);
+        evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+        elm_segment_control_item_add(info->segment1, ic, NULL);
+     }
+   count = elm_segment_control_item_count_get(info->segment2);
+   if (count < 7)
+     {
+        it = elm_segment_control_item_add(info->segment2, NULL, "Add");
+        elm_object_item_part_text_set(it, "elm.text.badge", "99");
+     }
+   count = elm_segment_control_item_count_get(info->disabled_seg1);
+   if (count < 7)
+     elm_segment_control_item_add(info->disabled_seg1, NULL, "disabled add");
+   count = elm_segment_control_item_count_get(info->segment4);
+   if (count < 7)
+     {
+        it = elm_segment_control_item_add(info->segment4, NULL, "Add");
+        elm_object_item_part_text_set(it, "elm.text.badge", "999");
+     }
+   count = elm_segment_control_item_count_get(info->disabled_seg2);
+   if (count < 7)
+      elm_segment_control_item_add(info->disabled_seg2, NULL, "disabled add");
+   count = elm_segment_control_item_count_get(info->ctrlb_segment);
+   if (count < 7)
+      elm_segment_control_item_add(info->ctrlb_segment, NULL, "add");
+   return;
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+   Layout_info *info = data;
+   if (info)
+     {
+        free (info);
+        info = NULL;
+     }
+
+   return EINA_TRUE;
+}
+
+static void _more_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *navi_it = (Elm_Object_Item *) data;
+   int oh_closed = (int) elm_object_item_data_get(navi_it);
+
+   if (oh_closed)
+     elm_object_item_signal_emit(navi_it, "elm,state,optionheader,open", "");
+   else
+     elm_object_item_signal_emit(navi_it, "elm,state,optionheader,close", "");
+
+   elm_object_item_data_set(navi_it, (void *) !oh_closed);
+}
+
+void segmented_control_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *it[5];
+   Evas_Object *ic[9];
+   Evas_Object *in_layout;
+   Evas_Object *toolbar;
+   Elm_Object_Item *item[3];
+   Evas_Object *scroller;
+   Evas_Object *more_btn;
+   Elm_Object_Item *navi_it;
+   char buf[9][PATH_MAX];
+   Layout_info *info;
+
+   struct appdata *ad = (struct appdata *) data;
+   if(ad == NULL) return;
+
+   in_layout = elm_layout_add(ad->nf);
+   elm_layout_file_set(in_layout, ELM_DEMO_EDJ, "elmdemo-test/segment");
+   evas_object_size_hint_weight_set(in_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+   info = calloc(1, sizeof(Layout_info));
+   info->segment1 = elm_segment_control_add(in_layout);
+   elm_object_style_set(info->segment1, "body_style");
+   ic[0] = elm_image_add(info->segment1);
+   snprintf(buf[0], sizeof(buf[0]), "%s/logo.png", ICON_DIR);
+   elm_image_file_set(ic[0], buf[0], NULL);
+   evas_object_size_hint_aspect_set(ic[0], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   ic[1] = elm_image_add(info->segment1);
+   snprintf(buf[1], sizeof(buf[1]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[1], buf[1], NULL);
+   evas_object_size_hint_aspect_set(ic[1], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   ic[2] = elm_image_add(info->segment1);
+   snprintf(buf[2], sizeof(buf[2]), "%s/logo.png", ICON_DIR);
+   elm_image_file_set(ic[2], buf[2], NULL);
+   evas_object_size_hint_aspect_set(ic[2], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   ic[3] = elm_image_add(info->segment1);
+   snprintf(buf[3], sizeof(buf[3]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[3], buf[3], NULL);
+   evas_object_size_hint_aspect_set(ic[3], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   ic[4] = elm_image_add(info->segment1);
+   snprintf(buf[4], sizeof(buf[4]), "%s/logo.png", ICON_DIR);
+   elm_image_file_set(ic[4], buf[4], NULL);
+   evas_object_size_hint_aspect_set(ic[4], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   it[0] = elm_segment_control_item_add(info->segment1, ic[0], "Text Is Ellipsizing");
+   elm_object_item_part_text_set(it[0], "elm.text.badge", "9");
+   it[1] = elm_segment_control_item_add(info->segment1, ic[1], NULL);
+   elm_object_item_part_text_set(it[1], "elm.text.badge", "99");
+   it[2] = elm_segment_control_item_add(info->segment1, ic[2], NULL);
+   elm_object_item_part_text_set(it[2], "elm.text.badge", "999");
+   it[3] = elm_segment_control_item_add(info->segment1, ic[3], "Message");
+   elm_object_item_part_text_set(it[3], "elm.text.badge", "9");
+   it[4] = elm_segment_control_item_add(info->segment1, ic[4], NULL);
+   elm_object_item_part_text_set(it[4], "elm.text.badge", "99");
+   elm_segment_control_item_selected_set(it[4], EINA_TRUE);
+
+   info->segment2 = elm_segment_control_add(in_layout);
+   elm_object_style_set(info->segment2, "multiline");
+
+   ic[5] = elm_image_add(info->segment2);
+   snprintf(buf[5], sizeof(buf[5]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[5], buf[5], NULL);
+   evas_object_size_hint_aspect_set(ic[5], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   it[0] = elm_segment_control_item_add(info->segment2, NULL, "All");
+   elm_object_item_part_text_set(it[0], "elm.text.badge", "9999");
+   it[1] = elm_segment_control_item_add(info->segment2, NULL, "Text Is Ellipsizing");
+   it[2] = elm_segment_control_item_add(info->segment2, ic[5], "Message");
+   it[3] = elm_segment_control_item_add(info->segment2, NULL, "Segment Control");
+   it[4] = elm_segment_control_item_add(info->segment2, NULL, "Phone");
+   elm_object_item_part_text_set(it[4], "elm.text.badge", "99999");
+   elm_segment_control_item_selected_set(it[2], EINA_TRUE);
+
+   info->disabled_seg1 = elm_segment_control_add(in_layout);
+   elm_object_style_set(info->disabled_seg1, "multiline");
+
+   ic[6] = elm_image_add(info->disabled_seg1);
+   snprintf(buf[6], sizeof(buf[6]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[6], buf[6], NULL);
+   evas_object_size_hint_aspect_set(ic[6], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   it[0] = elm_segment_control_item_add(info->disabled_seg1, NULL, "Disabled");
+   elm_object_item_part_text_set(it[0], "elm.text.badge", "99");
+   it[1] = elm_segment_control_item_add(info->disabled_seg1, NULL, "DisabledEllipsizing");
+   it[2] = elm_segment_control_item_add(info->disabled_seg1, NULL, "Disabled");
+   it[3] = elm_segment_control_item_add(info->disabled_seg1, ic[6], "Disabled");
+   elm_object_item_part_text_set(it[3], "elm.text.badge", "999");
+   it[4] = elm_segment_control_item_add(info->disabled_seg1, NULL, "Disabled");
+   elm_segment_control_item_selected_set(it[0], EINA_TRUE);
+   elm_object_disabled_set(info->disabled_seg1, EINA_TRUE);
+
+   info->segment4 = elm_segment_control_add(in_layout);
+   elm_object_style_set(info->segment4, "title_multiline");
+
+   ic[7] = elm_image_add(info->segment4);
+   snprintf(buf[7], sizeof(buf[7]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[7], buf[7], NULL);
+   evas_object_size_hint_aspect_set(ic[7], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   it[0] = elm_segment_control_item_add(info->segment4, NULL, "Text Is Ellipsizing");
+   it[1] = elm_segment_control_item_add(info->segment4, NULL, "Call");
+   elm_object_item_part_text_set(it[1], "elm.text.badge", "9");
+   it[2] = elm_segment_control_item_add(info->segment4, NULL, "Segment Control");
+   elm_object_item_part_text_set(it[2], "elm.text.badge", "999999");
+   it[3] = elm_segment_control_item_add(info->segment4, ic[7], "Phone");
+   elm_segment_control_item_selected_set(it[0], EINA_TRUE);
+
+   info->disabled_seg2 = elm_segment_control_add(in_layout);
+   elm_object_style_set(info->disabled_seg2, "multiline");
+
+   ic[8] = elm_image_add(info->disabled_seg2);
+   snprintf(buf[8], sizeof(buf[8]), "%s/logo_small.png", ICON_DIR);
+   elm_image_file_set(ic[8], buf[8], NULL);
+   evas_object_size_hint_aspect_set(ic[8], EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+
+   it[0] = elm_segment_control_item_add(info->disabled_seg2, ic[8], "Disabled");
+   it[1] = elm_segment_control_item_add(info->disabled_seg2, NULL, "Disabled");
+   elm_object_item_part_text_set(it[0], "elm.text.badge", "999");
+   it[2] = elm_segment_control_item_add(info->disabled_seg2, NULL, "DisabledEllipsizing");
+   it[3] = elm_segment_control_item_add(info->disabled_seg2, NULL, "Disabled");
+   elm_segment_control_item_selected_set(it[2], EINA_TRUE);
+   elm_object_disabled_set(info->disabled_seg2, EINA_TRUE);
+
+   /* create toolbar */
+   toolbar = elm_toolbar_add(ad->nf);
+   elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+   elm_object_style_set(toolbar, "naviframe");
+
+   info->ctrlb_segment = elm_segment_control_add(toolbar);
+   it[0] = elm_segment_control_item_add(info->ctrlb_segment, NULL, "All");
+   elm_object_item_part_text_set(it[0], "elm.text.badge", "9");
+   it[1] = elm_segment_control_item_add(info->ctrlb_segment, NULL, "Call");
+   elm_object_item_part_text_set(it[1], "elm.text.badge", "99");
+   it[2] = elm_segment_control_item_add(info->ctrlb_segment, NULL, "Message");
+   elm_object_item_part_text_set(it[2], "elm.text.badge", "999");
+   it[3] = elm_segment_control_item_add(info->ctrlb_segment, NULL, "Phone");
+   elm_object_item_part_text_set(it[3], "elm.text.badge", "9");
+   it[4] = elm_segment_control_item_add(info->ctrlb_segment, NULL, "Last Call");
+   elm_object_item_part_text_set(it[4], "elm.text.badge", "99");
+   elm_segment_control_item_selected_set(it[4], EINA_TRUE);
+
+   info->btn1 = elm_button_add(ad->nf);
+   elm_object_text_set(info->btn1, "Del (Selected one)");
+   evas_object_show(info->btn1);
+
+   info->btn2 = elm_button_add(ad->nf);
+   elm_object_text_set(info->btn2, "Add (till item count 7)");
+   evas_object_show(info->btn2);
+
+   info->btn3 = elm_button_add(ad->nf);
+   elm_object_text_set(info->btn3, "Insert (till item count 7)");
+   evas_object_show(info->btn3);
+
+   evas_object_smart_callback_add(info->btn1, "clicked", _cb1, info);
+   evas_object_smart_callback_add(info->btn2, "clicked", _cb2, info);
+   evas_object_smart_callback_add(info->btn3, "clicked", _cb3, info);
+
+   elm_object_part_content_set(in_layout, "segment1", info->segment1);
+   elm_object_part_content_set(in_layout, "segment2", info->segment2);
+   elm_object_part_content_set(in_layout, "disabled_seg1", info->disabled_seg1);
+   elm_object_part_content_set(in_layout, "segment4", info->segment4);
+   elm_object_part_content_set(in_layout, "disabled_seg2", info->disabled_seg2);
+   elm_object_part_content_set(in_layout, "add", info->btn2);
+   elm_object_part_content_set(in_layout, "del", info->btn1);
+   elm_object_part_content_set(in_layout, "insert", info->btn3);
+
+   scroller = elm_scroller_add(ad->nf);
+   elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+   elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+   evas_object_show(scroller);
+   elm_object_content_set(scroller, in_layout);
+
+   item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+   elm_object_item_part_content_set(item[0], "object", info->ctrlb_segment);
+   navi_it = elm_naviframe_item_push(ad->nf, _("SegmentControl"), NULL, NULL, scroller, NULL);
+   elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, info);
+   elm_object_item_part_content_set(navi_it, "optionheader", toolbar);
+
+   //More Button
+   more_btn = elm_button_add(ad->nf);
+   elm_object_style_set(more_btn, "naviframe/more/default");
+   evas_object_smart_callback_add(more_btn, "clicked", _more_btn_cb, navi_it);
+   elm_object_item_part_content_set(navi_it, "title_more_btn", more_btn);
+   elm_object_item_data_set(navi_it, (void *) 0);
+
+   return;
+}
+
diff --git a/live.viewer/dbox.app/src/selectioninfo.c b/live.viewer/dbox.app/src/selectioninfo.c
new file mode 100644 (file)
index 0000000..1ae8764
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+
+#define ITEM_STYLE_NUM 2
+#define ITEM_COUNT     10
+
+static void _selection_info_cb(void *data, Evas_Object *obj, void *event_info);
+static void _selection_info_with_panes_cb(void *data, Evas_Object *obj, void *event_info);
+static void _selection_info_with_center_align_cb(void *data, Evas_Object *obj, void *event_info);
+static struct _menu_item menu_its[] = {
+       { "SelectionInfo", _selection_info_cb },
+       { "SelectionInfo with center align", _selection_info_with_center_align_cb },
+       { "SelectionInfo with Panes", _selection_info_with_panes_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+static char *styles[] = {
+       "SelectionInfo",
+       "SelectionInfa with center align",
+       "SelectionInfo with Panes"
+};
+static char *countries[] = {
+       "Argentina", "Australia", "Bangladesh", "Belgium", "Canada", "Chile",
+       "Dominican Republic", "Egypt", "England", "Fiji"
+};
+
+typedef struct _SelInfo_Data SelInfo_Data;
+struct _SelInfo_Data {
+       struct appdata* ad;
+       Evas_Object *selectioninfo_popup;
+       int checked_count;
+};
+
+static SelInfo_Data *seld;
+static Elm_Genlist_Item_Class itc;
+static Eina_Bool state_pointer[ITEM_COUNT] = {0};
+
+static void _create_selectioninfo(Evas_Object * data);
+
+static int _checked_count_get()
+{
+       int i;
+       int count = 0;
+
+       for (i = 0 ; i < ITEM_COUNT ; i++)
+               if (state_pointer[i])
+                       count++;
+       return count;
+}
+
+static void _theme_set(Evas_Object * obj, Evas_Object *data)
+{
+       char text[128];
+       const char *style = evas_object_data_get(data, "style");
+
+       /* Set the layout theme */
+       seld->checked_count = _checked_count_get();
+       if (!seld->checked_count) {
+               evas_object_hide(seld->selectioninfo_popup);
+               return;
+       }
+       elm_layout_theme_set(obj, "standard", "selectioninfo", style);
+       evas_object_show(seld->selectioninfo_popup);
+       snprintf(text, sizeof(text), "%d %s", seld->checked_count, _("File(s) Selected"));
+       /* Set the text */
+       elm_object_part_text_set(obj, "elm.text", text);
+}
+
+static void _create_selectioninfo(Evas_Object *data)
+{
+       Evas_Object *selectioninfo_layout;
+       if (!seld->selectioninfo_popup) {
+               seld->selectioninfo_popup = elm_notify_add(data);
+               elm_notify_align_set(seld->selectioninfo_popup, ELM_NOTIFY_ALIGN_FILL, 1.0);
+               selectioninfo_layout = elm_layout_add(seld->selectioninfo_popup);
+               elm_object_content_set(seld->selectioninfo_popup, selectioninfo_layout);
+       }
+
+       elm_notify_timeout_set(seld->selectioninfo_popup, 3.0);
+       _theme_set(elm_object_content_get(seld->selectioninfo_popup), data);
+}
+
+static void _check_cb(void* data, Evas_Object *obj, void *event_info)
+{
+       _create_selectioninfo(data);
+}
+
+static char* _gl_text_get (void *data, Evas_Object *obj, const char *part)
+{
+       char buffer[PATH_MAX];
+       int index = (int) data;
+
+       if (strncmp("elm.text", part, strlen("elm.text")) == 0) {
+               snprintf(buffer, sizeof(buffer), "%s", countries[index]);
+               return strdup(buffer);
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_content_get (void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *check;
+       int index = (int) data;
+
+       check = elm_check_add(obj);
+       elm_check_state_pointer_set(check, &state_pointer[index]);
+       evas_object_smart_callback_add(check, "changed", _check_cb, obj);
+       evas_object_show(check);
+       return check;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+}
+
+static void
+_unpress(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("unpress, size : %f\n", elm_panes_content_left_size_get(obj));
+}
+
+static Evas_Object *_create_genlist(const char *selectioninfo_style)
+{
+       int i;
+       Elm_Object_Item *item;
+       Evas_Object *genlist;
+
+       itc.item_style = "1text.1icon.2";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+
+       genlist = elm_genlist_add(seld->ad->nf);
+       elm_object_style_set(genlist, UNCLIPPED_CONTENT);
+       evas_object_data_set(genlist, "style", selectioninfo_style);
+
+       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 = 0; i < ITEM_COUNT; i++)
+               item = elm_genlist_item_append(genlist, &itc, (void *) i,
+                                              NULL,
+                                              ELM_GENLIST_ITEM_NONE,
+                                              _gl_sel,
+                                              NULL);
+       return genlist;
+}
+
+static Evas_Object *_create_panes()
+{
+       int i;
+       Evas_Object *panes, *genlist, *btn;
+
+       panes = elm_panes_add(seld->ad->nf);
+
+       /*
+        * By default, pane's type is vertical.
+        * Setting the expansion weight hints for the pane.
+        */
+       evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_smart_callback_add(panes, "unpress", _unpress, panes);
+
+       /* Creating a control to be set as one of the contents of the pane */
+       btn = elm_button_add(panes);
+       elm_object_text_set(btn, "Right");
+       evas_object_size_hint_weight_set(btn, 1.0, 1.0);
+       evas_object_size_hint_align_set(btn, -1.0, -1.0);
+       /* Setting the relative size of the left view of the pane */
+       elm_panes_content_left_size_set(panes, 1.0);
+       /* Setting the left content of the pane */
+       elm_object_part_content_set(panes, "right", btn);
+
+       itc.item_style = "1text.1icon.2";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+
+       genlist = elm_genlist_add(seld->ad->nf);
+       elm_object_style_set(genlist, UNCLIPPED_CONTENT);
+       evas_object_data_set(genlist, "style", "center_text");
+
+       elm_object_part_content_set(panes, "left", genlist);
+
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       for (i = 0; i < ITEM_COUNT; i++)
+               elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       return panes;
+}
+
+static Eina_Bool _back_btn_cb(void *data, Elm_Object_Item *it)
+{
+       int i;
+
+       for (i = 0; i < ITEM_COUNT; i++)
+               state_pointer[i] = EINA_FALSE;
+
+       if (seld->selectioninfo_popup)
+               evas_object_del(seld->selectioninfo_popup);
+       seld->selectioninfo_popup = NULL;
+       return EINA_TRUE;
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (seld) {
+               free(seld);
+               seld = NULL;
+       }
+
+       return EINA_TRUE;
+}
+
+static void _selection_info_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int) data;
+       Elm_Object_Item *navi_it;
+       Evas_Object *genlist;
+
+       elm_list_item_selected_set((Elm_Object_Item *) event_info, EINA_FALSE);
+       genlist = _create_genlist("default");
+       navi_it = elm_naviframe_item_push(seld->ad->nf, styles[index] , NULL,
+                                         NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _back_btn_cb, NULL);
+}
+
+static void _selection_info_with_center_align_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int) data;
+       Elm_Object_Item *navi_it;
+       Evas_Object *genlist;
+
+       elm_list_item_selected_set((Elm_Object_Item *) event_info, EINA_FALSE);
+       genlist = _create_genlist("center_text");
+       navi_it = elm_naviframe_item_push(seld->ad->nf, styles[index] , NULL,
+                                         NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _back_btn_cb, NULL);
+}
+
+static void _selection_info_with_panes_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *panes;
+       int index = (int) data;
+       Elm_Object_Item *navi_it;
+
+       elm_list_item_selected_set((Elm_Object_Item *) event_info, EINA_FALSE);
+       panes = _create_panes();
+       navi_it = elm_naviframe_item_push(seld->ad->nf, styles[index] , NULL,
+                                         NULL, panes, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _back_btn_cb, NULL);
+}
+
+static Evas_Object *_create_list_menu(struct appdata *ad)
+{
+       Evas_Object *list;
+       int idx = 0;
+
+       if (ad == NULL)
+               return NULL;
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(
+                       list,
+                       menu_its[idx].name,
+                       NULL,
+                       NULL,
+                       menu_its[idx].func,
+                       (void *) idx);
+               ++idx;
+       }
+       elm_list_go(list);
+       return list;
+}
+
+void selectioninfo_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout_inner;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad = data;
+       if (ad == NULL) return;
+
+       seld = calloc(1, sizeof(SelInfo_Data));
+       if (!seld) return;
+       seld->ad = ad;
+
+       layout_inner = _create_list_menu(ad);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Selection Info") , NULL, NULL, layout_inner, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/slider.c b/live.viewer/dbox.app/src/slider.c
new file mode 100644 (file)
index 0000000..d095628
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+
+#include "slider_default.h"
+#include "slider_volume.h"
+#include "slider_custom.h"
+
+static struct _menu_item menu_its[] = {
+       { "Default Style", slider_default_cb },
+       { "Volume Style", slider_volume_cb },
+       { "Custom Style", slider_custom_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+
+void slider_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Slider"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/slider_custom.c b/live.viewer/dbox.app/src/slider_custom.c
new file mode 100644 (file)
index 0000000..0a26965
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "slider_custom.h"
+
+/*********************************************************
+   Custom Slider
+ ********************************************************/
+
+#define SLIDER_POPUP_X 438
+#define SLIDER_POPUP_Y 96
+#define NUM_OF_ITEMS 6
+
+static char *slider_itemlist[] = {
+       "Bubble Slider",
+       "Bubble Slider with Indicator",
+       "Wave Slider",
+       NULL
+};
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       elm_theme_extension_del(NULL, ELM_DEMO_EDJ);
+       return EINA_TRUE;
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)(long)data) / 2;
+       return strdup(slider_itemlist[index]);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *slider;
+       int index = ((int)(long)data);
+
+       slider = elm_slider_add(obj);
+
+       if (index == 1) {
+               elm_slider_indicator_show_set(slider, EINA_FALSE);
+               elm_object_style_set(slider, "bubble");
+       } else if (index == 3) {
+               elm_object_style_set(slider, "bubble_sent");
+       } else if (index == 5) {
+               elm_slider_indicator_show_set(slider, EINA_FALSE);
+               elm_object_style_set(slider, "wave");
+       }
+       return slider;
+}
+
+static Evas_Object* _create_genlist(Evas_Object* parent)
+{;
+       Evas_Object *genlist;
+       Elm_Object_Item *gl_item = NULL;
+       int index;
+
+       genlist = elm_genlist_add(parent);
+       Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+       Elm_Genlist_Item_Class *itc2 = elm_genlist_item_class_new();
+
+       itc->item_style = "dialogue/1text";
+       itc->func.text_get = _gl_text_get;
+
+       itc2->item_style = "dialogue/1icon";
+       itc2->func.content_get = _gl_content_get;
+
+       evas_object_show(genlist);
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               if (index % 2 == 0) {
+                       gl_item = elm_genlist_item_append(genlist, itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       gl_item = elm_genlist_item_append(genlist, itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               }
+       }
+       elm_genlist_item_class_free(itc);
+       elm_genlist_item_class_free(itc2);
+
+       return genlist;
+}
+
+void slider_custom_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+       Elm_Object_Item *it;
+       if (ad == NULL) return;
+
+       elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+       genlist = _create_genlist(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Custom Style"), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+}
diff --git a/live.viewer/dbox.app/src/slider_default.c b/live.viewer/dbox.app/src/slider_default.c
new file mode 100644 (file)
index 0000000..857273e
--- /dev/null
@@ -0,0 +1,313 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "slider.h"
+
+/*********************************************************
+   Slider_Default
+ ********************************************************/
+
+#define SLIDER_POPUP_X 438
+#define SLIDER_POPUP_Y 96
+#define NUM_OF_ITEMS 14
+
+static Elm_Genlist_Item_Class itc, itc2;
+
+static char *slider_itemlist[] = {
+       "Slider Normal Style",
+       "Text-Slider-Icon",
+       "Icon-Slider-Icon",
+       "Icon-Text-Slider-Text",
+       "Text Slider Text",
+       "Number Slider Number",
+       "Slider for ebook",
+       NULL
+};
+
+static Evas_Object *slider_popup;
+
+static void _slider_ebook_drag_start_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *slider = (Evas_Object*)data;
+       char buf[50];
+       Evas_Coord x, y, w, h;
+       int pos_x, pos_y;
+       double min, max;
+
+       evas_object_geometry_get(slider, &x, &y, &w, &h);
+       pos_x = x + (w / 2) - (int)(((double)SLIDER_POPUP_X * elm_config_scale_get()) / 2);
+       pos_y = y - (int)((double)SLIDER_POPUP_Y * elm_config_scale_get());
+       evas_object_move(slider_popup, pos_x, pos_y);
+       elm_slider_min_max_get(slider, &min, &max);
+       sprintf(buf, "%.0lf of %.0lf", elm_slider_value_get(slider), max);
+       edje_object_part_text_set(_EDJ(slider_popup), "page", buf);
+       evas_object_show(slider_popup);
+}
+
+static void _slider_ebook_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *slider = (Evas_Object*)data;
+       char buf[50];
+       Evas_Coord x, y, w, h;
+       int pos_x, pos_y;
+       double min, max;
+
+       evas_object_geometry_get(slider, &x, &y, &w, &h);
+       pos_x = x + (w / 2) - (int)(((double)SLIDER_POPUP_X * elm_config_scale_get()) / 2);
+       pos_y = y - (int)((double)SLIDER_POPUP_Y * elm_config_scale_get());
+       evas_object_move(slider_popup, pos_x, pos_y);
+       elm_slider_min_max_get(slider, &min, &max);
+       sprintf(buf, "%.0lf of %.0lf", elm_slider_value_get(slider), max);
+       edje_object_part_text_set(_EDJ(slider_popup), "page", buf);
+}
+
+static void _slider_ebook_drag_stop_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_hide(slider_popup);
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       evas_object_del(slider_popup);
+       return EINA_TRUE;
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)(long)data) / 2;
+       return strdup(slider_itemlist[index]);
+}
+
+static void _parse_negative_zero(char *str)
+{
+        char *ptr, *str_temp;
+
+        ptr = strstr(str, "-0");
+        if (ptr) {
+                str_temp = ptr++;
+                while (*ptr++) {
+                        if (*ptr == '0' || *ptr == '.')
+                                continue;
+                        else if (*ptr >='1' && *ptr <='9')
+                                break;
+                        else {
+                                while (*str_temp) {
+                                        *str_temp = *(str_temp+1);
+                                       str_temp++;
+                               }
+                                break;
+                        }
+                }
+        }
+}
+
+static char* _indicator_format(double val)
+{
+        char *indicator = malloc(sizeof(char) * 64);
+        if (!indicator) return NULL;
+        snprintf(indicator, 64, "%1.0f", val);
+
+        // Check and remove -0 state
+        _parse_negative_zero(indicator);
+
+        return indicator;
+}
+
+static void _indicator_free(char *str)
+{
+        free(str);
+}
+
+static double _step_size_calculate(Evas_Object *obj, double min, double max)
+{
+       double step = 0.0;
+       int steps = 0;
+
+       steps = max - min;
+       if (steps) step = (1.0 / steps);
+       return step;
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *slider, *icon, *icon_end;
+       int index = ((int)(long)data);
+       double step;
+
+       slider = elm_slider_add(obj);
+       elm_slider_indicator_show_set(slider, EINA_TRUE);
+       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+       elm_slider_indicator_format_set(slider, "%1.0f");
+
+       if (index == 1) {
+               elm_slider_indicator_format_function_set(slider, _indicator_format, _indicator_free);
+               elm_object_style_set(slider, "center_point");
+               elm_slider_min_max_set(slider, -5, 5);
+               step = _step_size_calculate(slider, -5, 5);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 0);
+       } else if (index == 3) {
+               elm_slider_min_max_set(slider, 0, 9);
+               step = _step_size_calculate(slider, 0, 9);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 7);
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/00_slider_button_brightness_01.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               elm_object_content_set(slider,icon);
+               icon_end = elm_image_add(obj);
+               elm_image_file_set(icon_end, ICON_DIR"/00_slider_button_brightness_02.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               elm_object_part_content_set(slider, "end", icon_end);
+       } else if (index == 5) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/00_slider_button_volume_01.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               icon_end = elm_image_add(obj);
+               elm_image_file_set(icon_end, ICON_DIR"/00_slider_button_volume_02.png", NULL);
+               evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               elm_object_content_set(slider,icon);
+               elm_object_part_content_set(slider, "end", icon_end);
+               elm_slider_min_max_set(slider, 0, 9);
+               step = _step_size_calculate(slider, 0, 9);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 2);
+       } else if (index == 7) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/00_slider_button_volume_01.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               icon_end = elm_image_add(obj);
+               elm_image_file_set(icon_end, ICON_DIR"/00_slider_button_volume_02.png", NULL);
+               evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               elm_object_content_set(slider,icon);
+               elm_object_text_set(slider, "Volume");
+               elm_object_part_content_set(slider, "end", icon_end);
+               elm_slider_min_max_set(slider, 0, 9);
+               step = _step_size_calculate(slider, 0, 9);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 5);
+       } else if (index == 9) {
+               elm_object_style_set(slider, "textstyle");
+               elm_object_text_set(slider,"Minimum");
+               elm_object_part_text_set(slider,"elm.text.end","Maximum");
+               elm_slider_indicator_show_set(slider, EINA_TRUE);
+               elm_slider_min_max_set(slider, 0, 9);
+               step = _step_size_calculate(slider, 0, 9);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 5);
+       } else if (index == 11) {
+               elm_object_style_set(slider, "numberstyle");
+               elm_object_text_set(slider,"0");
+               elm_object_part_text_set(slider,"elm.text.end","20");
+               elm_slider_indicator_show_set(slider, EINA_TRUE);
+               elm_slider_min_max_set(slider, 0, 20);
+               step = _step_size_calculate(slider, 0, 20);
+               elm_slider_step_set(slider, step);
+               elm_slider_value_set(slider, 5);
+       } else if (index == 13) {
+               elm_slider_indicator_show_set(slider, EINA_FALSE);
+               elm_layout_signal_emit(slider, "slider,center,point,show", "");
+               elm_slider_min_max_set(slider, 1, 427);
+               elm_object_style_set(slider, "ebook");
+               evas_object_smart_callback_add(slider, "slider,drag,start", _slider_ebook_drag_start_cb, slider);
+               evas_object_smart_callback_add(slider, "slider,drag,stop", _slider_ebook_drag_stop_cb, slider);
+               evas_object_smart_callback_add(slider, "changed", _slider_ebook_change_cb, slider);
+       }
+
+       return slider;
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       Eina_List *items = NULL;
+
+       if (!ei) return;
+       Elm_Object_Item *item = ei;
+
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+       if (!strcmp(itc->item_style, "dialogue/1icon")) {
+               /* unregister item itself */
+               elm_object_item_access_unregister(item);
+
+               /* convey highlight to its content */
+               Evas_Object *content;
+               content = elm_object_item_part_content_get(item, "elm.icon");
+               items = eina_list_append(items, content);
+               elm_object_item_access_order_set(item, items);
+       }
+}
+
+static Evas_Object* _create_genlist(Evas_Object* parent)
+{;
+       Evas_Object *genlist;
+       Elm_Object_Item *gl_item = NULL;
+       int index;
+
+       genlist = elm_genlist_add(parent);
+
+       itc.item_style = "dialogue/1text";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = NULL;
+       itc.func.state_get = NULL;
+       itc.func.del = NULL;
+
+       itc2.item_style = "dialogue/1icon";
+       itc2.func.text_get = NULL;
+       itc2.func.content_get = _gl_content_get;
+       itc2.func.state_get = NULL;
+       itc2.func.del = NULL;
+
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, 0.0);
+       evas_object_show(genlist);
+
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               if (index % 2 == 0) {
+                       gl_item = elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               } else {
+                       gl_item = elm_genlist_item_append(genlist, &itc2, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+                       elm_genlist_item_select_mode_set(gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+               }
+       }
+
+       evas_object_smart_callback_add(genlist, "realized", _realized, NULL);
+       return genlist;
+}
+
+void slider_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *genlist;
+       struct appdata *ad = (struct appdata *) data;
+       Elm_Object_Item *it;
+       if (ad == NULL) return;
+
+       genlist = _create_genlist(ad->nf);
+       it = elm_naviframe_item_push(ad->nf, _("Default Style"), NULL, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, NULL);
+       // make a popup for showing the page change of ebook style slider
+       slider_popup = elm_layout_add(ad->nf);
+       elm_layout_file_set(slider_popup, ELM_DEMO_EDJ, "slider_popup");
+       evas_object_resize(slider_popup,
+                       (int)((double)SLIDER_POPUP_X * elm_config_scale_get()),
+                       (int)((double)SLIDER_POPUP_Y * elm_config_scale_get()));
+       edje_object_part_text_set(_EDJ(slider_popup), "title", _("Chapter 5. Here is my secret story"));
+}
+
diff --git a/live.viewer/dbox.app/src/slider_volume.c b/live.viewer/dbox.app/src/slider_volume.c
new file mode 100644 (file)
index 0000000..e5443ec
--- /dev/null
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "slider_volume.h"
+
+/*********************************************************
+       Slider_Volume
+ ********************************************************/
+
+#define VOLUME_POPUP_X 330
+#define VOLUME_POPUP_Y 424
+
+typedef struct _Slider_Data Slider_Data;
+struct _Slider_Data
+{
+       Evas_Object *parent;
+       Evas_Object *layout;
+       Evas_Object *button;
+       Evas_Object *volume_hor;
+       Evas_Object *volume_ver;
+       Evas_Object *volume_popup;
+       Evas_Object *icon;
+       Ecore_Timer *del_timer;
+};
+
+// when time is over, volume popup is hidden
+static Eina_Bool _del_timer_cb(void *data)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+
+       evas_object_hide(sd->volume_popup);
+
+       if(sd->del_timer) {
+               ecore_timer_del(sd->del_timer);
+               sd->del_timer = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+// when the back button of naviframe item is pushed, volume popup is deleted
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+
+       if(sd->del_timer) {
+               ecore_timer_del(sd->del_timer);
+               sd->del_timer = NULL;
+       }
+       evas_object_del(sd->volume_popup);
+
+       return EINA_TRUE;
+}
+
+// when the sound button is clicked, popup is shown
+static void _button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+       Evas_Coord x, y, w, h;
+       int pos_x, pos_y;
+
+       evas_object_geometry_get(sd->layout, &x, &y, &w, &h);
+       pos_x = (x + w) / 2 - (int)(((double)VOLUME_POPUP_X * elm_config_scale_get()) / 2);
+       pos_y = (y + h) / 2 - (int)(((double)VOLUME_POPUP_Y * elm_config_scale_get()) / 2);
+       evas_object_move(sd->volume_popup, pos_x, pos_y);
+       evas_object_show(sd->volume_popup);
+
+       if(sd->del_timer) {
+               ecore_timer_del(sd->del_timer);
+               sd->del_timer = NULL;
+       }
+       sd->del_timer = ecore_timer_add(3, _del_timer_cb, sd);
+}
+
+// callback function for the value change of horizontal volume slider
+static void _volume_hor_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+       double value;
+       char buf[50];
+
+       value = elm_slider_value_get(sd->volume_hor);
+       if (value > 14) value = 14;
+       sprintf(buf, "Volume : %.0lf", value);
+       edje_object_part_text_set(_EDJ(sd->layout), "text", buf);
+       elm_slider_value_set(sd->volume_ver, (int)value);
+       if(sd->del_timer) {
+               ecore_timer_del(sd->del_timer);
+               sd->del_timer = NULL;
+       }
+       sd->del_timer = ecore_timer_add(3, _del_timer_cb, sd);
+}
+
+// callback function for the value change of vertical volume slider
+static void _volume_ver_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+       double value;
+       char buf[50];
+
+       value = elm_slider_value_get(sd->volume_ver);
+       if (value > 14) value = 14;
+       sprintf(buf, "Volume : %.0lf", value);
+       edje_object_part_text_set(_EDJ(sd->layout), "text", buf);
+       elm_slider_value_set(sd->volume_hor, (int)value);
+       if(sd->del_timer) {
+               ecore_timer_del(sd->del_timer);
+               sd->del_timer = NULL;
+       }
+       sd->del_timer = ecore_timer_add(3, _del_timer_cb, sd);
+}
+
+// when popup is shown, and rotation is occured.
+static int _rotate_volume_cb(enum appcore_rm rotmode, void* data)
+{
+       Slider_Data *sd = (Slider_Data*)data;
+       Evas_Coord x, y, w, h;
+       int pos_x, pos_y;
+
+       evas_object_geometry_get(sd->layout, &y, &x, &h, &w);
+       pos_x = (x + w) / 2 - (int)(((double)VOLUME_POPUP_X * elm_config_scale_get()) / 2);
+       pos_y = (y + h) / 2 - (int)(((double)VOLUME_POPUP_Y * elm_config_scale_get()) / 2);
+       evas_object_move(sd->volume_popup, pos_x, pos_y);
+
+       return 0;
+}
+static Slider_Data* _create_slider(Evas_Object* parent)
+{
+       static Slider_Data sd ;
+
+       sd.parent = parent;
+
+       // make a base layout
+       sd.layout = elm_layout_add(parent);
+       elm_layout_file_set(sd.layout, ELM_DEMO_EDJ, "slider_volume_layout");
+       edje_object_part_text_set(_EDJ(sd.layout), "text", _("Volume : 0"));
+       evas_object_show(sd.layout);
+
+       // make a icon for a sound button
+       sd.icon = elm_image_add(parent);
+       elm_image_file_set(sd.icon, ICON_DIR"/00_volume_icon.png", NULL);
+       evas_object_size_hint_aspect_set(sd.icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(sd.icon, 1, 1);
+
+       // make a sound button
+       sd.button = elm_button_add(parent);
+       elm_object_style_set(sd.button, "style1");
+       elm_object_part_content_set(sd.layout, "volume_button", sd.button);
+       elm_object_content_set(sd.button, sd.icon);
+       evas_object_smart_callback_add(sd.button, "clicked",_button_clicked_cb, &sd);
+
+       // make a layout for the volume popup
+       sd.volume_popup = elm_layout_add(parent);
+       elm_layout_file_set(sd.volume_popup, ELM_DEMO_EDJ, "slider_volume_popup");
+       edje_object_part_text_set(_EDJ(sd.volume_popup), "title_text", _("Automatically disappears after 3 seconds"));
+       evas_object_resize(sd.volume_popup,
+                       (int)((double)VOLUME_POPUP_X * elm_config_scale_get()),
+                       (int)((double)VOLUME_POPUP_Y * elm_config_scale_get()));
+
+       // add a horizontal volume
+       sd.volume_hor = elm_slider_add(parent);
+       elm_object_style_set(sd.volume_hor, "volume");
+       elm_slider_min_max_set(sd.volume_hor, 0, 15);
+       evas_object_smart_callback_add(sd.volume_hor, "changed", _volume_hor_change_cb,  &sd);
+       elm_object_part_content_set(sd.volume_popup, "volume_hor", sd.volume_hor);
+
+       // add a vertical volume
+       sd.volume_ver = elm_slider_add(parent);
+       elm_object_style_set(sd.volume_ver, "volume");
+       elm_slider_inverted_set(sd.volume_ver, EINA_TRUE);
+       elm_slider_horizontal_set(sd.volume_ver, EINA_FALSE);
+       elm_slider_min_max_set(sd.volume_ver, 0, 15);
+       evas_object_smart_callback_add(sd.volume_ver, "changed", _volume_ver_change_cb,  &sd);
+       elm_object_part_content_set(sd.volume_popup, "volume_ver", sd.volume_ver);
+
+       set_rotate_cb_for_winset(_rotate_volume_cb, &sd);
+
+       return &sd;
+}
+
+static Evas_Object* _create_layout(Evas_Object *parent)
+{
+       Evas_Object *layout;
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return layout;
+}
+
+void slider_volume_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Slider_Data *sd;
+       Evas_Object *layout;
+       Elm_Object_Item *it;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       layout = _create_layout(ad->nf);
+       sd = _create_slider(ad->nf);
+       elm_object_part_content_set(layout, "elm.swallow.content", sd->layout);
+       it = elm_naviframe_item_push(ad->nf, _("Volume Style"), NULL, NULL, layout, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, sd);
+}
diff --git a/live.viewer/dbox.app/src/style_button.c b/live.viewer/dbox.app/src/style_button.c
new file mode 100644 (file)
index 0000000..9ba4998
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "style_button.h"
+#define PKG_DATA_DIR "/usr/share/elementary"
+
+/*********************************************************
+ Add Style
+ ********************************************************/
+static Evas_Object *_create_scroller(Evas_Object * parent);
+
+static Evas_Object *_create_buttons(Evas_Object * parent);
+
+static Evas_Object *
+_create_buttons(Evas_Object * parent)
+{
+   Evas_Object *default_button;
+
+   Evas_Object *new_style_button;
+
+   Evas_Object *new_style_button_2;
+
+   Evas_Object *layout;
+
+   Evas_Object *ic1, *ic2;
+
+   layout = elm_layout_add(parent);
+   elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/style");
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+   ic1 = elm_image_add(layout);
+   elm_image_file_set(ic1, ICON_DIR "/logo_small.png", NULL);
+   elm_image_resizable_set(ic1, 1, 1);
+
+   /* default style */
+   default_button = elm_button_add(layout);
+   elm_object_content_set(default_button, ic1);
+   elm_object_text_set(default_button, _("default style"));
+   elm_object_part_content_set(layout, "button1", default_button);
+   elm_access_info_set(default_button, ELM_ACCESS_INFO, "The label is changed");
+
+   ic2 = elm_image_add(layout);
+   elm_image_file_set(ic2, ICON_DIR "/logo_small.png", NULL);
+   elm_image_resizable_set(ic2, 1, 1);
+
+   /* new style */
+   elm_theme_extension_add(NULL, ELM_DEMO_EDJ);
+
+   new_style_button = elm_button_add(layout);
+   // set new style to the button object
+   elm_object_style_set(new_style_button, "elm_demo_tizen/text_with_icon");
+   elm_object_content_set(new_style_button, ic1);
+   elm_object_text_set(new_style_button, _("new style new style new style"));
+   elm_object_part_content_set(layout, "button2", new_style_button);
+   elm_access_info_set(new_style_button, ELM_ACCESS_INFO, "The button has label new style");
+
+   new_style_button_2 = elm_button_add(layout);
+   elm_object_style_set(new_style_button_2, "elm_demo_tizen/anim_up_down");
+   elm_object_content_set(new_style_button_2, ic2);
+   elm_object_text_set(new_style_button_2, _("new style_2"));
+   elm_object_part_content_set(layout, "button3", new_style_button_2);
+   elm_access_info_set(new_style_button_2, ELM_ACCESS_INFO, "The button has label new style_2");
+
+   return layout;
+}
+
+static Evas_Object *
+_create_scroller(Evas_Object * parent)
+{
+   Evas_Object *scroller = elm_scroller_add(parent);
+
+   elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+   elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+   evas_object_show(scroller);
+
+   return scroller;
+}
+
+void
+style_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+   Evas_Object *scroller, *layout_inner;
+
+   struct appdata *ad = (struct appdata *)data;
+
+   if (ad == NULL) return;
+
+   scroller = _create_scroller(ad->nf);
+   elm_naviframe_item_push(ad->nf, _("Custom Style"), NULL, NULL, scroller, NULL);
+
+   layout_inner = _create_buttons(ad->nf);
+   elm_object_content_set(scroller, layout_inner);
+}
diff --git a/live.viewer/dbox.app/src/test/genlist_test_all_styles.c b/live.viewer/dbox.app/src/test/genlist_test_all_styles.c
new file mode 100644 (file)
index 0000000..7083411
--- /dev/null
@@ -0,0 +1,1100 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+#include "Ecore_X.h"
+
+/*********************************************************
+  Genlist Styles
+ ********************************************************/
+#define NUM_OF_GENLIST_STYLES 4
+#define NUM_OF_TIMES 50
+static Elm_Genlist_Item_Class itc, itc2, itc3;
+static char **genlist_demo_names = NULL;
+static char **genlist_demo_country_names = NULL;
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info);
+static char *menu_its[] = {
+       "1text",
+       "1text.1icon",
+       "1text.1icon.2",
+       "1text.1icon.3",
+       "1text.1icon.4",
+       "1text.1icon.5",
+       "1text.2icon",
+       "1text.2icon.2",
+       "1text.2icon.3",
+       "1text.2icon.4",
+       "1text.2icon.5",
+       "1text.2icon.6",
+       "1text.3icon",
+       "1text.3icon.2",
+       "1text.3icon.3",
+       "2text",
+       "2text.2",
+       "2text.3",
+       "2text.4",
+       "2text.5",
+       "2text.6",
+       "2text.7",
+       "2text.1icon",
+       "2text.1icon.2",
+       "2text.1icon.3",
+       "2text.1icon.4",
+       "2text.1icon.5",
+       "2text.1icon.6",
+       "2text.1icon.7",
+       "2text.1icon.8",
+       "2text.1icon.9",
+       "2text.1icon.10",
+       "2text.1icon.11",
+       "2text.1icon.12",
+       "2text.2icon",
+       "2text.2icon.2",
+       "2text.2icon.3",
+       "2text.2icon.4",
+       "2text.2icon.5",
+       "2text.2icon.6",
+       "2text.2icon.7",
+       "2text.2icon.8",
+       "2text.3icon",
+       "2text.3icon.2",
+       "2text.3icon.3",
+       "3text",
+       "3text.1icon",
+       "3text.1icon.2",
+       "3text.5icon",
+
+       "dialogue/1text",
+       "dialogue/1text.1icon",
+       "dialogue/1text.1icon.2",
+       "dialogue/1text.1icon.3",
+       "dialogue/1text.2icon",
+       "dialogue/1text.2icon.2",
+       "dialogue/1text.3icon",
+       "dialogue/1icon",
+       "dialogue/2text",
+       "dialogue/2text.2",
+       "dialogue/2text.3",
+       "dialogue/2text.1icon",
+       "dialogue/2text.1icon.2",
+       "dialogue/2text.1icon.3",
+       "dialogue/2text.1icon.5",
+       "dialogue/2text.2icon",
+       "dialogue/2text.2icon.2",
+       "dialogue/2text.2icon.3",
+       "dialogue/2text.2icon.4",
+
+       "contact/dialogue/bg/2text.2icon",
+       "contact/dialogue/bg/3text.2icon",
+       "contact/dialogue/1title.1text",
+       "contact/dialogue/1title.1text.2",
+       "contact/dialogue/1title.1text.1icon",
+       "convertor/dialogue/2text.4",
+       "email/dialogue/2text.3icon",
+       "setting/dialogue/2text.1icon.4",
+       "samsungapps/dialogue/bg/5text.2icon",
+
+       "multiline/1title.1text",
+       "multiline/2text",
+       "multiline/2text.1icon",
+       "multiline/2text.1icon.2",
+       "multiline/3text.1icon",
+       "multiline/3text.1icon.2",
+       "multiline/3text.2icon",
+       "multiline/3text.2icon.2",
+
+       /* do not delete below */
+       NULL
+};
+
+#define NUM_OF_PHOTO   9
+static char *photo_path[] = {
+       "00_list_photo_default.png", "iu.jpg", "iu2.jpg", "koo.jpg", "top.jpg", "boa.jpg",
+       "kimtaehee.jpg", "moon.jpg", "taeyon.jpg",
+       NULL
+};
+static char *photo_path50[] = {
+       "00_list_photo_default.png", "iu50.jpg", "iu2-50.jpg", "koo50.jpg", "top50.jpg", "boa50.jpg",
+       "kimtaehee50.jpg", "moon50.jpg", "taeyon50.jpg",
+       NULL
+};
+static char *photo_path75[] = {
+       "00_list_photo_default.png", "iu75.jpg", "iu2-75.jpg", "koo75.jpg", "top75.jpg", "boa75.jpg",
+       "kimtaehee75.jpg", "moon75.jpg", "taeyon75.jpg",
+       NULL
+};
+static char *photo_path100[] = {
+       "00_list_photo_default.png", "iu100.jpg", "iu2-100.jpg", "koo100.jpg", "top100.jpg", "boa100.jpg",
+       "kimtaehee100.jpg", "moon100.jpg", "taeyon100.jpg",
+       NULL
+};
+static char *photo_path133[] = {
+       "00_list_photo_default.png", "iu133.jpg", "iu2-133.jpg", "koo133.jpg", "top133.jpg", "boa133.jpg",
+       "kimtaehee133.jpg", "moon133.jpg", "taeyon133.jpg",
+       NULL
+};
+
+#define NUM_OF_GROUPS 5
+static char *title[] = {
+       N_("Family"), NULL, N_("Colleagues"), NULL, N_("Classmates")
+};
+
+static char *times[] = {"10:00 AM", "10:01 AM", "10:02 AM", "10:03 AM", "10:04 AM", "10:05 AM",
+       "3:50 PM", "3:51 PM", "3:52 PM", "3:53 PM"};
+
+static char *messages[] = {"Good morning!",
+       "It's you again. How do you do this?",
+       "This is the princess who fell from the sky into my arms.",
+       "Yes. We keep meeting like this. You just suddenly show up.",
+       "We could make plans to meet.",
+       "No, it's nicer this way. I hope we meet again suddenly.",
+       "Don't you know that it takes so little to make me happy?",
+       "Good morning, Princess!",
+       "This is incredible. You owe me an explanation.",
+       "No, you're the one who owes me an explanation. You've really got a crush on me. Where shall we go, Princess?"
+};
+
+static Evas_Object *progressbar[2];
+static Ecore_Timer *progressbar_timer[2];
+static double progressbar_period[2];
+
+static Eina_Bool _progressbar_timer_cb(void *data)
+{
+       double value = 0.0;
+       int prog_index = (int)data;
+
+       value = elm_progressbar_value_get(progressbar[prog_index]);
+       if (value == 1.0)
+               value = 0.0;
+       value = value + 0.015;
+       elm_progressbar_value_set(progressbar[prog_index], value);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void _unrealized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       int index = (int)elm_object_item_data_get(event_info);
+       if ((index == 1) || (index == 2)) {
+               if (progressbar_timer[index - 1]) {
+                       ecore_timer_del(progressbar_timer[index - 1]);
+                       progressbar_timer[index - 1] = NULL;
+               }
+       }
+}
+
+static void _gl_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data % NUM_OF_TIMES;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(genlist_demo_names[index]);
+       } else if (!strcmp(part, "elm.text.sub")) {
+               return strdup(genlist_demo_country_names[index]);
+       } else {
+               return strdup(genlist_demo_names[index]);
+       }
+       return NULL;
+}
+
+static void _button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       printf("Button Clicked : %d\n", (int)data);
+}
+
+// Codes for removing elm_editfield : START
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info) // This callback is for showing(hiding) X marked button.
+{
+       if (elm_object_focus_get(data)) {
+               if (elm_entry_is_empty(obj))
+                       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+               else
+                       elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       }
+}
+
+static void _focused_cb(void *data, Evas_Object *obj, void *event_info) // Focused callback will show X marked button and hide guidetext.
+{
+       if (!elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,eraser,show", "elm");
+       elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+}
+
+static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) // Unfocused callback will show guidetext and hide X marked button.
+{
+       if (elm_entry_is_empty(obj))
+               elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
+       elm_object_signal_emit(data, "elm,state,eraser,hide", "elm");
+}
+
+static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button clicked, make string as empty.
+{
+       elm_entry_entry_set(data, "");
+}
+
+static Evas_Object *_singleline_editfield_add(Evas_Object *parent) // For single lined editfield without top title.
+{
+       Evas_Object *layout, *entry;
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "editfield", "default"); // Default editfield layout style without top title.
+
+       entry = elm_entry_add(parent);
+       ea_entry_selection_back_event_allow_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE); // Make entry as scrollable single line.
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, layout);
+       evas_object_smart_callback_add(entry, "focused", _focused_cb, layout);
+       evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, layout);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+       elm_object_part_text_set(layout, "elm.guidetext", _("Text Input")); // Set guidetext.
+       elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry);
+
+       return layout;
+}
+// Codes for removing elm_editfield : END
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       Evas_Object *edit_field = NULL;
+       Evas_Object *btn = NULL;
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.swallow.end")) {
+               btn = elm_button_add(obj);
+               elm_object_style_set(btn, "reveal");
+               evas_object_smart_callback_add(btn, "clicked", _button_clicked_cb, (void *)index);
+               return btn;
+       } else if (!strcmp(part, "elm.photo") || !strcmp(part, "elm.thumbnail")) {
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path[index % NUM_OF_PHOTO]);
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, buf, NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.icon") || !strncmp(part, "elm.icon", 8)) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.edit_field")) {
+               edit_field = _singleline_editfield_add(obj);
+               return edit_field;
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               if (index%3 == 0) evas_object_color_set(icon, 80, 107, 207, 255);
+               else if (index%3 == 1) evas_object_color_set(icon, 72, 136, 42, 255);
+               else if (index%3 == 2) evas_object_color_set(icon, 204, 52, 52, 255);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.progress")) {
+               int prog_index = index - 1;
+               if (prog_index == 0 || prog_index == 1) {
+                       if (progressbar_timer[prog_index]) {
+                               ecore_timer_del(progressbar_timer[prog_index]);
+                               progressbar_timer[prog_index] = NULL;
+                               progressbar[prog_index] = NULL;
+                       }
+                       progressbar[prog_index] = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar[prog_index], "list_progress");
+                       elm_progressbar_horizontal_set(progressbar[prog_index], EINA_TRUE);
+                       elm_progressbar_value_set(progressbar[prog_index], 0.0);
+                       elm_progressbar_unit_format_set(progressbar[prog_index], NULL);
+                       progressbar_timer[prog_index] = ecore_timer_add(progressbar_period[prog_index], _progressbar_timer_cb, (void *)prog_index);
+                       return progressbar[prog_index];
+               }
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_icon2_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+               icon = elm_check_add(obj);
+               elm_check_state_set(icon, EINA_TRUE);
+               elm_object_style_set(icon, "on&off");
+       } else {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       }
+
+       return icon;
+}
+
+static Evas_Object *_gl_icon3_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.icon.2")) {
+               icon = elm_check_add(obj);
+               elm_check_state_set(icon, EINA_TRUE);
+               elm_object_style_set(icon, "on&off");
+       } else {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       }
+
+       return icon;
+}
+
+static Evas_Object *_gl_icon_50x50_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *image;
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.thumbnail")) {
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path50[index % NUM_OF_PHOTO]);
+               image = evas_object_image_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(image, 50, 50);
+               evas_object_image_fill_set(image, 0, 0, 50, 50);
+               evas_object_image_file_set(image, buf, NULL);
+               return image;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_icon_75x100_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *image;
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.thumbnail")) {
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path75[index % NUM_OF_PHOTO]);
+               image = evas_object_image_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(image, 75, 100);
+               evas_object_image_fill_set(image, 0, 0, 75, 100);
+               evas_object_image_file_set(image, buf, NULL);
+               return image;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_icon_100x100_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *image;
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.thumbnail")) {
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path100[index % NUM_OF_PHOTO]);
+               image = evas_object_image_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(image, 100, 100);
+               evas_object_image_fill_set(image, 0, 0, 100, 100);
+               evas_object_image_file_set(image, buf, NULL);
+               return image;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_gl_icon_133x100_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *image;
+       int index = (int)data;
+       char buf[PATH_MAX];
+
+       if (!strcmp(part, "elm.thumbnail")) {
+               sprintf(buf, ICON_DIR"/genlist/%s", photo_path133[index % NUM_OF_PHOTO]);
+               image = evas_object_image_add(evas_object_evas_get(obj));
+               evas_object_image_load_size_set(image, 133, 100);
+               evas_object_image_fill_set(image, 0, 0, 133, 100);
+               evas_object_image_file_set(image, buf, NULL);
+               return image;
+       }
+       return NULL;
+}
+
+static char* _gl_dlg_text_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+       return strdup(title[index]);
+}
+
+static Evas_Object *_gl_dlg_content_get_title(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int) data;
+       if (!strcmp(part, "elm.icon") && index == 0) {
+               progressbar[0] = elm_progressbar_add(obj);
+               elm_object_style_set(progressbar[0], "list_process_small");
+               elm_progressbar_horizontal_set(progressbar[0], EINA_TRUE);
+               elm_progressbar_pulse(progressbar[0], EINA_TRUE);
+               return progressbar[0];
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_dlg_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1") || !strcmp(part, "elm.icon.2") || !strcmp(part, "elm.icon.3")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_dlg_icon2_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.2")) {
+               if ((index % 2) == 1) {
+                       icon = elm_check_add(obj);
+                       elm_check_state_set(icon, EINA_TRUE);
+                       elm_object_style_set(icon, "on&off");
+               } else {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               }
+               return icon;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_dlg_icon3_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+
+       if (!strcmp(part, "elm.icon.2")) {
+               if ((index % 2) == 1) {
+                       icon = elm_button_add(obj);
+                       elm_object_style_set(icon, "reveal");
+               } else {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               }
+               return icon;
+       }
+       else if (!strcmp(part, "elm.icon.3")) {
+               if ((index % 2) == 1) {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               } else {
+                       icon = elm_button_add(obj);
+                       elm_object_style_set(icon, "reveal");
+               }
+               return icon;
+       } else if (!strcmp(part, "elm.icon.1")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_dlg_icon4_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon, *icon2;
+       int index = (int)data % 5;
+
+       if (!strcmp(part, "elm.icon")) {
+               if (index == 1) {
+                       icon = elm_slider_add(obj);
+                       elm_slider_indicator_show_set(icon, EINA_TRUE);
+                       elm_slider_min_max_set(icon, 0, 9);
+                       elm_slider_indicator_format_set(icon, "%1.0f");
+                       elm_slider_value_set(icon, 7);
+
+                       icon2 = elm_image_add(obj);
+                       elm_image_file_set(icon2, ICON_DIR"/00_slider_btn_volume01.png", NULL);
+                       evas_object_size_hint_aspect_set(icon2, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       elm_object_content_set(icon, icon2);
+
+                       icon2 = elm_image_add(obj);
+                       elm_image_file_set(icon2, ICON_DIR"/00_slider_btn_volume02.png", NULL);
+                       evas_object_size_hint_aspect_set(icon2, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       elm_object_part_content_set(icon, "end", icon2);
+
+                       return icon;
+               } else if (index == 2) {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       return icon;
+               } else if (index == 3) {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/00_list_photo_default.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       return icon;
+               } else if (index == 4) {
+                       icon = elm_image_add(obj);
+                       elm_image_file_set(icon, ICON_DIR"/genlist/main.png", NULL);
+                       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+                       return icon;
+               }
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+static void _gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       int index;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+               index = (int)elm_object_item_data_get(item);
+               printf("[Genlist] Selected Text : %s\n", genlist_demo_names[index]);
+       }
+}
+
+static char *_gl_mtl_label2_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data) % NUM_OF_GENLIST_DEMO_NAMES;
+
+       return strdup(genlist_demo_names[index]);
+}
+
+static char* _gl_mtl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+
+       if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.title") ) {
+               return strdup(times[index % EINA_C_ARRAY_LENGTH(times)]);
+       } else {
+               return strdup(messages[index % EINA_C_ARRAY_LENGTH(messages)]);
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_mtl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       icon = elm_image_add(obj);
+       elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       return icon;
+}
+
+static char *_gl_app_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = ((int)data);
+       return strdup(genlist_demo_names[index]);
+}
+
+static char *_gl_app_label2_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+       if (!strcmp(part, "elm.text.1") || !strcmp(part, "elm.title") ) {
+               return strdup(times[index]);
+       } else {
+               return strdup(messages[index]);
+       }
+       return NULL;
+}
+
+static char* _gl_app_text_get_title(void *data, Evas_Object *obj,
+               const char *part)
+{
+       int index = ((int)data / 5);
+       return strdup(title[index]);
+}
+
+static Evas_Object *_gl_app_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+
+       if (!strcmp(part, "elm.icon.1")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_list_photo_default.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       } else {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_app_icon2_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *box, *rect;
+
+       if (!strcmp(part, "elm.icon")) {
+               box = elm_box_add(obj);
+               elm_box_horizontal_set(box, EINA_TRUE);
+
+               rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_color_set(rect, 204, 52, 52, 255);
+               evas_object_size_hint_min_set(rect, 200, 10);
+               elm_box_pack_end(box, rect);
+               evas_object_show(rect);
+
+               rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_color_set(rect, 72, 136, 42, 255);
+               evas_object_size_hint_min_set(rect, 150, 10);
+               elm_box_pack_end(box, rect);
+               evas_object_show(rect);
+
+               rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_color_set(rect, 80, 107, 207, 255);
+               evas_object_size_hint_min_set(rect, 100, 10);
+               elm_box_pack_end(box, rect);
+               evas_object_show(rect);
+
+               return box;
+       }
+       return NULL;
+}
+
+static Evas_Object *_gl_app_icon4_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *icon;
+       int index = ((int) data / 5) % NUM_OF_GROUPS;
+
+       if (!strcmp(part, "elm.icon.1") || !strcmp(part, "elm.icon.2")) {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.colorbar")) {
+               icon = evas_object_rectangle_add(evas_object_evas_get(obj));
+               evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               if (index%3 == 0) evas_object_color_set(icon, 80, 107, 207, 255);
+               else if (index%3 == 1) evas_object_color_set(icon, 72, 136, 42, 255);
+               else if (index%3 == 2) evas_object_color_set(icon, 204, 52, 52, 255);
+               return icon;
+       }
+       return NULL;
+}
+
+static Evas_Object* _create_app_genlist(const char *style, void *data)
+{
+       int index = 0;
+       struct appdata *ad = data;
+       Elm_Object_Item *item = NULL;
+       Evas_Object *genlist;
+       Eina_Bool dlg_bg = EINA_FALSE;
+
+       if (!strstr(style, "/bg/"))
+               dlg_bg = EINA_TRUE;
+
+       // Create genlist
+       genlist = elm_genlist_add(ad->nf);
+
+       if (!strcmp(style, "dialogue/1title.1text.2")) {
+               elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+               itc.func.text_get = _gl_app_label2_get;
+               itc.func.content_get = NULL;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+       }
+
+       // Set item class for dialogue separator
+       itc2.item_style = "dialogue/seperator";
+       itc2.func.text_get = NULL;
+       itc2.func.content_get = NULL;
+       itc2.func.state_get = NULL;
+       itc2.func.del = NULL;
+
+       // Set item class for dialogue title
+       itc3.item_style = "dialogue/grouptitle";
+       itc3.func.text_get = _gl_app_text_get_title;
+       itc3.func.content_get = NULL;
+       itc3.func.state_get = NULL;
+       itc3.func.del = NULL;
+
+       if (!strcmp(style, "dialogue/1title.1text.2")) {
+               for (index = 0; index < 2; index++)     {
+                       if (index % 5 == 0) {
+                               if (title[index/5%NUM_OF_GROUPS])
+                                       item = elm_genlist_item_append(genlist, &itc3, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               else
+                                       item = elm_genlist_item_append(genlist, &itc2, NULL, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       } else {
+                               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               break;
+                       }
+               }
+       } else {
+               for (index = 0; index < 2; index++) {
+                       if (index % 5 == 0 && !dlg_bg) {
+                               if (title[index/5%NUM_OF_GROUPS])
+                                       item = elm_genlist_item_append(genlist, &itc3, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               else
+                                       item = elm_genlist_item_append(genlist, &itc2, NULL, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+                       } else {
+                               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               break;
+                       }
+               }
+       }
+
+       //elm_object_style_set(ad->bg, "group_list");
+       return genlist;
+}
+
+static void _listing_style(void *data, void *stylename)
+{
+       int index = 0;
+       Elm_Object_Item *item = NULL;
+       Evas_Object *genlist = NULL;
+       const char *style = (const char*)stylename;
+       struct appdata *ad = (struct appdata *)data;
+
+       if (style[0] >= '0' && style[0] <= '9') {
+               // Create genlist
+               genlist = elm_genlist_add(ad->nf);
+               evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+               // Set genlist block size.
+               // Optimize your application with appropriate genlist block size.
+               elm_genlist_block_count_set(genlist, 14);
+
+               // Set genlist item class
+               itc.item_style = style;
+               itc.func.text_get = _gl_text_get;
+               itc.func.content_get = _gl_content_get;
+               itc.func.state_get = _gl_state_get;
+               itc.func.del = _gl_del;
+
+               // Init Private Data
+               progressbar[0] = NULL;
+               progressbar_timer[0] = NULL;
+               progressbar_period[0] = 0.1;
+               progressbar[1] = NULL;
+               progressbar_timer[1] = NULL;
+               progressbar_period[1] = 0.05;
+
+               if (!strcmp(style, "1text.1icon")) {
+                       itc.func.content_get = _gl_icon2_get;
+               } else if (!strcmp(style, "1text.2icon")) {
+                       itc.func.content_get = _gl_icon3_get;
+               }
+
+               // Set content_get callback for some styles
+               if (!strcmp(style, "2line_thumbnail_50x50")) {
+                       itc.func.content_get = _gl_icon_50x50_get;
+               } else if (!strcmp(style, "2line_thumbnail_75x100")) {
+                       itc.func.content_get = _gl_icon_75x100_get;
+               } else if (!strcmp(style, "2line_thumbnail_100x100")) {
+                       itc.func.content_get = _gl_icon_100x100_get;
+               } else if (!strcmp(style, "2line_thumbnail_133x100")) {
+                       itc.func.content_get = _gl_icon_133x100_get;
+               }
+
+               // Append items
+               for (index = 0; index < 1; index++) {
+                       item = elm_genlist_item_append(
+                               genlist,                        // genlist object
+                               &itc,                           // item class
+                               (void *) index,         // data
+                               NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _gl_sel,
+                               NULL
+                               );
+               }
+       } else if (!strncmp(style, "dialogue/", 9)) {
+               // Create genlist
+               genlist = elm_genlist_add(ad->nf);
+               evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+               // Set genlist block size.
+               // Optimize your application with appropriate genlist block size.
+               elm_genlist_block_count_set(genlist, 14);
+
+               // Set item class for dialogue normal items
+               itc.item_style = style;
+               itc.func.text_get = _gl_text_get;
+               itc.func.content_get = _gl_dlg_content_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               if (!strcmp(style, "dialogue/1text.1icon") || !strcmp(style, "dialogue/1text.2icon"))
+                       itc.func.content_get = _gl_dlg_icon2_get;
+               else if (!strcmp(style, "dialogue/1text.2icon.2") || !strcmp(style, "dialogue/1text.3icon"))
+                       itc.func.content_get = _gl_dlg_icon3_get;
+               else if (!strcmp(style, "dialogue/1icon"))
+                       itc.func.content_get = _gl_dlg_icon4_get;
+
+               // Set item class for dialogue seperator
+               itc2.item_style = "dialogue/seperator";
+               itc2.func.text_get = NULL;
+               itc2.func.content_get = NULL;
+               itc2.func.state_get = NULL;
+               itc2.func.del = NULL;
+
+               // Set item class for dialogue title
+               itc3.item_style = "dialogue/grouptitle";
+               itc3.func.text_get = _gl_dlg_text_get_title;
+               itc3.func.content_get = _gl_dlg_content_get_title;
+               itc3.func.state_get = NULL;
+               itc3.func.del = NULL;
+
+               for (index = 0; index < 2; index++) {
+                       if (index % 5 == 0) { //title
+                               if (title[index/5%NUM_OF_GROUPS])
+                                       elm_genlist_item_append(genlist, &itc3, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               else
+                                       elm_genlist_item_append(genlist, &itc2, NULL, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                               elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+                       } else { //item
+                               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+                       }
+               }
+       } else if (!strncmp(style, "multiline/1", 11) || !strncmp(style, "multiline/2", 11)) {
+               // Create genlist
+               genlist = elm_genlist_add(ad->nf);
+               evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+               // Set genlist block size.
+               // Optimize your application with appropriate genlist block size.
+               elm_genlist_block_count_set(genlist, 14);
+
+               // To use multiline textblock/entry/editfield in genlist, set height_for_width mode
+               // then the item's height is calculated while the item's width fits to genlist width.
+               elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+               // Set multiline item class
+               itc.item_style = style;
+               itc.func.text_get = _gl_mtl_text_get;
+               itc.func.content_get = _gl_mtl_content_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+       } else if (!strncmp(style, "multiline/3", 11)) {
+               // Create genlist
+               genlist = elm_genlist_add(ad->nf);
+               evas_object_smart_callback_add(genlist, "unrealized", _unrealized_cb, NULL);
+
+               // Set genlist block size.
+               // Optimize your application with appropriate genlist block size.
+               elm_genlist_block_count_set(genlist, 14);
+
+               // Set multiline item class
+               itc.item_style = style;
+               itc.func.text_get = _gl_mtl_label2_get;
+               itc.func.content_get = _gl_mtl_content_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               // Append items
+               for (index = 0; index < 1; index++) {
+                       elm_genlist_item_append(genlist, &itc, (void *) index, NULL, ELM_GENLIST_ITEM_NONE, _gl_sel, NULL);
+               }
+       } else if (!strncmp(style, "contact/", 8)) {
+               // Set item class for dialogue normal items
+               itc.item_style = style+8;
+               itc.func.text_get = _gl_app_text_get;
+               itc.func.content_get = _gl_app_content_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               genlist = _create_app_genlist(style+8, ad);
+       } else if (!strncmp(style, "convertor/", 10)) {
+               itc.item_style = style+10;
+               itc.func.text_get = _gl_app_text_get;
+               itc.func.content_get = NULL;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               genlist = _create_app_genlist(style+10, ad);
+       } else if (!strncmp(style, "email/", 6)) {
+               itc.item_style = style+6;
+               itc.func.text_get = _gl_app_text_get;
+               itc.func.content_get = _gl_app_icon4_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               genlist = _create_app_genlist(style+6, ad);
+       } else if (!strncmp(style, "setting/", 8)) {
+               // Set item class for dialogue normal items
+               itc.item_style = style+8;
+               itc.func.text_get = _gl_app_text_get;
+               itc.func.content_get = _gl_app_icon2_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               genlist = _create_app_genlist(style+8, ad);
+       } else if (!strncmp(style, "samsungapps/", 12)) {
+               itc.item_style = style+12;
+               itc.func.text_get = _gl_app_text_get;
+               itc.func.content_get = _gl_app_content_get;
+               itc.func.state_get = NULL;
+               itc.func.del = NULL;
+
+               genlist = _create_app_genlist(style+12, ad);
+       }
+
+       elm_naviframe_item_push(ad->nf, _(style), NULL, NULL, genlist, NULL);
+}
+
+static void _do_save(void *data, int n)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas *e;
+       Evas_Object *output;
+       int w, h, i;
+       int sx, sy;
+       char file[256];
+       Ecore_X_Image *img;
+       Ecore_X_Window_Attributes att;
+       int bpl = 0, rows = 0, bpp = 0;
+       unsigned char *src;
+
+/*
+  sx = 0; sy = 0;
+  w = 480; h = 800;
+*/
+       sx = 0; sy = 55;
+       w = 480;
+       char *style = menu_its[n];
+       if (style[0] >= '0' && style[0] <= '9') h = 71;
+       else if (!strncmp(style, "multiline/", 10)) h = 111;
+       else if (!strncmp(style, "dialogue/", 9)) h = 127;
+       else h = 163;
+
+       sprintf(file, "./%s.png", menu_its[n]);
+       for (i = 2; i < strlen(file); i++) {
+               if (file[i] == '/')
+                       file[i] = '.';
+       }
+
+       memset(&att, 0, sizeof(Ecore_X_Window_Attributes));
+       ecore_x_window_attributes_get(elm_win_xwindow_get(ad->win_main), &att);
+       img = ecore_x_image_new(w, h, att.visual, att.depth);
+       ecore_x_image_get(img, elm_win_xwindow_get(ad->win_main), sx, sy, 0, 0, w, h);
+       src = ecore_x_image_data_get(img, &bpl, &rows, &bpp);
+
+       e = evas_object_evas_get(ad->win_main);
+       output = evas_object_image_add(e);
+
+       evas_object_image_data_set(output, NULL);
+       evas_object_image_size_set(output, w, h);
+       evas_object_image_fill_set(output, 0, 0, w, h);
+       evas_object_image_filled_set(output, EINA_TRUE);
+       evas_object_image_alpha_set(output, EINA_TRUE);
+       evas_object_image_data_copy_set(output, src);
+       evas_object_image_data_update_add(output, 0, 0, w, h);
+       evas_object_image_save(output, file, NULL, NULL);
+
+       if (!src) free(src);
+       ecore_x_image_free(img);
+
+       fprintf(stderr, "## filename = %s is done\n", file);
+}
+
+static Eina_Bool _running_list(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       static int rcount = 0;
+       static int push = 0;
+
+       if ((!menu_its[rcount])) {
+               return ECORE_CALLBACK_CANCEL;
+       }
+       if (!push) {
+               _listing_style(ad, menu_its[rcount]);
+               push = EINA_TRUE;
+       }
+       else {
+               _do_save(ad, rcount);
+               elm_naviframe_item_pop(ad->nf);
+               push = EINA_FALSE;
+               rcount++;
+       }
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void _create_genlist(void *data, Evas_Object *obj, void *event_info)
+{
+       ecore_timer_add(1.0, _running_list, data);
+}
+
+void genlist_test_all_styles_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _gl_selected, NULL);
+
+       elm_list_item_append(list, "All Item Styles", NULL, NULL, NULL, ad);
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("TEST All Item Styles"), NULL, NULL, list, NULL);
+
+       _create_genlist(ad, obj, event_info);
+
+       genlist_demo_names = genlist_get_demo_names();
+       genlist_demo_country_names = genlist_get_demo_country_names();
+}
diff --git a/live.viewer/dbox.app/src/test/genlist_test_sweep_edit.c b/live.viewer/dbox.app/src/test/genlist_test_sweep_edit.c
new file mode 100644 (file)
index 0000000..78bab23
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "genlist.h"
+
+/*********************************************************
+  Genlist Sweep with Edit mode
+ ********************************************************/
+
+static Evas_Object *genlist, *toolbar, *edit_btn;
+
+#define NUM_OF_ITEMS 2000
+#define NUM_OF_NAMES 4
+static Elm_Genlist_Item_Class itc, itc2, itc3, itc4;
+static char *names[] = {
+       "One Button After Slide", "Two Buttons After Slide",
+       "Three Buttons After Slide", "Four Buttons After Slide"
+};
+
+static void _button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       fprintf(stderr, "Button Clicked : %s\n", names[(int)data]);
+}
+
+/**************************** Genlist Handling Routines ******************************/
+/**
+ * gl_text_get is called for each text part when the item is realized.
+ * This is also called when the sweep animation is started.
+ *
+ * @param data  :  3th parameter of the elm_genlist_item_append api.
+ * @param obj   :  the genlist object.
+ * @param part  :  text part name.
+ *
+ */
+static char *_gl_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               return strdup("slide style");
+       } else if (!strcmp(part, "elm.slide.text.1")) {
+               return strdup("slide");
+       }
+       return NULL;
+}
+
+static char *_gl_text_get2(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text.1")) {
+               return strdup("slide2 style");
+       } else if (!strcmp(part, "elm.text.2")) {
+               return strdup("Two Buttons After Slide.");
+       } else if (!strcmp(part, "elm.slide.text.1")) {
+               return strdup("slide2");
+       }
+       return NULL;
+}
+
+static char *_gl_text_get3(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text")) {
+               return strdup("slide3 style");
+       } else if (!strcmp(part, "elm.slide.text.1")) {
+               return strdup("slide3");
+       }
+       return NULL;
+}
+
+static char *_gl_text_get4(void *data, Evas_Object *obj, const char *part)
+{
+       if (!strcmp(part, "elm.text.1")) {
+               return strdup("slide4 style");
+       } else if (!strcmp(part, "elm.text.2")) {
+               return strdup("Four Buttons After Slide.");
+       } else if (!strcmp(part, "elm.slide.text.1")) {
+               return strdup("slide4");
+       }
+       return NULL;
+}
+
+/**
+ * gl_content_get is called for each swallow part when the item is realized.
+ * This is also called when the sweep animation is started.
+ *
+ * @param data  :  3th parameter of the elm_genlist_item_append api.
+ * @param obj   :  the genlist object.
+ * @param part  :  text part name.
+ *
+ */
+static Evas_Object *_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Evas_Object *button, *icon;
+       int index = (int) data % NUM_OF_NAMES;
+
+       if (!strcmp(part, "elm.slide.swallow.1")) {
+               button = elm_button_add(obj);
+               elm_object_style_set(button, "sweep");
+               elm_object_text_set(button, "Call");
+               evas_object_smart_callback_add(button, "clicked", _button_clicked_cb, (void *)index);
+               return button;
+       } else if (!strcmp(part, "elm.slide.swallow.2")) {
+               button = elm_button_add(obj);
+               elm_object_style_set(button, "sweep");
+               elm_object_text_set(button, "Delete");
+               evas_object_smart_callback_add(button, "clicked", _button_clicked_cb, (void *)index);
+               return button;
+       } else if (!strcmp(part, "elm.slide.swallow.3")) {
+               button = elm_button_add(obj);
+               elm_object_style_set(button, "sweep");
+               elm_object_text_set(button, "Remove");
+               evas_object_smart_callback_add(button, "clicked", _button_clicked_cb, (void *)index);
+               return button;
+       } else if (!strcmp(part, "elm.slide.swallow.4")) {
+               button = elm_button_add(obj);
+               elm_object_style_set(button, "sweep");
+               elm_object_text_set(button, "Answer");
+               evas_object_smart_callback_add(button, "clicked", _button_clicked_cb, (void *)index);
+               return button;
+       } else {
+               icon = elm_image_add(obj);
+               elm_image_file_set(icon, ICON_DIR"/genlist/00_brightness_right.png", NULL);
+               evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               return icon;
+       }
+       return NULL;
+}
+
+static Eina_Bool _gl_state_get(void *data, Evas_Object *obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _gl_del(void *data, Evas_Object *obj)
+{
+       return;
+}
+
+/**************************** Genlist Smart Callbacks ******************************/
+static void _my_gl_mode_right(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!event_info) return;
+
+       // Start genlist sweep
+       elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_TRUE);
+       elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_NONE);
+}
+
+static void _my_gl_mode_left(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!event_info) return;
+
+       // Finish genlist sweep
+       elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE);
+       elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
+}
+
+static void _my_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!obj) return;
+
+       // Get sweeped item
+       Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
+
+       // Finish genlist sweep
+       if (it) {
+               elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+               elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       }
+}
+
+/**************************** Genlist Settings ******************************/
+// Set genlist item styles for slide animation
+static void _set_genlist_item_styles(void)
+{
+       itc.item_style = "1text.1icon.2";
+       itc.decorate_item_style = "mode/slide";
+       itc.func.text_get = _gl_text_get;
+       itc.func.content_get = _gl_content_get;
+       itc.func.state_get = _gl_state_get;
+       itc.func.del = _gl_del;
+       itc.decorate_all_item_style = "edit_default";
+
+       itc2.item_style = "2text.1icon.2";
+       itc2.decorate_item_style = "mode/slide2";
+       itc2.func.text_get = _gl_text_get2;
+       itc2.func.content_get = _gl_content_get;
+       itc2.func.state_get = _gl_state_get;
+       itc2.func.del = _gl_del;
+       itc2.decorate_all_item_style = "edit_default";
+
+       itc3.item_style = "1text.1icon.2";
+       itc3.decorate_item_style = "mode/slide3";
+       itc3.func.text_get = _gl_text_get3;
+       itc3.func.content_get = _gl_content_get;
+       itc3.func.state_get = _gl_state_get;
+       itc3.func.del = _gl_del;
+       itc3.decorate_all_item_style = "edit_default";
+
+       itc4.item_style = "2text.1icon.2";
+       itc4.decorate_item_style = "mode/slide4";
+       itc4.func.text_get = _gl_text_get4;
+       itc4.func.content_get = _gl_content_get;
+       itc4.func.state_get = _gl_state_get;
+       itc4.func.del = _gl_del;
+       itc4.decorate_all_item_style = "edit_default";
+}
+
+static Evas_Object *_create_genlist(Evas_Object *parent)
+{
+       int index;
+       Evas_Object *genlist;
+
+       // Create genlist
+       genlist = elm_genlist_add(parent);
+       evas_object_smart_callback_add(genlist, "drag,start,right", _my_gl_mode_right, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,left", _my_gl_mode_left, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,up", _my_gl_mode_cancel, NULL);
+       evas_object_smart_callback_add(genlist, "drag,start,down", _my_gl_mode_cancel, NULL);
+
+       // Append genlist items
+       for (index = 0; index < NUM_OF_ITEMS; index++) {
+               elm_genlist_item_append(genlist, &itc, (void *) index, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               elm_genlist_item_append(genlist, &itc2, (void *) index, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               elm_genlist_item_append(genlist, &itc3, (void *) index, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+               elm_genlist_item_append(genlist, &itc4, (void *) index, NULL,
+                               ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       }
+
+       return genlist;
+}
+
+static void _edit_button_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       if (!elm_genlist_decorate_mode_get(genlist)) {
+               // Change button label
+               elm_object_text_set(edit_btn, _("Done"));
+
+               // Set reorder and edit mode
+               elm_genlist_decorate_mode_set(genlist, EINA_TRUE);
+
+               // This means even if selected, every click will make the selected callbacks be called.
+               elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       } else {
+               // Change button label
+               elm_object_text_set(edit_btn, _("Edit"));
+
+               // Unset edit mode
+               elm_genlist_decorate_mode_set(genlist, EINA_FALSE);
+               elm_genlist_select_mode_set(genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       }
+}
+
+// Create 'Edit'/'Done' button
+static Evas_Object *_create_edit_button()
+{
+       Evas_Object *button;
+
+       button = elm_button_add(toolbar);
+       elm_object_style_set(button, "naviframe_control/default");
+       evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+       elm_object_text_set(button, _("Edit"));
+       evas_object_show(button);
+       evas_object_smart_callback_add(button, "clicked", _edit_button_clicked_cb, NULL);
+
+       return button;
+}
+/**************************** Main Code ******************************/
+void genlist_test_sweep_edit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it;
+       if (!data) return;
+       struct appdata *ad = (struct appdata *) data;
+
+       // Set Genlist Item Styles for 4 itcs
+       _set_genlist_item_styles();
+
+       // Create a Genlist and append items.
+       genlist = _create_genlist(ad->nf);
+
+       // Create Controlbar for naviframe menu
+       toolbar = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       if (toolbar == NULL) return;
+       elm_object_style_set(toolbar, "naviframe");
+
+       edit_btn = _create_edit_button();
+       it = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+       elm_object_item_part_content_set(it, "object", edit_btn);
+
+       // Push genlist to naviframe
+       it = elm_naviframe_item_push(ad->nf,  _("Sweep"), NULL, NULL, genlist, NULL);
+       elm_object_item_part_content_set(it, "optionheader", toolbar);
+}
diff --git a/live.viewer/dbox.app/src/test/test_fontchange.c b/live.viewer/dbox.app/src/test/test_fontchange.c
new file mode 100644 (file)
index 0000000..6ff6ae9
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "test_fontchange.h"
+
+/*********************************************************
+  Font Change Test
+ ********************************************************/
+
+void _list_item_select_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       char font[256];
+       Elm_Object_Item *it = elm_list_selected_item_get(obj);
+       const char *fontname = elm_object_item_text_get(it);
+
+       Eina_List *text_classes = elm_config_text_classes_list_get();
+       Eina_List *l;
+       Elm_Text_Class *tc;
+
+       EINA_LIST_FOREACH(text_classes, l, tc)
+               elm_config_font_overlay_set(tc->name, fontname, -100);
+
+       sprintf(font, "%s", elm_object_item_text_get(it));
+       elm_config_font_overlay_set("tizen", (const char*) font, -100);
+
+       sprintf(font, "%s:style=Medium", elm_object_item_text_get(it));
+       elm_config_font_overlay_set("tizen_medium", (const char*) font, -100);
+
+       sprintf(font, "%s:style=Roman", elm_object_item_text_get(it));
+       elm_config_font_overlay_set("tizen_roman", (const char*) font, -100);
+
+       sprintf(font, "%s:style=Bold", elm_object_item_text_get(it));
+       elm_config_font_overlay_set("tizen_bold", (const char*) font, -100);
+
+       sprintf(font, "%s:style=Regular", elm_object_item_text_get(it));
+       elm_config_font_overlay_set("tizen_regular", (const char*) font, -100);
+
+       elm_config_font_overlay_apply();
+       elm_config_all_flush();
+       elm_config_save();
+       change_config_owner();
+
+       elm_config_text_classes_list_free(text_classes);
+}
+
+static Eina_Bool _font_item_add(const Eina_Hash *hash, const void *key, void *data, void *fdata)
+{
+       Elm_Font_Properties *efp = data;
+       Evas_Object *list = fdata;
+
+       elm_list_item_append(list, efp->name, NULL, NULL, _list_item_select_cb, NULL);
+
+       return EINA_TRUE;
+}
+
+static Evas_Object * _create_list(Evas_Object *parent)
+{
+       Evas_Object *list = elm_list_add(parent);
+       evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       //Construct available font list
+       Evas *e = evas_object_evas_get(parent);
+       Eina_List *evas_font = evas_font_available_list(e);
+       if (!evas_font) return NULL;
+
+       Eina_Hash *font_hash = elm_font_available_hash_add(evas_font);
+       if (!font_hash) return NULL;
+
+       evas_font_available_list_free(e, evas_font);
+
+       eina_hash_foreach(font_hash, _font_item_add, list);
+
+       elm_font_available_hash_del(font_hash);
+
+       elm_list_go(list);
+
+       evas_object_show(list);
+
+       return list;
+}
+
+void test_fontchange_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+
+       Evas_Object *list = _create_list(ad->nf);
+       if (!list) return;
+
+       elm_naviframe_item_push(ad->nf, _("Font List"), NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/test/testmode.c b/live.viewer/dbox.app/src/test/testmode.c
new file mode 100644 (file)
index 0000000..a1d1e94
--- /dev/null
@@ -0,0 +1,356 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "testmode.h"
+#include "test_genlist.h"
+#include "test_fontchange.h"
+
+/*********************************************************
+  Test Mode
+ ********************************************************/
+static Evas_Object* _create_multitouch(Evas_Object* parent);
+static void multitouch_cb(void *data, Evas_Object *obj, void *event_info);
+
+static struct _menu_item menu_its[] = {
+       { "Multitouch Test", multitouch_cb },
+       { "Genlist All styles (take screenshots)", genlist_test_all_styles_cb },
+       { "Genlist Sweep with Edit mode", genlist_test_sweep_edit_cb },
+       { "Font Change", test_fontchange_cb },
+
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu_its[ idx ].name != NULL) {
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+static Evas_Object* _create_multitouch(Evas_Object* parent)
+{
+       Evas_Object *layout;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/multi-touch");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       return layout;
+}
+
+static void
+_detect_touch_type(void *data, Eina_Bool is_horizontal)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Touch_Info *ti = &(ad->ti);
+       Elm_Object_Item *it = elm_naviframe_top_item_get(ad->nf);
+       Evas_Object *layout = elm_object_item_content_get(it);
+
+       if(ti->multitouch_detected && !ti->touchtype_detected)
+               return;
+
+       elm_object_signal_emit(layout, "all,off", "elm");
+
+       if(is_horizontal)
+       {
+               if(!ti->multitouch_detected)
+               {
+                       if(ti->cur_x > ti->prev_x)
+                       {
+                               // sweep L -> R
+                               elm_object_signal_emit(layout, "01,on", "elm");
+                       }
+                       else if (ti->cur_x < ti->prev_x)
+                       {
+                               // sweep R -> L
+                               elm_object_signal_emit(layout, "02,on", "elm");
+                       }
+               }
+               else
+               {
+                       if(ti->cur_x > ti->prev_x && ti->cur_mx > ti->prev_mx)
+                       {
+                               // multi sweep L -> R
+                               elm_object_signal_emit(layout, "03,on", "elm");
+                       }
+                       else if (ti->cur_x < ti->prev_x && ti->cur_mx < ti->prev_mx)
+                       {
+                               // multi sweep R -> L
+                       }
+                       else
+                       {
+                               if(((ti->cur_x - ti->cur_mx) * (ti->cur_x - ti->cur_mx) + (ti->cur_y - ti->cur_my) * (ti->cur_y - ti->cur_my))
+                                       > ((ti->prev_x - ti->prev_mx) * (ti->prev_x - ti->prev_mx) + (ti->prev_y - ti->prev_my) * (ti->prev_y - ti->prev_my)))
+                               {
+                                       // pinch out
+                                       elm_object_signal_emit(layout, "06,on", "elm");
+                               }
+                               else
+                               {
+                                       // pinch in
+                                       elm_object_signal_emit(layout, "05,on", "elm");
+                               }
+                       }
+               }
+       }
+       else
+       {
+               if(!ti->multitouch_detected)
+               {
+                       if(ti->cur_y > ti->prev_y)
+                       {
+                               // sweep U -> D
+                       }
+                       else if (ti->cur_y < ti->prev_y)
+                       {
+                               // sweep D -> U
+                       }
+               }
+               else
+               {
+                       if(ti->cur_y > ti->prev_y && ti->cur_my > ti->prev_my)
+                       {
+                               // multi sweep U -> D
+                               elm_object_signal_emit(layout, "04,on", "elm");
+                       }
+                       else if (ti->cur_y < ti->prev_y && ti->cur_my < ti->prev_my)
+                       {
+                               // multi sweep D -> U
+                               elm_object_signal_emit(layout, "05,on", "elm");
+                       }
+                       else
+                       {
+                               if(((ti->cur_x - ti->cur_mx) * (ti->cur_x - ti->cur_mx) + (ti->cur_y - ti->cur_my) * (ti->cur_y - ti->cur_my))
+                                       > ((ti->prev_x - ti->prev_mx) * (ti->prev_x - ti->prev_mx) + (ti->prev_y - ti->prev_my) * (ti->prev_y - ti->prev_my)))
+                               {
+                                       // pinch out
+                                       elm_object_signal_emit(layout, "06,on", "elm");
+                               }
+                               else
+                               {
+                                       // pinch in
+                                       elm_object_signal_emit(layout, "05,on", "elm");
+                               }
+                       }
+               }
+       }
+
+       ti->prev_x = ti->cur_x;
+       ti->prev_y = ti->cur_y;
+       ti->prev_mx = ti->cur_mx;
+       ti->prev_my = ti->cur_my;
+}
+
+static void
+_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Touch_Info *ti = &(ad->ti);
+       Evas_Event_Mouse_Down *ev = event_info;
+       Evas_Coord x, y;
+
+       if (ev->button != 1) return;
+
+       evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+       ti->prev_x = ev->canvas.x;
+       ti->prev_y = ev->canvas.y;
+}
+
+static void
+_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Elm_Object_Item *it = elm_naviframe_top_item_get(ad->nf);
+       Evas_Object *layout = elm_object_item_content_get(it);
+       Touch_Info *ti = &(ad->ti);
+       ti->multitouch_detected = 0;
+
+       ti->prev_x = 0;
+       ti->prev_y = 0;
+       elm_object_signal_emit(layout, "all,off", "elm");
+}
+
+static void
+_mouse_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Touch_Info *ti = &(ad->ti);
+       Evas_Event_Mouse_Move *ev = event_info;
+       Evas_Coord minw = 0, minh = 0;
+
+       elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+       Evas_Coord off_x = 0, off_y = 0;
+
+       ti->cur_x = ev->cur.canvas.x;
+       ti->cur_y = ev->cur.canvas.y;
+
+       if(ti->prev_x * ti->prev_y == 0)
+               return;
+
+       off_x = ti->cur_x - ti->prev_x;
+       off_y = ti->cur_y - ti->prev_y;
+
+       if(off_x > minw || off_x < -minw)
+       {
+               _detect_touch_type(data, 1);
+       }
+       else if (off_y > minh || off_y < -minh)
+       {
+               _detect_touch_type(data, 0);
+       }
+}
+
+static void
+_multi_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Touch_Info *ti = &(ad->ti);
+       Evas_Event_Multi_Down *ev = event_info;
+       Evas_Coord x, y;
+
+       ti->multitouch_detected = 1;
+
+       evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+       ti->prev_mx = ev->canvas.x;
+       ti->prev_my = ev->canvas.y;
+}
+
+static void
+_multi_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Elm_Object_Item *it = elm_naviframe_top_item_get(ad->nf);
+       Evas_Object *layout = elm_object_item_content_get(it);
+       Touch_Info *ti = &(ad->ti);
+       ti->touchtype_detected = 0;
+       ti->multitouch_detected = 0;
+
+       ti->prev_mx = 0;
+       ti->prev_my = 0;
+       elm_object_signal_emit(layout, "all,off", "elm");
+}
+
+static void
+_multi_move_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *) data;
+       Touch_Info *ti = &(ad->ti);
+       Evas_Event_Multi_Move *ev = event_info;
+       Evas_Coord minw = 0, minh = 0;
+
+       elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+       Evas_Coord off_mx = 0, off_my = 0;
+
+       ti->cur_mx = ev->cur.canvas.x;
+       ti->cur_my = ev->cur.canvas.y;
+
+       if(ti->prev_mx * ti->prev_my == 0)
+               return;
+
+       off_mx = ti->cur_mx - ti->prev_mx;
+       off_my = ti->cur_my - ti->prev_my;
+
+
+       if(off_mx > minw || off_mx < -minw)
+       {
+               ti->touchtype_detected = 1;
+       }
+       else if (off_my > minh || off_my < -minh)
+       {
+               ti->touchtype_detected = 1;
+       }
+       else
+               ti->touchtype_detected = 0;
+
+}
+
+
+
+static void
+multitouch_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       //Evas_Object *scroller, *layout_inner;
+       Evas_Object *layout_inner;
+       struct appdata *ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       layout_inner = _create_multitouch(ad->nf);
+       elm_naviframe_item_push(ad->nf, _("Multitouch"), NULL,NULL, layout_inner, NULL);
+
+       Evas_Object* rect_obj;
+       rect_obj = evas_object_rectangle_add(evas_object_evas_get(ad->win_main));
+       edje_object_part_swallow(elm_layout_edje_get(layout_inner), "contents_bottom", rect_obj);
+       evas_object_show(rect_obj);
+
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down_cb, ad);
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MOUSE_UP, _mouse_up_cb, ad);
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb, ad);
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MULTI_DOWN, _multi_down_cb, ad);
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MULTI_UP, _multi_up_cb, ad);
+       evas_object_event_callback_add(rect_obj, EVAS_CALLBACK_MULTI_MOVE, _multi_move_cb, ad);
+
+}
+
+void
+testmode_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *list;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Test Mode"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/theme.c b/live.viewer/dbox.app/src/theme.c
new file mode 100644 (file)
index 0000000..66cf229
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "theme.h"
+
+#define MAX_NUM_OF_RECT 7
+
+static Evas_Object *_selected_rect = NULL;
+
+static void _button_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Elm_Object_Item *it = (Elm_Object_Item *)event_info;
+       const char *text;
+       int index, r, g, b;
+
+       if (!data) return;
+       ad = (struct appdata *)data;
+
+       // if color is not selected, return
+       evas_object_color_get(_selected_rect, &r, &g, &b, NULL);
+       if (r == 255 && g == 255 && b == 255) return;
+
+       index = (int)evas_object_data_get(_selected_rect, "index");
+       printf("theme index: %d\n", index);
+
+       text = elm_object_item_text_get(it);
+       if (text && strstr(text, "Dark"))
+               ea_theme_fixed_style_set(index, EA_THEME_STYLE_DARK);
+       else if (text && strstr(text, "Light"))
+               ea_theme_fixed_style_set(index, EA_THEME_STYLE_LIGHT);
+
+       elm_naviframe_item_pop(ad->nf);
+}
+
+static void _rect_selected(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       int r, g, b, a;
+
+       evas_object_color_get(obj, &r, &g, &b, &a);
+       evas_object_color_set(_selected_rect, r, g, b, a);
+       evas_object_data_set(_selected_rect, "index", data);
+}
+
+static Evas_Object *_create_color_box(struct appdata *ad)
+{
+       Evas_Object *box, *lb, *rect, *hbox, *hbox2, *hbox3, *cur_box;
+       Eina_List *colors;
+       Ea_Theme_Color_hsv *color;
+       int start, r, g, b;
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.5);
+
+       lb = elm_label_add(box);
+       elm_object_text_set(lb, " Theme Colors");
+       evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, lb);
+       evas_object_show(lb);
+
+       hbox = elm_box_add(ad->nf);
+       elm_box_horizontal_set(hbox, EINA_TRUE);
+       evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, hbox);
+       evas_object_show(hbox);
+
+       hbox2 = elm_box_add(ad->nf);
+       elm_box_horizontal_set(hbox2, EINA_TRUE);
+       evas_object_size_hint_weight_set(hbox2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(hbox2, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, hbox2);
+       evas_object_show(hbox2);
+
+       hbox3 = elm_box_add(ad->nf);
+       elm_box_horizontal_set(hbox3, EINA_TRUE);
+       evas_object_size_hint_weight_set(hbox3, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(hbox3, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, hbox3);
+       evas_object_show(hbox3);
+
+       cur_box = hbox;
+
+       start = EA_THEME_COLOR_TABLE_1;
+       colors = ea_theme_input_colors_get(start);
+       while(colors)
+       {
+               rect = evas_object_rectangle_add(evas_object_evas_get(cur_box));
+               evas_object_size_hint_min_set(rect, 100, 100);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _rect_selected, (void *)start);
+               elm_box_pack_end(cur_box, rect);
+               evas_object_show(rect);
+
+               // set main color to rect
+               color = eina_list_data_get(colors);
+               if (color)
+               {
+                       evas_color_hsv_to_rgb((float)color->h, color->s / 100.0, color->v / 100.0, &r, &g, &b);
+                       evas_object_color_set(rect, r, g, b, 255);
+               }
+
+               // free colors
+               EINA_LIST_FREE(colors, color)
+                       free(color);
+               start++;
+               if(start == MAX_NUM_OF_RECT) cur_box = hbox2;
+               colors = ea_theme_input_colors_get(start);
+       }
+
+       start = EA_THEME_COLOR_TABLE_2;
+       colors = ea_theme_input_colors_get(start);
+       while(colors)
+       {
+               rect = evas_object_rectangle_add(evas_object_evas_get(cur_box));
+               evas_object_size_hint_min_set(rect, 100, 100);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _rect_selected, (void *)start);
+               elm_box_pack_end(cur_box, rect);
+               evas_object_show(rect);
+
+               // set main color to rect
+               color = eina_list_data_get(colors);
+               if (color)
+               {
+                       evas_color_hsv_to_rgb((float)color->h, color->s / 100.0, color->v / 100.0, &r, &g, &b);
+                       evas_object_color_set(rect, r, g, b, 255);
+               }
+
+               // free colors;
+               EINA_LIST_FREE(colors, color)
+                       free(color);
+               start++;
+               colors = ea_theme_input_colors_get(start);
+       }
+
+       start = EA_THEME_COLOR_TABLE_3;
+       colors = ea_theme_input_colors_get(start);
+       cur_box = hbox3;
+       while(colors)
+       {
+               rect = evas_object_rectangle_add(evas_object_evas_get(cur_box));
+               evas_object_size_hint_min_set(rect, 100, 100);
+               evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_UP, _rect_selected, (void *)start);
+               elm_box_pack_end(cur_box, rect);
+               evas_object_show(rect);
+
+               // set main color to rect
+               color = eina_list_data_get(colors);
+               if (color)
+               {
+                       evas_color_hsv_to_rgb((float)color->h, color->s / 100.0, color->v / 100.0, &r, &g, &b);
+                       evas_object_color_set(rect, r, g, b, 255);
+               }
+
+               // free colors;
+               EINA_LIST_FREE(colors, color)
+                       free(color);
+               start++;
+               colors = ea_theme_input_colors_get(start);
+       }
+
+       return box;
+}
+
+static Evas_Object *_create_selected_box(struct appdata *ad)
+{
+       Evas_Object *box, *lb, *rect;
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0.5);
+
+       lb = elm_label_add(box);
+       elm_object_text_set(lb, " Selected Color");
+       evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);
+       elm_box_pack_end(box, lb);
+       evas_object_show(lb);
+
+       rect = evas_object_rectangle_add(evas_object_evas_get(box));
+       evas_object_size_hint_min_set(rect, 700, 300);
+       elm_box_pack_end(box, rect);
+       evas_object_show(rect);
+       _selected_rect = rect;
+
+       return box;
+}
+
+static Evas_Object *_create_layout(struct appdata *ad)
+{
+       Evas_Object *box, *sbox, *cbox;
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(box);
+
+       // selected box
+       sbox = _create_selected_box(ad);
+       elm_box_pack_end(box, sbox);
+       evas_object_show(sbox);
+
+       // color box
+       cbox = _create_color_box(ad);
+       elm_box_pack_end(box, cbox);
+       evas_object_show(cbox);
+
+       return box;
+}
+
+void theme_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ly, *tb, *sc;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       sc = elm_scroller_add(ad->nf);
+       elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(sc);
+
+       ly = _create_layout(ad);
+       elm_object_content_set(sc, ly);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Theme"), NULL, NULL, sc, NULL);
+
+       tb = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(tb, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(tb, EINA_TRUE);
+       elm_toolbar_select_mode_set(tb, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(tb, NULL, "Dark", _button_clicked, ad);
+       elm_toolbar_item_append(tb, NULL, "Light", _button_clicked, ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", tb);
+}
diff --git a/live.viewer/dbox.app/src/tickernoti.c b/live.viewer/dbox.app/src/tickernoti.c
new file mode 100644 (file)
index 0000000..fda2e8a
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Lnd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "tickernoti.h"
+#include <Ecore_X.h>
+
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+
+
+static Evas_Object *tickernoti_email = NULL;
+static Evas_Object *tickernoti_textonly = NULL;
+static void _rotate_noti_win_cb(void *data, Evas_Object *obj, void *event_info);
+
+enum Noti_Orient {
+       TICKERNOTI_ORIENT_TOP = 0,
+       TICKERNOTI_ORIENT_BOTTOM,
+       TICKERNOTI_ORIENT_LAST
+} ;
+
+struct Tickernoti_Data {
+       Evas_Object *content;
+       Evas_Coord w;
+       Evas_Coord h;
+       int angle;
+       enum Noti_Orient orient;
+       Eina_Bool is_show;
+} ;
+
+static const char *data_key = "_data";
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       free(evas_object_data_del(tickernoti_email, data_key));
+       free(evas_object_data_del(tickernoti_textonly, data_key));
+       evas_object_del(tickernoti_email);
+       evas_object_del(tickernoti_textonly);
+       evas_object_smart_callback_del(data, "rotation,changed", _rotate_noti_win_cb);
+
+       return EINA_TRUE;
+}
+
+static void
+_tickernoti_update_geometry(Evas_Object *noti_win, Evas_Coord x, Evas_Coord y,
+               Evas_Coord w, Evas_Coord h, int angle)
+{
+       if (!noti_win)
+               return;
+       elm_win_rotation_set(noti_win, angle);
+       //printf("Rotate notification window to %d\n", angle);
+       evas_object_move(noti_win, x, y);
+       //printf("Move notification window to %d %d\n", x, y);
+       evas_object_resize(noti_win, w, h);
+       //printf("Resize notification window to %d %d\n", w, h);
+}
+
+static void
+_tickernoti_recalc_position(Evas_Object *noti_win)
+{
+       struct Tickernoti_Data *td;
+       Evas_Coord x = 0, y = 0, w = 0, h = 0;
+
+       if (!noti_win) {
+               printf("noti_win is NULL\n");
+               return;
+       }
+       td = evas_object_data_get(noti_win, data_key);
+       if (!td) {
+               printf("noti_win data is NULL\n");
+               return;
+       }
+       evas_object_geometry_get(td->content, NULL, NULL, &w, &h);
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &x, &y);
+       switch (td->angle) {
+       case 90:
+               if (td->orient == TICKERNOTI_ORIENT_TOP) {
+                       _tickernoti_update_geometry(noti_win, 0, 0, y, h, 90);
+               } else {
+                       _tickernoti_update_geometry(noti_win, x - h, 0, y, h, 90);
+               }
+               break;
+       case 180:
+               if (td->orient == TICKERNOTI_ORIENT_TOP) {
+                       _tickernoti_update_geometry(noti_win, 0, y - h, x, h, 180);
+               } else {
+                       _tickernoti_update_geometry(noti_win, 0, 0, x, h, 180);
+               }
+               break;
+       case -90:
+       case 270:
+               if (td->orient == TICKERNOTI_ORIENT_TOP) {
+                       _tickernoti_update_geometry(noti_win, x - h, 0, y, h, 270);
+               } else {
+                       _tickernoti_update_geometry(noti_win, 0, 0, y, h, 270);
+               }
+               break;
+       case 0:
+       default:
+               if (td->orient == TICKERNOTI_ORIENT_TOP) {
+                       _tickernoti_update_geometry(noti_win, 0, 0, x, h, 0);
+               } else {
+                       _tickernoti_update_geometry(noti_win, 0, y - h, x, h, 0);
+               }
+       }
+}
+
+static void
+_rotate_noti_win_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct Tickernoti_Data *td_email, *td_textonly;
+       int angle = 0;
+       td_email = evas_object_data_get(tickernoti_email, data_key);
+       td_textonly = evas_object_data_get(tickernoti_textonly, data_key);
+
+       angle = elm_win_rotation_get(data);
+       td_email->angle = angle;
+       td_textonly->angle = angle;
+
+       if(td_email->is_show)
+               _tickernoti_recalc_position(tickernoti_email);
+       if(td_textonly->is_show)
+               _tickernoti_recalc_position(tickernoti_textonly);
+}
+
+static void
+_hide_another_tickernoti(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj,
+               void *event_info __UNUSED__)
+{
+       struct Tickernoti_Data *td;
+
+       if (obj == tickernoti_email) {
+               td = evas_object_data_get(tickernoti_textonly, data_key);
+               if (td->is_show) {
+                       evas_object_hide(tickernoti_textonly);
+                       td->is_show = !td->is_show;
+               }
+       }
+       else {
+               td = evas_object_data_get(tickernoti_email, data_key);
+               if (td->is_show) {
+                       evas_object_hide(tickernoti_email);
+                       td->is_show = !td->is_show;
+               }
+       }
+}
+
+static void
+_tickernoti_show_hide(void *data, Evas_Object *obj __UNUSED__,
+               void *event_info __UNUSED__)
+{
+       struct Tickernoti_Data *td;
+
+       if (!data)
+               return;
+       td = evas_object_data_get(data, data_key);
+       if (!td)
+               return;
+       if (td->is_show) {
+               evas_object_hide(data);
+               if (td->orient == TICKERNOTI_ORIENT_TOP)
+                       elm_win_indicator_mode_set(data, ELM_WIN_INDICATOR_SHOW);
+       } else {
+               _tickernoti_recalc_position(data);
+               evas_object_show(data);
+               if (td->orient == TICKERNOTI_ORIENT_TOP)
+                       elm_win_indicator_mode_set(data, ELM_WIN_INDICATOR_HIDE);
+
+               /* access */
+               Evas_Object *ao;
+               ao = elm_access_object_get(td->content);
+               elm_access_highlight_set(ao);
+       }
+       td->is_show = !td->is_show;
+}
+
+Evas_Object *
+tickernoti_win_add(Evas_Object *parent, char *win_name)
+{
+       Evas_Object *noti_win;
+       struct Tickernoti_Data *td;
+
+       noti_win = elm_win_add(parent, win_name, ELM_WIN_NOTIFICATION);
+       elm_win_borderless_set(noti_win, EINA_TRUE);
+       elm_win_autodel_set(noti_win, EINA_TRUE);
+       elm_win_alpha_set(noti_win, EINA_TRUE);
+       evas_object_size_hint_weight_set(noti_win, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       td = (struct Tickernoti_Data *) calloc(1, sizeof(struct Tickernoti_Data));
+       if (!td)
+               return NULL;
+       evas_object_data_set(noti_win, data_key, td);
+       td->angle = 0;
+       td->w = 0;
+       td->h = 0;
+       td->orient = TICKERNOTI_ORIENT_TOP;
+       td->is_show = EINA_FALSE;
+
+       return noti_win;
+}
+
+void
+tickernoti_content_set(Evas_Object *noti_win, Evas_Object *content,
+               enum Noti_Orient orient)
+{
+       struct Tickernoti_Data *td;
+
+       if (!noti_win)
+               return;
+       td = evas_object_data_get(noti_win, data_key);
+       if (!td)
+               return;
+       if (content) {
+               td->content = content;
+               evas_object_size_hint_weight_set(td->content, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               elm_win_resize_object_add(noti_win, content);
+               td->orient = orient;
+       }
+}
+
+void
+tickernoti_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *layout;
+       Evas_Object *btn;
+       Elm_Object_Item *navi_it;
+       Evas_Object *content;
+       Evas_Object *icon;
+       char buf[255];
+
+       ad = (struct appdata*) data;
+       if (!ad)
+               return;
+
+       //layout
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "tickernoti_layout");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Tickernoti"), NULL, NULL, layout, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, ad->win_main);
+       evas_object_show(layout);
+
+       //content layout for tickernoti_email
+       tickernoti_email = tickernoti_win_add(ad->win_main, "tickernoti_email");
+       content = elm_layout_add(tickernoti_email);
+       elm_layout_theme_set(content, "tickernoti", "base", "default");
+       elm_object_part_text_set(content, "elm.text.sub", "Check this one");
+       elm_object_text_set(content, "Edward Mikeal");
+       evas_object_show(content);
+
+       /* access */
+       Evas_Object *ao;
+       char *content_text;
+       ao = elm_access_object_register(content, tickernoti_email);
+       elm_access_info_set(ao, ELM_ACCESS_TYPE, "notification");
+       content_text = evas_textblock_text_markup_to_utf8(NULL, elm_object_text_get(content));
+       elm_access_info_set(ao, ELM_ACCESS_INFO, content_text);
+
+       btn = elm_button_add(content);
+       elm_object_text_set(btn, "Close");
+       elm_object_part_content_set(content, "button", btn);
+       evas_object_smart_callback_add(btn, "clicked", _tickernoti_show_hide, tickernoti_email);
+       evas_object_show(btn);
+
+       icon = elm_image_add(content);
+       snprintf(buf, sizeof(buf), "%s/g0.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       elm_object_part_content_set(content, "icon", icon);
+       evas_object_show(icon);
+
+       //tickernoti_email
+       tickernoti_content_set(tickernoti_email, content, TICKERNOTI_ORIENT_TOP);
+
+       //content layout for tickernoti_textonly
+       tickernoti_textonly = tickernoti_win_add(ad->win_main, "tickernoti_textonly");
+       content = elm_layout_add(tickernoti_textonly);
+       elm_layout_theme_set(content, "tickernoti", "base", "textonly");
+       elm_object_text_set(content, "Text text text text text text text text text text text text text text text text text text text");
+       evas_object_show(content);
+
+       //tickernoti_textonly
+       tickernoti_content_set(tickernoti_textonly, content, TICKERNOTI_ORIENT_TOP);
+
+       //rotate notification windows
+       evas_object_smart_callback_add(ad->win_main, "rotation,changed", _rotate_noti_win_cb, ad->win_main);
+       _rotate_noti_win_cb(ad->win_main, ad->win_main, NULL);
+
+       //show button
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Show/Hide Email Notification") );
+       evas_object_smart_callback_add(btn, "clicked", _tickernoti_show_hide, tickernoti_email);
+       evas_object_event_callback_add(tickernoti_email, EVAS_CALLBACK_SHOW, _hide_another_tickernoti, NULL);
+       elm_object_part_content_set(layout, "btn1", btn);
+
+       btn = elm_button_add(layout);
+       elm_object_text_set(btn, _("Show/Hide TextOnly Notification") );
+       evas_object_smart_callback_add(btn, "clicked", _tickernoti_show_hide, tickernoti_textonly);
+       evas_object_event_callback_add(tickernoti_textonly, EVAS_CALLBACK_SHOW, _hide_another_tickernoti, NULL);
+       elm_object_part_content_set(layout, "btn2", btn);
+}
diff --git a/live.viewer/dbox.app/src/toolbar.c b/live.viewer/dbox.app/src/toolbar.c
new file mode 100644 (file)
index 0000000..5e891b2
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "toolbar_tab.h"
+#include "toolbar_tool.h"
+#include "toolbar_mix.h"
+#include <math.h>
+
+static struct _menu_item menu_main[] = {
+       { "Tab Style", tab_cb},
+       { "Tool Style", tool_cb},
+//     { "Mix Style", mix_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if(parent == NULL || ad == NULL) return NULL;
+
+       li = elm_list_add(parent);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void toolbar_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       list = _create_list_winset(ad->layout_main, menu_main, ad);
+       elm_naviframe_item_push(ad->nf, _("Toolbar"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/toolbar_mix.c b/live.viewer/dbox.app/src/toolbar_mix.c
new file mode 100644 (file)
index 0000000..9a06a64
--- /dev/null
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include <math.h>
+
+Ecore_Timer *timer, *timer2;
+
+#define ELM_MAX(v1, v2)    (((v1) > (v2)) ? (v1) : (v2))
+
+static void segment_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void progressbar_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void loadingbar_style_cb(void *data, Evas_Object *obj, void *event_info);
+
+static Eina_Bool _fn_pb_timer_bar(void *data);
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata* ad);
+
+static Evas_Object *create_segment(struct appdata *ad);
+static Evas_Object *create_progressbar(struct appdata *ad);
+static Evas_Object *create_loadingbar(struct appdata *ad);
+
+static struct _menu_item menu_main[] = {
+   { "Segment Style", segment_style_cb},
+   { "ProgressBar Style", progressbar_style_cb},
+   { "LoadingBar Style", loadingbar_style_cb},
+   /* do not delete below */
+   { NULL, NULL }
+};
+
+static void _delete_timer()
+{
+   if (timer){
+      ecore_timer_del(timer);
+      timer = NULL;
+   }
+
+   if (timer2){
+      ecore_timer_del(timer2);
+      timer = NULL;
+   }
+}
+
+static Eina_Bool _pop_cb(void *data, Elm_Object_Item *it)
+{
+   _delete_timer();
+   return EINA_TRUE;
+}
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   evas_object_del(data);
+}
+
+static void _toolbar_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   struct appdata *ad = (struct appdata *)data;
+   Evas_Object *popup, *btn1, *btn2;
+
+   popup = elm_popup_add(ad->win_main);
+   evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_text_set(popup,"Toolbar item was clicked. if you want to go back, press any button.");
+   btn1 = elm_button_add(popup);
+   elm_object_style_set(btn1, "popup");
+   elm_object_text_set(btn1, "OK");
+   elm_object_part_content_set(popup, "button1", btn1);
+   evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+   btn2 = elm_button_add(popup);
+   elm_object_style_set(btn2, "popup");
+   elm_object_text_set(btn2, "Cancel");
+   elm_object_part_content_set(popup, "button2", btn2);
+   evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+   evas_object_show(popup);
+}
+
+static void segment_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       _delete_timer();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_segment(ad);
+       elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+}
+
+static void progressbar_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       _delete_timer();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_progressbar(ad);
+       elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+}
+
+static void loadingbar_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+
+       ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       _delete_timer();
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_loadingbar(ad);
+       elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+}
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+   Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+   if (it == NULL) return;
+
+   elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata *ad)
+{
+   Evas_Object *li;
+
+   if (parent == NULL || ad == NULL) return NULL;
+
+   li = elm_list_add(parent);
+   elm_list_mode_set(li, ELM_LIST_COMPRESS);
+   evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+   int idx = 0;
+
+   while (menu[ idx ].name != NULL) {
+
+          elm_list_item_append(
+                          li,
+                          menu[ idx ].name,
+                          NULL,
+                          NULL,
+                          menu[ idx ].func,
+                          ad);
+          ++idx;
+   }
+
+   elm_list_go(li);
+
+   return li;
+}
+
+static Eina_Bool _fn_pb_timer_bar(void *data)
+{
+   double value=0.0;
+   Evas_Object *progressbar = (Evas_Object*) data;
+
+   value = elm_progressbar_value_get(progressbar);
+   if (value == 1.0)
+          value = 0.0;
+   value = value + 0.01;
+   elm_progressbar_value_set(progressbar, value);
+   return ECORE_CALLBACK_RENEW;
+}
+
+static Evas_Object *create_segment(struct appdata *ad)
+{
+   Evas_Object *obj;
+   Evas_Object *segment;
+   Evas_Object *box;
+   Elm_Object_Item *item[3], *seg_it;
+
+   /* create toolbar */
+   obj = elm_toolbar_add(ad->nf);
+   if (obj == NULL) return NULL;
+   elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+   elm_toolbar_homogeneous_set(obj, EINA_FALSE);
+
+   item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+
+   box = elm_box_add(obj);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   evas_object_size_hint_min_set(box, 180, 20);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   segment = elm_segment_control_add(box);
+   evas_object_size_hint_weight_set(segment, EVAS_HINT_EXPAND, 0.5);
+   evas_object_size_hint_align_set(segment, EVAS_HINT_FILL, 0.5);
+   seg_it = elm_segment_control_item_add(segment, NULL, "All");
+   elm_segment_control_item_add(segment, NULL, "Call");
+   elm_segment_control_item_add(segment, NULL, "Message");
+   elm_segment_control_item_selected_set(seg_it, EINA_TRUE);
+   evas_object_show(segment);
+   elm_box_pack_end(box, segment);
+
+   item[1] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+   elm_object_item_part_content_set(item[1], "object", box);
+
+   return obj;
+}
+
+static Evas_Object *create_progressbar(struct appdata *ad)
+{
+   Evas_Object *obj;
+   Evas_Object *progressbar;
+   Evas_Object *box;
+   Evas_Object *label;
+   Elm_Object_Item *item[3];
+
+   /* create toolbar */
+   obj = elm_toolbar_add(ad->nf);
+   if (obj == NULL) return NULL;
+   elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+   elm_toolbar_homogeneous_set(obj, EINA_FALSE);
+
+   item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+
+   box = elm_box_add(obj);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   evas_object_size_hint_min_set(box, 180, 20);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   progressbar = elm_progressbar_add(box);
+   elm_object_style_set(progressbar, "list_progress");
+   elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+   evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 1.0);
+   elm_progressbar_span_size_set(progressbar, 150);
+   elm_progressbar_value_set(progressbar, 0.0);
+   timer = ecore_timer_add(0.1, _fn_pb_timer_bar, progressbar);
+   evas_object_show(progressbar);
+   elm_box_pack_end(box, progressbar);
+
+   label = elm_label_add(box);
+   elm_object_text_set(label, "<font_size=18><color=#ffffff>progressbar</color></font_size>");
+   evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(label, 0.5, 0.5);
+   evas_object_show(label);
+   elm_box_pack_end(box, label);
+
+   item[1] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+   elm_object_item_part_content_set(item[1], "object", box);
+
+   return obj;
+}
+
+static Evas_Object *create_loadingbar(struct appdata *ad)
+{
+   Evas_Object *obj;
+   Evas_Object *progressbar;
+   Evas_Object *box;
+   Evas_Object *label;
+   Elm_Object_Item *item[3];
+
+   /* create toolbar */
+   obj = elm_toolbar_add(ad->nf);
+   if (obj == NULL) return NULL;
+   elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+   elm_toolbar_homogeneous_set(obj, EINA_FALSE);
+
+   item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+
+   box = elm_box_add(obj);
+   elm_box_horizontal_set(box, EINA_TRUE);
+   elm_box_homogeneous_set(box, EINA_FALSE);
+   evas_object_size_hint_min_set(box, 180, 20);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, 0.5, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   progressbar = elm_progressbar_add(box);
+   elm_object_style_set(progressbar, "toolbar_process");
+   elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+   evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(progressbar, 0.5, 0.5);
+   elm_progressbar_span_size_set(progressbar, 60);
+   elm_progressbar_pulse(progressbar, EINA_TRUE);
+   evas_object_show(progressbar);
+   elm_box_pack_end(box, progressbar);
+
+   label = elm_label_add(box);
+   elm_object_text_set(label, "<font_size=14><color=#ffffff>Activity Indicator Progressbar</color></font_size>");
+   evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(label, 0.5, 0.5);
+   evas_object_show(label);
+   elm_box_pack_end(box, label);
+
+   item[1] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+   elm_object_item_part_content_set(item[1], "object", box);
+
+   return obj;
+}
+
+void mix_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   struct appdata *ad;
+   Evas_Object *sub_view = NULL;
+   Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+
+   ad = (struct appdata *) data;
+   if (ad == NULL) return;
+
+   sub_view = _create_list_winset(obj, menu_main, ad);
+   navi_it = elm_naviframe_item_push(ad->nf, _("Mixbar"), NULL, NULL, sub_view, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, ad);
+   toolbar = create_segment(ad);
+       elm_object_item_part_content_set(navi_it, "controlbar", toolbar);
+}
diff --git a/live.viewer/dbox.app/src/toolbar_tab.c b/live.viewer/dbox.app/src/toolbar_tab.c
new file mode 100644 (file)
index 0000000..3c52ea9
--- /dev/null
@@ -0,0 +1,696 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include <math.h>
+
+Evas_Object *ly;
+static Ecore_Timer *timer;
+#define ELM_MAX(v1, v2)    (((v1) > (v2)) ? (v1) : (v2))
+
+static void _2_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _3_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _scrollable_style_cb(void *data, Evas_Object *obj, void *event_info);
+//static void _more_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _2_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _3_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _4_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info);
+//static void _icon_only_style_cb(void *data, Evas_Object *obj, void *event_info) ;
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata* ad);
+
+static Evas_Object *create_2_items_tabbar(struct appdata *ad);
+static Evas_Object *create_3_items_tabbar(struct appdata *ad);
+static Evas_Object *create_scrollable_tabbar(struct appdata *ad);
+//static Evas_Object *create_more_items_tabbar(struct appdata *ad);
+static Evas_Object *create_text_only_2_items_tabbar(struct appdata *ad);
+static Evas_Object *create_text_only_3_items_tabbar(struct appdata *ad);
+static Evas_Object *create_text_only_4_items_tabbar(struct appdata *ad);
+//static Evas_Object *create_icon_only_tabbar(struct appdata *ad);
+
+static struct _menu_item menu_main[] = {
+       { "2 Items Style", _2_items_style_cb},
+       { "3 Items Style", _3_items_style_cb},
+       { "Scrollable Style", _scrollable_style_cb},
+//     { "More Items Style", _more_items_style_cb},
+       { "2 Items With Title Style", _2_items_with_title_style_cb},
+       { "3 Items With Title Style", _3_items_with_title_style_cb},
+       { "4 Items With Title Style", _4_items_with_title_style_cb},
+//     { "Icon Only Style", _icon_only_style_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static struct _menu_item menu_first[] = {
+       { "Music", NULL},
+       { "Message", NULL},
+       { "Call", NULL},
+       { "Memo", NULL},
+       { "Alarm", NULL},
+       { "SNS", NULL},
+       { "Email", NULL},
+       { "Worldclock", NULL},
+       { "Converter", NULL},
+       { "Stopwatch", NULL},
+       { "Calculator", NULL},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static struct _menu_item menu_second[] = {
+       { "Tab Bar", NULL},
+       { "Navigation Bar", NULL},
+       { "Slider", NULL},
+       { "Genlist", NULL},
+       { "Tool Bar", NULL},
+       { "Color Picker", NULL},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static struct _menu_item menu_third[] = {
+       { "Eina", NULL},
+       { "Evas", NULL},
+       { "Ecore", NULL},
+       { "Elementary", NULL},
+       { "Edje", NULL},
+       { "Eet", NULL},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static struct _menu_item menu_fourth[] = {
+       { "Aquila", NULL},
+       { "Pantheon", NULL},
+       { "Kessler", NULL},
+       { "Neptune", NULL},
+       { "Aqua", NULL},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _2_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if (tabbar) evas_object_del(tabbar);
+               tabbar = create_2_items_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+       } else
+       {
+               ly = elm_layout_add(ad->nf);
+               elm_layout_theme_set(ly, "layout", "tabbar", "default");
+               tabbar = create_2_items_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+               elm_object_item_part_content_set(navi_it, NULL, ly);
+       }
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_FALSE, EINA_FALSE);
+}
+
+static void _3_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if (tabbar) evas_object_del(tabbar);
+               tabbar = create_3_items_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+       } else
+       {
+               ly = elm_layout_add(ad->nf);
+               elm_layout_theme_set(ly, "layout", "tabbar", "default");
+               tabbar = create_3_items_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+               elm_object_item_part_content_set(navi_it, NULL, ly);
+       }
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_FALSE, EINA_FALSE);
+}
+
+static void _scrollable_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if (tabbar) evas_object_del(tabbar);
+               tabbar = create_scrollable_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+       } else
+       {
+               ly = elm_layout_add(ad->nf);
+               elm_layout_theme_set(ly, "layout", "tabbar", "default");
+               tabbar = create_scrollable_tabbar(ad);
+               elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+               navi_it = elm_naviframe_top_item_get(ad->nf);
+               elm_object_item_part_content_set(navi_it, NULL, ly);
+       }
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_FALSE, EINA_FALSE);
+}
+
+/*static void _more_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+       if (tabbar) evas_object_del(tabbar);
+       tabbar = create_more_items_tabbar(ad);
+       elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+}*/
+
+static void _2_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if (tabbar) evas_object_del(tabbar);
+               evas_object_del(ly);
+               ly = NULL;
+       }
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       elm_object_item_part_text_set(navi_it, NULL, "2 Items with Title");
+
+       tabbar = create_text_only_2_items_tabbar(ad);
+       elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_FALSE);
+}
+
+static void _3_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if(tabbar) evas_object_del(tabbar);
+               evas_object_del(ly);
+               ly = NULL;
+       }
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       elm_object_item_part_text_set(navi_it, NULL, "3 Items with Title");
+
+       tabbar = create_text_only_3_items_tabbar(ad);
+       elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_FALSE);
+}
+
+static void _4_items_with_title_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       if (ly)
+       {
+               tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+               if (tabbar) evas_object_del(tabbar);
+               evas_object_del(ly);
+               ly = NULL;
+       }
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       elm_object_item_part_text_set(navi_it, NULL, "4 Items with Title");
+
+       tabbar = create_text_only_4_items_tabbar(ad);
+       elm_object_item_part_content_set(navi_it, "tabbar", tabbar);
+
+       elm_naviframe_item_title_enabled_set(navi_it, EINA_TRUE, EINA_FALSE);
+}
+
+/*static void _icon_only_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *tabbar;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       tabbar = elm_object_part_content_unset(ly, "elm.swallow.tabbar");
+       if (tabbar) evas_object_del(tabbar);
+       tabbar = create_icon_only_tabbar(ad);
+       elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+}*/
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       if (timer && strcmp(elm_object_item_text_get(it), "Scrollable Style"))
+       {
+               ecore_timer_del(timer);
+               timer = NULL;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata *ad)
+{
+       Evas_Object *li;
+
+       if(parent == NULL || ad == NULL) return NULL;
+
+       li = elm_list_add(parent);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+static void view_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *sub_view;
+       Elm_Object_Item *it;
+       const char *str = NULL;
+
+       it = elm_toolbar_selected_item_get(obj);
+       if (it)
+               str = elm_object_item_text_get(it);
+
+       sub_view = elm_object_part_content_unset(ly, "elm.swallow.content");
+       evas_object_del(sub_view);
+
+       if (!str || !strcmp(str, "Main"))
+               sub_view = _create_list_winset(ad->layout_main, menu_main, ad);
+       else if (!strcmp(str, "Playlist"))
+               sub_view = _create_list_winset(ad->layout_main, menu_first, ad);
+       else if (!strcmp(str, "Artists list"))
+               sub_view = _create_list_winset(ad->layout_main, menu_second, ad);
+       else if (!strcmp(str, "Songs"))
+               sub_view = _create_list_winset(ad->layout_main, menu_third, ad);
+       else if (!strcmp(str, "Dialer for call"))
+               sub_view = _create_list_winset(ad->layout_main, menu_fourth, ad);
+       else
+               sub_view = _create_list_winset(ad->layout_main, menu_main, ad);
+
+       elm_object_part_content_set(ly, "elm.swallow.content", sub_view);
+       evas_object_show(sub_view);
+}
+
+static void view_change_cb2(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *sub_view;
+       Elm_Object_Item *it, *navi_it;
+       const char *str = NULL;
+
+       it = elm_toolbar_selected_item_get(obj);
+       if (it)
+               str = elm_object_item_text_get(it);
+
+       if (!str || !strcmp(str, "Main"))
+               sub_view = _create_list_winset(ad->layout_main, menu_main, ad);
+       else if (!strcmp(str, "Playlist"))
+               sub_view = _create_list_winset(ad->layout_main, menu_first, ad);
+       else if (!strcmp(str, "Artists list"))
+               sub_view = _create_list_winset(ad->layout_main, menu_second, ad);
+       else if (!strcmp(str, "Songs"))
+               sub_view = _create_list_winset(ad->layout_main, menu_third, ad);
+       else if (!strcmp(str, "Dialer for call"))
+               sub_view = _create_list_winset(ad->layout_main, menu_fourth, ad);
+       else
+               sub_view = _create_list_winset(ad->layout_main, menu_main, ad);
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       elm_object_item_part_content_set(navi_it, NULL, sub_view);
+       evas_object_show(sub_view);
+}
+/*static void _toolbar_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = elm_toolbar_more_item_get(data);
+       if (!strcmp(elm_object_item_text_get(it), "Open") && (it == elm_toolbar_selected_item_get(data)))
+       {
+               elm_toolbar_item_icon_set(it, "arrow_up");
+               elm_object_item_text_set(it, "Close");
+       }
+       else if (!strcmp(elm_object_item_text_get(it), "Close"))
+       {
+               elm_toolbar_item_icon_set(it, "arrow_down");
+               elm_object_item_text_set(it, "Open");
+       }
+}*/
+
+static int _rotate_toolbar_cb(enum appcore_rm rotmode, void *data)
+{
+       switch (rotmode) {
+               case APPCORE_RM_PORTRAIT_NORMAL:
+
+               case APPCORE_RM_PORTRAIT_REVERSE:
+
+               case APPCORE_RM_UNKNOWN:
+                       elm_object_signal_emit(ly, "elm,state,icon_text,tabbar", "elm");
+                       elm_object_style_set((Evas_Object *)data, "tabbar");
+                       break;
+
+               case APPCORE_RM_LANDSCAPE_NORMAL:
+
+               case APPCORE_RM_LANDSCAPE_REVERSE:
+                       elm_object_signal_emit(ly, "elm,state,horizontal_icon_text,tabbar", "elm");
+                       elm_object_style_set((Evas_Object *)data, "tabbar/item_horizontal");
+                       break;
+       }
+       return 0;
+}
+
+static Eina_Bool item_show_last(void *data)
+{
+       elm_toolbar_item_show(data, ELM_TOOLBAR_ITEM_SCROLLTO_LAST);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool item_bring_in_first(void *data)
+{
+       timer = NULL;
+       elm_toolbar_item_bring_in(data, ELM_TOOLBAR_ITEM_SCROLLTO_FIRST);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static Evas_Object *create_2_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[3];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       elm_object_signal_emit(ly, "elm,state,icon_text,tabbar", "elm");
+       elm_object_style_set(obj, "tabbar");
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", view_change_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       elm_object_item_part_text_set(item[1], "elm.text.badge", "24");
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}
+
+static Evas_Object *create_3_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[3];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       elm_object_signal_emit(ly, "elm,state,icon_text,tabbar", "elm");
+       elm_object_style_set(obj, "tabbar");
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", view_change_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       elm_object_item_part_text_set(item[2], "elm.text.badge", "7");
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}
+
+static Evas_Object *create_scrollable_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[8];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       elm_object_signal_emit(ly, "elm,state,icon_text,tabbar", "elm");
+       elm_object_style_set(obj, "tabbar");
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", view_change_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       elm_object_item_part_text_set(item[1], "elm.text.badge", "99");
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       elm_object_item_disabled_set(item[2], EINA_TRUE);
+       elm_object_item_part_text_set(item[2], "elm.text.badge", "8");
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", view_change_cb, ad);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", view_change_cb, ad);
+       item[5] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       elm_object_item_part_text_set(item[5], "elm.text.badge", "999");
+       item[6] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       item[7] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", view_change_cb, ad);
+       elm_object_item_part_text_set(item[7], "elm.text.badge", "9999");
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       ecore_idler_add(item_show_last, item[7]);
+       timer = ecore_timer_add(0.5, item_bring_in_first, item[0]);
+
+       set_rotate_cb_for_winset(_rotate_toolbar_cb, obj);
+
+       return obj;
+}
+
+/*static Evas_Object *create_more_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[14];
+
+       // create toolbar //
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       elm_toolbar_standard_priority_set(obj, 1);
+
+       elm_object_signal_emit(ly, "elm,state,icon_text,tabbar", "elm");
+       elm_object_style_set(obj, "tabbar");
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", view_change_cb, ad);
+       elm_toolbar_item_priority_set(item[0], 100);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       elm_toolbar_item_priority_set(item[1], 100);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       elm_toolbar_item_priority_set(item[2], 100);
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", view_change_cb, ad);
+       elm_toolbar_item_priority_set(item[3], 100);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", view_change_cb, ad);
+
+       item[5] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", view_change_cb, ad);
+       item[6] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       item[7] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       item[8] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", view_change_cb, ad);
+       item[9] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", view_change_cb, ad);
+
+       item[10] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", view_change_cb, ad);
+       item[11] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", view_change_cb, ad);
+       item[12] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", view_change_cb, ad);
+       item[13] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", view_change_cb, ad);
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       elm_toolbar_item_icon_set(elm_toolbar_more_item_get(obj), "arrow_down");
+       elm_object_item_text_set(elm_toolbar_more_item_get(obj), "Open");
+
+       evas_object_smart_callback_add(obj, "clicked", _toolbar_clicked_cb, obj);
+
+       return obj;
+}*/
+
+static Evas_Object *create_text_only_2_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[5];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_object_style_set(obj, "tabbar/item_with_title");
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", view_change_cb2, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", view_change_cb2, ad);
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}
+
+static Evas_Object *create_text_only_3_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[5];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_object_style_set(obj, "tabbar/item_with_title");
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", view_change_cb2, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", view_change_cb2, ad);
+       item[2] = elm_toolbar_item_append(obj, NULL, "Artists list", view_change_cb2, ad);
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}
+
+static Evas_Object *create_text_only_4_items_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[5];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_object_style_set(obj, "tabbar/item_with_title");
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", view_change_cb2, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", view_change_cb2, ad);
+       item[2] = elm_toolbar_item_append(obj, NULL, "Artists list", view_change_cb2, ad);
+       item[3] = elm_toolbar_item_append(obj, NULL, "Composers", view_change_cb2, ad);
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}
+
+/*static Evas_Object *create_icon_only_tabbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[5];
+
+       // create toolbar //
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_reorder_mode_set(obj, EINA_TRUE);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       elm_object_signal_emit(ly, "elm,state,default,tabbar", "elm");
+       elm_object_style_set(obj, "tabbar");
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", NULL, view_change_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", NULL, view_change_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", NULL, view_change_cb, ad);
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", NULL, view_change_cb, ad);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", NULL, view_change_cb, ad);
+       elm_object_item_part_text_set(item[4], "elm.text.badge", "999");
+
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_toolbar_item_selected_set(item[0], EINA_TRUE);
+
+       return obj;
+}*/
+
+void tab_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *tabbar;
+       Elm_Object_Item *nf_it;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       ly = elm_layout_add(ad->nf);
+       elm_layout_theme_set(ly, "layout", "tabbar", "default");
+
+       tabbar = create_scrollable_tabbar(ad);
+       elm_object_part_content_set(ly, "elm.swallow.tabbar", tabbar);
+       nf_it = elm_naviframe_item_push(ad->nf, _("Tabbar"), NULL, NULL, ly, "tabbar");
+       elm_naviframe_item_title_enabled_set(nf_it, EINA_FALSE, EINA_FALSE);
+}
diff --git a/live.viewer/dbox.app/src/toolbar_tool.c b/live.viewer/dbox.app/src/toolbar_tool.c
new file mode 100644 (file)
index 0000000..a9f66ae
--- /dev/null
@@ -0,0 +1,576 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include <math.h>
+
+//Evas_Object *sub_view[10];
+
+#define ELM_MAX(v1, v2)    (((v1) > (v2)) ? (v1) : (v2))
+
+static void _1_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _2_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _3_items_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _1_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _2_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _3_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _4_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _5_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _6_icons_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _2_icons_gap_style_cb(void *data, Evas_Object *obj, void *event_info);
+static void _3_icons_gap_style_cb(void *data, Evas_Object *obj, void *event_info);
+//static void _segment_style_cb(void *data, Evas_Object *obj, void *event_info);
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata* ad);
+
+static Evas_Object *create_1_items_toolbar(struct appdata *ad);
+static Evas_Object *create_2_items_toolbar(struct appdata *ad);
+static Evas_Object *create_3_items_toolbar(struct appdata *ad);
+static Evas_Object *create_1_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_2_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_3_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_4_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_5_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_6_icons_toolbar(struct appdata *ad);
+static Evas_Object *create_2_icons_gap_toolbar(struct appdata *ad);
+static Evas_Object *create_3_icons_gap_toolbar(struct appdata *ad);
+//static Evas_Object *create_segment_items_toolbar(struct appdata *ad);
+
+static struct _menu_item menu_main[] = {
+       { "1 Items Style", _1_items_style_cb},
+       { "2 Items Style", _2_items_style_cb},
+       { "3 Items Style", _3_items_style_cb},
+       { "1 Icons Style", _1_icons_style_cb},
+       { "2 Icons Style", _2_icons_style_cb},
+       { "3 Icons Style", _3_icons_style_cb},
+       { "4 Icons Style", _4_icons_style_cb},
+       { "5 Icons Style", _5_icons_style_cb},
+       { "6 Icons Style", _6_icons_style_cb},
+       { "2 Icons Gap Style", _2_icons_gap_style_cb},
+       { "3 Icons Gap Style", _3_icons_gap_style_cb},
+//     { "Segment Style", _segment_style_cb},
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_del(data);
+}
+
+static void _toolbar_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *popup, *btn1, *btn2;
+
+       popup = elm_popup_add(ad->win_main);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup,"Toolbar item was clicked. if you want to go back, press any button.");
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup");
+       elm_object_text_set(btn1, "OK");
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _response_cb, popup);
+       btn2 = elm_button_add(popup);
+       elm_object_style_set(btn2, "popup");
+       elm_object_text_set(btn2, "Cancel");
+       elm_object_part_content_set(popup, "button2", btn2);
+       evas_object_smart_callback_add(btn2, "clicked", _response_cb, popup);
+       evas_object_show(popup);
+}
+
+static void _1_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_1_items_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _2_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_2_items_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _3_items_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_3_items_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _1_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_1_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _2_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_2_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _3_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_3_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _4_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_4_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _5_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_5_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _6_icons_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_6_icons_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _2_icons_gap_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_2_icons_gap_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static void _3_icons_gap_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_3_icons_gap_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+/*
+static void _segment_style_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+       struct appdata *ad;
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       navi_it = elm_naviframe_top_item_get(ad->nf);
+       toolbar = create_segment_items_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}*/
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(it == NULL) return;
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(Evas_Object* parent, struct _menu_item *menu, struct appdata *ad)
+{
+       Evas_Object *li;
+
+       if(parent == NULL || ad == NULL) return NULL;
+
+       li = elm_list_add(parent);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+/*
+static void _move_ctxpopup(Evas_Object *ctxpopup, Evas_Object *btn)
+{
+   Evas_Coord x, y, w , h;
+   evas_object_geometry_get(btn, &x, &y, &w, &h);
+   evas_object_move(ctxpopup, x + (w / 2), y + (h /2));
+}
+
+static void _dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       evas_object_smart_callback_del(obj ,"dismissed", _dismissed_cb);
+       evas_object_del(obj);
+       obj = NULL;
+}
+
+static void _create_ctxpopup_toolbar_segmentedControl(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *ctxpopup;
+       struct appdata *ad = (struct appdata *) data;
+
+       ctxpopup = elm_ctxpopup_add(ad->nf);
+       elm_object_style_set(ctxpopup, "toolbar_segmentedcontrol");
+       evas_object_smart_callback_add(ctxpopup,"dismissed", _dismissed_cb, NULL);
+
+       elm_ctxpopup_item_append(ctxpopup, _("Group1"), NULL, NULL, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Group2"), NULL, NULL, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Group3"), NULL, NULL, ctxpopup);
+       elm_ctxpopup_item_append(ctxpopup, _("Group4"), NULL, NULL, ctxpopup);
+       _move_ctxpopup(ctxpopup, obj);
+       evas_object_show(ctxpopup);
+}*/
+
+static Evas_Object *create_1_items_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", _toolbar_clicked_cb, ad);
+
+       return obj;
+}
+
+static Evas_Object *create_2_items_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", _toolbar_clicked_cb, ad);
+       elm_object_item_disabled_set(item[0], EINA_TRUE);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_3_items_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, NULL, "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, "Playlist", _toolbar_clicked_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, NULL, "Artists list", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_1_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_2_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_3_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_4_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _toolbar_clicked_cb, ad);
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_5_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _toolbar_clicked_cb, ad);
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_6_icons_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _toolbar_clicked_cb, ad);
+       item[3] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_songs.png", "Songs", _toolbar_clicked_cb, ad);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_dialer.png", "Dialer for call", _toolbar_clicked_cb, ad);
+       item[5] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_playlist.png", "Playlist", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_2_icons_gap_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+       elm_object_item_disabled_set(item[1], EINA_TRUE);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+static Evas_Object *create_3_icons_gap_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj;
+       Elm_Object_Item *item[10];
+
+       /* create toolbar */
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+       elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_NONE);
+
+       item[0] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_favorites.png", "Main", _toolbar_clicked_cb, ad);
+       item[1] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+       elm_object_item_disabled_set(item[1],EINA_TRUE);
+       item[2] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       item[3] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+       elm_object_item_disabled_set(item[3], EINA_TRUE);
+       item[4] = elm_toolbar_item_append(obj, ICON_DIR"/00_controlbar_icon_artists.png", "Artists list", _toolbar_clicked_cb, ad);
+       return obj;
+}
+
+/*
+static Evas_Object *create_segment_items_toolbar(struct appdata *ad)
+{
+       Evas_Object *obj, *segmentedBtn;
+       Elm_Object_Item *item[10];
+
+       // create toolbar //
+       obj = elm_toolbar_add(ad->nf);
+       if(obj == NULL) return NULL;
+       elm_object_style_set(obj, "default");
+       elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(obj, EINA_TRUE);
+
+       segmentedBtn = elm_button_add(obj);
+       elm_object_style_set(segmentedBtn, "style1");
+       elm_object_text_set(segmentedBtn, _("Toolbar Segmented"));
+       evas_object_smart_callback_add(segmentedBtn, "clicked", _create_ctxpopup_toolbar_segmentedControl, ad);
+
+       item[0] = elm_toolbar_item_append(obj, NULL, NULL, NULL, NULL);
+       elm_object_item_part_content_set(item[0], "object", segmentedBtn);
+
+       return obj;
+}*/
+
+void tool_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ad;
+       Evas_Object *sub_view;
+       Evas_Object *toolbar;
+       Elm_Object_Item *navi_it;
+
+       ad = (struct appdata *) data;
+       if(ad == NULL) return;
+
+       sub_view = _create_list_winset(obj, menu_main, ad);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Toolbar"), NULL, NULL, sub_view, NULL);
+       toolbar = create_3_items_toolbar(ad);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
diff --git a/live.viewer/dbox.app/src/transit.c b/live.viewer/dbox.app/src/transit.c
new file mode 100644 (file)
index 0000000..9b3b4f8
--- /dev/null
@@ -0,0 +1,437 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "transit.h"
+
+struct custom_effect
+{
+       struct _size
+       {
+               Evas_Coord w, h;
+       }from, to;
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+       if(!it) return;
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static void _transit_del_cb(void *data, Elm_Transit *transit)
+{
+       set_rotation_mode(EINA_TRUE);
+}
+
+//Fade Effect Sample
+static void _fade_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       Elm_Transit *transit = elm_transit_add();
+       //Fade in and out with layout object.
+       elm_transit_object_add(transit, layout);
+       elm_transit_object_add(transit, layout);
+       elm_transit_effect_fade_add(transit);
+       elm_transit_duration_set(transit, 0.5);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+       elm_transit_go(transit);
+}
+
+//Translation Effect Sample
+static void _translation_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       Evas_Coord w, h;
+       evas_object_geometry_get(layout, NULL, NULL, &w, &h);
+
+       //Step 1. Translate to left side.
+       Elm_Transit *transit = elm_transit_add();
+       elm_transit_object_add(transit, layout);
+       elm_transit_effect_translation_add(transit, 0, 0, -w, 0);
+       elm_transit_duration_set(transit, 0.5);
+
+       //Step 2. Translate to up side.
+       Elm_Transit *transit2 = elm_transit_add();
+       elm_transit_object_add(transit2, layout);
+       elm_transit_effect_translation_add(transit2, 0, h, 0, 0);
+       elm_transit_duration_set(transit2, 0.5);
+       elm_transit_del_cb_set(transit2, _transit_del_cb, NULL);
+
+       elm_transit_chain_transit_add(transit, transit2);
+       elm_transit_go(transit);
+}
+
+//Rotation Effect Sample
+static void _rotation_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *nf = (Evas_Object *) data;
+       Elm_Transit *transit = elm_transit_add();
+       //360 degree rotation effect with clock wise direction.
+       elm_transit_object_add(transit, nf);
+       elm_transit_effect_rotation_add(transit, 0, 360);
+       elm_transit_duration_set(transit, 1);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+       elm_transit_go(transit);
+}
+
+//Color Effect Sample
+static void _color_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       //1. to be Red color.
+       Elm_Transit *transit1 = elm_transit_add();
+       elm_transit_object_add(transit1, layout);
+       elm_transit_effect_color_add(transit1, 255, 255, 255, 255, 255, 0, 0, 255);
+       elm_transit_duration_set(transit1, 0.5);
+
+       //2. to be Green color.
+       Elm_Transit *transit2 = elm_transit_add();
+       elm_transit_object_add(transit2, layout);
+       elm_transit_effect_color_add(transit2, 255, 0, 0, 255, 255, 255, 0, 255);
+       elm_transit_duration_set(transit2, 0.5);
+
+       //3. to be original color.
+       Elm_Transit *transit3 = elm_transit_add();
+       elm_transit_object_add(transit3, layout);
+       elm_transit_effect_color_add(transit3, 255, 255, 0, 255, 255, 255, 255, 255);
+       elm_transit_duration_set(transit3, 0.5);
+       elm_transit_del_cb_set(transit3, _transit_del_cb, NULL);
+
+       elm_transit_chain_transit_add(transit1, transit2);
+       elm_transit_chain_transit_add(transit2, transit3);
+       elm_transit_go(transit1);
+}
+
+//Blend Effect Sample
+static void _blend_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       //Let's Blend with layout and one image.
+       //Create one image object.
+       Evas_Object *img = evas_object_image_filled_add(evas_object_evas_get(layout));
+       evas_object_image_file_set(img, ICON_DIR"/logo.png", NULL);
+       evas_object_image_smooth_scale_set(img, EINA_TRUE);
+
+       Evas_Coord x, y, w, h;
+       evas_object_geometry_get(layout, &x, &y, &w, &h);
+       evas_object_move(img, x, y);
+       evas_object_resize(img, w ,h);
+
+       //Let's blend ! You can blend with all widgets as well.
+       Elm_Transit *transit = elm_transit_add();
+       elm_transit_object_add(transit, layout);
+       elm_transit_object_add(transit, img);
+       elm_transit_effect_blend_add(transit);
+       elm_transit_duration_set(transit, 0.5);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+
+       elm_transit_go(transit);
+}
+
+//Flip Effect Sample
+static void _flip_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       Elm_Transit* transit = elm_transit_add();
+       elm_transit_smooth_set(transit, EINA_FALSE);
+       elm_transit_object_add(transit, layout);
+       elm_transit_object_add(transit, layout);
+       //Flip based on Axis Y. and clock wise rotation direction.
+       elm_transit_effect_flip_add(transit, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
+       elm_transit_duration_set(transit, 0.8);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+       elm_transit_go(transit);
+}
+
+//Zoom Effect Sample
+static void _zoom_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       //Zoom out to scale 0.6.
+       Elm_Transit *transit = elm_transit_add();
+       elm_transit_smooth_set(transit, EINA_FALSE);
+       elm_transit_object_add(transit, layout);
+       elm_transit_effect_zoom_add(transit, 1.0, 0.4);
+       elm_transit_duration_set(transit, 0.5);
+
+       //Zoom in to be original size.
+       Elm_Transit *transit2 = elm_transit_add();
+       elm_transit_smooth_set(transit2, EINA_FALSE);
+       elm_transit_object_add(transit2, layout);
+       elm_transit_effect_zoom_add(transit2, 0.4, 1.0);
+       elm_transit_duration_set(transit2, 0.5);
+       elm_transit_del_cb_set(transit2, _transit_del_cb, NULL);
+
+       elm_transit_chain_transit_add(transit, transit2);
+       elm_transit_go(transit);
+}
+
+//Wipe Effect Sample
+static void _wipe_cb(void* data, Evas_Object* obj, void* event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+       //Hide wipe effect. and direction is up.
+       Elm_Transit* transit = elm_transit_add();
+       elm_transit_object_add(transit, layout);
+       elm_transit_effect_wipe_add(transit, ELM_TRANSIT_EFFECT_WIPE_TYPE_HIDE, ELM_TRANSIT_EFFECT_WIPE_DIR_UP);
+       elm_transit_duration_set(transit, 0.5);
+
+       //One more time wipe effect. In this case show up object and direction is right.
+       Elm_Transit* transit2 = elm_transit_add();
+       elm_transit_object_add(transit2, layout);
+       elm_transit_effect_wipe_add(transit2, ELM_TRANSIT_EFFECT_WIPE_TYPE_SHOW, ELM_TRANSIT_EFFECT_WIPE_DIR_RIGHT);
+       elm_transit_duration_set(transit2, 0.5);
+        elm_transit_del_cb_set(transit2, _transit_del_cb, NULL);
+
+       elm_transit_chain_transit_add(transit, transit2);
+       elm_transit_go(transit);
+}
+
+//ImageAnimation Effect Sample
+static void _imageanimation_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       const char *calendar_images[] = {
+               ICON_DIR"/animatedicon/calendar_00.png",
+               ICON_DIR"/animatedicon/calendar_01.png",
+               ICON_DIR"/animatedicon/calendar_02.png",
+               ICON_DIR"/animatedicon/calendar_03.png",
+               ICON_DIR"/animatedicon/calendar_04.png",
+               ICON_DIR"/animatedicon/calendar_05.png",
+               ICON_DIR"/animatedicon/calendar_06.png",
+               ICON_DIR"/animatedicon/calendar_07.png",
+               ICON_DIR"/animatedicon/calendar_08.png",
+               ICON_DIR"/animatedicon/calendar_09.png",
+               ICON_DIR"/animatedicon/calendar_10.png",
+               ICON_DIR"/animatedicon/calendar_11.png",
+               NULL
+       };
+
+       const char *message_images[] = {
+               ICON_DIR"/animatedicon/message_00.png",
+               ICON_DIR"/animatedicon/message_01.png",
+               ICON_DIR"/animatedicon/message_02.png",
+               ICON_DIR"/animatedicon/message_03.png",
+               ICON_DIR"/animatedicon/message_04.png",
+               ICON_DIR"/animatedicon/message_05.png",
+               ICON_DIR"/animatedicon/message_06.png",
+               ICON_DIR"/animatedicon/message_07.png",
+               ICON_DIR"/animatedicon/message_08.png",
+               ICON_DIR"/animatedicon/message_09.png",
+               ICON_DIR"/animatedicon/message_10.png",
+               ICON_DIR"/animatedicon/message_11.png",
+               ICON_DIR"/animatedicon/message_12.png",
+               ICON_DIR"/animatedicon/message_13.png",
+               ICON_DIR"/animatedicon/message_14.png",
+               ICON_DIR"/animatedicon/message_15.png",
+               ICON_DIR"/animatedicon/message_16.png",
+               ICON_DIR"/animatedicon/message_17.png",
+               NULL
+       };
+
+       Evas_Object *nf = (Evas_Object *) data;
+
+       //layout
+       Evas_Object *layout = elm_layout_add(nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "group_imageanimation");
+       elm_naviframe_item_push(nf, _("ImageAnimation"), NULL, NULL, layout, NULL);
+
+       Elm_Transit *transit;
+       Eina_List *images = NULL;
+       Eina_List *images2 = NULL;
+       Evas_Object *icon;
+       int i;
+
+       //Transit - Calendar
+       icon = elm_image_add(nf);
+       elm_object_part_content_set(layout, "calendar_icon", icon);
+
+       for(i = 0; i <12; ++i) {
+               images = eina_list_append(images, eina_stringshare_add(calendar_images[i]));
+       }
+
+       transit = elm_transit_add();
+       elm_transit_object_add(transit, icon);
+       elm_transit_effect_image_animation_add(transit, images);
+       elm_transit_auto_reverse_set(transit, EINA_TRUE);
+       elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
+       elm_transit_duration_set(transit, 1);
+       elm_transit_go(transit);
+
+       //Transit - Message
+       icon = elm_image_add(nf);
+       elm_object_part_content_set(layout, "message_icon", icon);
+
+       for(i = 0; i <18; ++i) {
+               images2 = eina_list_append(images2, eina_stringshare_add(message_images[i]));
+       }
+
+       transit = elm_transit_add();
+       elm_transit_object_add(transit, icon);
+       elm_transit_effect_image_animation_add(transit, images2);
+       elm_transit_auto_reverse_set(transit, EINA_TRUE);
+       elm_transit_objects_final_state_keep_set(transit, EINA_TRUE);
+       elm_transit_duration_set(transit, 1);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+       elm_transit_go(transit);
+}
+
+//Resizable Flip Effect Sample
+static void _resizable_flip_del(void *data, Elm_Transit *trans)
+{
+       //Delete button object.
+       evas_object_del(data);
+       set_rotation_mode(EINA_TRUE);
+}
+
+static void _resizable_flip_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object* layout = (Evas_Object *) data;
+       //Let's Flip with one button object and original naviframe object.
+       //Create a button object.
+       Evas_Object *btn = elm_button_add(layout);
+       elm_object_text_set(btn, "Front");
+
+       Evas_Coord w, h;
+       evas_object_geometry_get(layout, NULL, NULL, &w, &h);
+
+       //Compute front face object size and position for scalability.
+       evas_object_move(btn, (w - w * 0.25) / 2, (h - h * 0.25) / 2);
+       evas_object_resize(btn, w * 0.25, h * 0.25);
+       evas_object_show(btn);
+
+       Elm_Transit* transit = elm_transit_add();
+       elm_transit_smooth_set(transit, EINA_FALSE);
+       elm_transit_object_add(transit, btn);
+       elm_transit_object_add(transit, layout);
+       elm_transit_effect_resizable_flip_add(transit, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
+       elm_transit_del_cb_set(transit, _resizable_flip_del, btn);
+       elm_transit_duration_set(transit, 0.8);
+       elm_transit_go(transit);
+}
+
+//Custom Effect Sample
+static void _custom_context_free(Elm_Transit_Effect *effect, Elm_Transit *transit)
+{
+       struct custom_effect *custom_effect = effect;
+       free(custom_effect);
+}
+
+static void _custom_op(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
+{
+       if (!effect) return;
+
+       Evas_Coord w, h;
+       Evas_Object *obj;
+       const Eina_List *elist;
+
+       struct custom_effect *custom_effect = (struct custom_effect *) effect;
+       const Eina_List *objs = elm_transit_objects_get(transit);
+
+       if (progress < 0.5) {
+               h = custom_effect->from.h + (custom_effect->to.h * progress * 2);
+               w = custom_effect->from.w;
+       }else {
+               h = custom_effect->from.h + custom_effect->to.h;
+               w = custom_effect->from.w + (custom_effect->to.w * (progress - 0.5) * 2);
+       }
+
+       EINA_LIST_FOREACH(objs, elist, obj) {
+               evas_object_resize(obj, w, h);
+       }
+}
+
+static Elm_Transit_Effect * _custom_context_new(Evas_Coord from_w, Evas_Coord from_h, Evas_Coord to_w, Evas_Coord to_h)
+{
+       struct custom_effect *custom_effect = calloc( 1, sizeof( struct custom_effect ) );
+       if (!custom_effect) return NULL;
+
+       custom_effect->from.w = from_w;
+       custom_effect->from.h = from_h;
+       custom_effect->to.w = to_w - from_w;
+       custom_effect->to.h = to_h - from_h;
+       return custom_effect;
+}
+
+static void _custom_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       set_rotation_mode(EINA_FALSE);
+
+       Evas_Object *layout = (Evas_Object *) data;
+
+       Evas_Coord w, h;
+       evas_object_geometry_get(layout, NULL, NULL, &w, &h);
+       Elm_Transit_Effect *effect_context = _custom_context_new(w, h, w / 1.5, h / 1.5);
+
+       Elm_Transit *transit = elm_transit_add();
+       elm_transit_object_add(transit, layout);
+       elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE);
+       elm_transit_effect_add(transit, _custom_op, effect_context, _custom_context_free);
+       elm_transit_auto_reverse_set(transit, EINA_TRUE);
+       elm_transit_duration_set(transit, 1.2);
+       elm_transit_del_cb_set(transit, _transit_del_cb, NULL);
+       elm_transit_go(transit);
+}
+
+void effect_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+
+       struct appdata *ad = (struct appdata *) data;
+
+       //List
+       list = elm_list_add(ad->nf);
+       elm_list_mode_set(list, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(list, "selected", _list_click, NULL);
+
+       elm_list_item_append(list, "Blend", NULL, NULL, _blend_cb, ad->layout_main);
+       elm_list_item_append(list, "Color", NULL, NULL, _color_cb, ad->layout_main);
+       elm_list_item_append(list, "Fade", NULL, NULL, _fade_cb, ad->layout_main);
+       elm_list_item_append(list, "ImageAnimation", NULL, NULL, _imageanimation_cb, ad->nf);
+       elm_list_item_append(list, "Flip", NULL, NULL, _flip_cb, ad->layout_main);
+       elm_list_item_append(list, "Rotation", NULL, NULL, _rotation_cb, ad->layout_main);
+       elm_list_item_append(list, "ResizableFlip", NULL, NULL, _resizable_flip_cb, ad->layout_main);
+       elm_list_item_append(list, "Translation", NULL, NULL, _translation_cb, ad->layout_main);
+       elm_list_item_append(list, "Wipe", NULL, NULL, _wipe_cb, ad->layout_main);
+       elm_list_item_append(list, "Zoom", NULL, NULL, _zoom_cb, ad->layout_main);
+       elm_list_item_append(list, "Custom", NULL, NULL, _custom_cb, ad->layout_main);
+       elm_list_go(list);
+
+       elm_naviframe_item_push(ad->nf, _("Transit"), NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/util.c b/live.viewer/dbox.app/src/util.c
new file mode 100644 (file)
index 0000000..ecf0a01
--- /dev/null
@@ -0,0 +1,235 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <Evas.h>
+
+#include <dlog.h>
+#include <dynamicbox_errno.h>
+
+#include "debug.h"
+#include "util.h"
+
+static inline int get_pid(Ecore_X_Window win)
+{
+       int pid;
+       Ecore_X_Atom atom;
+       unsigned char *in_pid;
+       int num;
+
+       atom = ecore_x_atom_get("X_CLIENT_PID");
+       if (!atom) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ecore_x_window_prop_property_get(win, atom, ECORE_X_ATOM_CARDINAL,
+                               sizeof(int), &in_pid, &num) == EINA_FALSE) {
+               if (ecore_x_netwm_pid_get(win, &pid) == EINA_FALSE) {
+                       ErrPrint("Failed to get PID from a window 0x%X\n", win);
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+       } else if (in_pid) {
+               pid = *(int *)in_pid;
+               DbgFree(in_pid);
+       } else {
+               ErrPrint("Failed to get PID\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return pid;
+}
+
+static inline Ecore_X_Window get_user_created_window(Ecore_X_Window win)
+{
+       Ecore_X_Window user_win = 0;
+       Ecore_X_Atom atom;
+
+       atom = ecore_x_atom_get("_E_USER_CREATED_WINDOW");
+       if (!atom) {
+               DbgPrint("Failed to get user created atom\n");
+               return 0;
+       }
+
+       if (ecore_x_window_prop_xid_get(win, atom, ECORE_X_ATOM_WINDOW, &user_win, 1) == 1 && win) {
+               DbgPrint("User window: %x (for %x)\n", user_win, win);
+               return user_win;
+       }
+
+       return 0;
+}
+
+static inline int get_window_info(Ecore_X_Window parent, Ecore_X_Window user_win, int *pid, char **command)
+{
+       Evas_Coord x, y, w, h;
+       int argc;
+       char **argv;
+       Evas_Coord rx, ry, rw, rh;
+       Evas_Coord px, py, pw, ph;
+
+       ecore_x_window_geometry_get(0, &rx, &ry, &rw, &rh);
+       ecore_x_window_geometry_get(user_win, &x, &y, &w, &h);
+       ecore_x_window_geometry_get(parent, &px, &py, &pw, &ph);
+
+       if (x != rx || y != ry || w != rw || h != rh) {
+               DbgPrint("Size mismatch (with user,win)\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (x != px || y != py || w != pw || h != ph) {
+               DbgPrint("Size mismatch (with parent)\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       ecore_x_icccm_command_get(user_win, &argc, &argv);
+       DbgPrint("Get Command of %x\n", user_win);
+       if (argc > 0) {
+               int i;
+
+               *pid = get_pid(user_win);
+               if (command) {
+                       *command = argv[0];
+                       i = 1;
+               } else {
+                       i = 0;
+               }
+
+               while (i < argc) {
+                       DbgFree(argv[i]);
+                       i++;
+               }
+
+               DbgFree(argv);
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+}
+
+int util_win_list_get(int (*win_cb)(int pid, Ecore_X_Window win, const char *cmd, void *data), void *data)
+{
+       Ecore_X_Window root;
+       Ecore_X_Window ret;
+       struct stack_item *new_item;
+       struct stack_item *item;
+       Eina_List *win_stack;
+       int pid = -1;
+       int cnt = 0;
+       struct stack_item {
+               Ecore_X_Window *wins;
+               int nr_of_wins;
+               int i;
+       };
+
+       root = ecore_x_window_root_first_get();
+
+       new_item = malloc(sizeof(*new_item));
+       if (!new_item) {
+               ErrPrint("Error(%s)\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       new_item->nr_of_wins = 0;
+       new_item->wins =
+               ecore_x_window_children_get(root, &new_item->nr_of_wins);
+       new_item->i = new_item->nr_of_wins - 1;
+
+       win_stack = NULL;
+
+       if (new_item->wins) {
+               win_stack = eina_list_append(win_stack, new_item);
+       } else {
+               DbgFree(new_item);
+       }
+
+       while (pid < 0 && (item = eina_list_nth(win_stack, 0))) {
+               win_stack = eina_list_remove(win_stack, item);
+
+               if (!item->wins) {
+                       DbgFree(item);
+                       continue;
+               }
+
+               while (item->i >= 0) {
+                       ret = item->wins[item->i];
+
+                       /*
+                        * Now we don't need to care about visibility of window,
+                        * just check whether it is registered or not.
+                        * (ecore_x_window_visible_get(ret))
+                        */
+                       if (ecore_x_window_visible_get(ret) == EINA_TRUE) {
+                               Ecore_X_Window user_win;
+                               char *command = NULL;
+
+                               user_win = get_user_created_window(ret);
+                               if (user_win && get_window_info(ret, user_win, &pid, &command) == DBOX_STATUS_ERROR_NONE) {
+                                       int status;
+
+                                       cnt++;
+
+                                       status = win_cb(pid, user_win, command, data);
+                                       DbgFree(command);
+                                       if (status == EINA_FALSE) {
+                                               break;
+                                       }
+                               } else {
+                                       DbgPrint("Failed to get win info: %x\n", ret);
+                               }
+                       }
+
+                       new_item = malloc(sizeof(*new_item));
+                       if (!new_item) {
+                               ErrPrint("Error %s\n", strerror(errno));
+                               item->i++;
+                               continue;
+                       }
+
+                       new_item->nr_of_wins = 0;
+                       new_item->wins =
+                               ecore_x_window_children_get(ret,
+                                               &new_item->nr_of_wins);
+                       new_item->i = new_item->nr_of_wins - 1;
+                       if (new_item->wins) {
+                               win_stack =
+                                       eina_list_append(win_stack, new_item);
+                       } else {
+                               DbgFree(new_item);
+                       }
+
+                       item->i--;
+               }
+
+               DbgFree(item->wins);
+               DbgFree(item);
+       }
+
+       EINA_LIST_FREE(win_stack, item) {
+               DbgFree(item->wins);
+               DbgFree(item);
+       }
+
+       return cnt;
+}
+
+/*!
+ *
+ * usage)
+ * app_service(...)
+ * {
+ * if (power_key pressed) {
+ *     int pid;
+ *     pid = find_top_visible_window();
+ *     if (pid == getpid()) {
+ *             // if (first page) {
+ *             //     LCD_OFF
+ *             // } else {
+ *             //     SCROLL TO THE FIRST PAGE
+ *             // }
+ *     } else {
+ *             // elm_win_activate(my_win);
+ *     }
+ * }
+ *
+ */
diff --git a/live.viewer/dbox.app/src/vi.c b/live.viewer/dbox.app/src/vi.c
new file mode 100644 (file)
index 0000000..fb20a91
--- /dev/null
@@ -0,0 +1,1051 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "vi.h"
+
+/*********************************************************
+VI
+ ********************************************************/
+static void _interpolation_cb(void *data, Evas_Object * obj, void *event_info);
+static void _fade_in_out_cb(void *data, Evas_Object * obj, void *event_info);
+static void _zoom_in_out_cb(void *data, Evas_Object * obj, void *event_info);
+static void _rotate_cb(void *data, Evas_Object * obj, void *event_info);
+static void _wipe_cb(void *data, Evas_Object * obj, void *event_info);
+static void _flip_cb(void *data, Evas_Object * obj, void *event_info);
+static void _custom_cb(void *data, Evas_Object * obj, void *event_info);
+
+
+static struct _menu_item _menu_its[] = {
+       {"Interpolation", _interpolation_cb},
+       {"Fade", _fade_in_out_cb},
+       {"Zoom", _zoom_in_out_cb},
+       {"Rotate", _rotate_cb},
+       {"Wipe", _wipe_cb},
+       {"Flip", _flip_cb},
+       {"Custom", _custom_cb},
+       /* do not delete below */
+       {NULL, NULL}
+};
+
+static void _list_click(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL) {
+               fprintf(stderr, "list item is NULL\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object *_create_scroller(Evas_Object *parent)
+{
+       Evas_Object *scroller = elm_scroller_add(parent);
+
+       elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE);
+       elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO);
+       evas_object_show(scroller);
+
+       return scroller;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// INTERPOLATION
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _interpolation_cb1(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show1", "elm");
+}
+
+static void _interpolation_cb2(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show2", "elm");
+}
+
+static void _interpolation_cb3(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show3", "elm");
+}
+
+static void _interpolation_cb4(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show4", "elm");
+}
+
+static void _interpolation_cb5(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show5", "elm");
+}
+
+static void _interpolation_cb6(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show6", "elm");
+}
+
+static void _interpolation_cb7(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show7", "elm");
+}
+
+static void _interpolation_cb8(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show8", "elm");
+}
+
+static void _interpolation_cb9(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show9", "elm");
+}
+
+static void _interpolation_cb10(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show10", "elm");
+}
+
+static void _interpolation_start(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show1", "elm");
+       elm_layout_signal_emit(data, "elm,state,show2", "elm");
+       elm_layout_signal_emit(data, "elm,state,show3", "elm");
+       elm_layout_signal_emit(data, "elm,state,show4", "elm");
+       elm_layout_signal_emit(data, "elm,state,show5", "elm");
+       elm_layout_signal_emit(data, "elm,state,show6", "elm");
+       elm_layout_signal_emit(data, "elm,state,show7", "elm");
+       elm_layout_signal_emit(data, "elm,state,show8", "elm");
+       elm_layout_signal_emit(data, "elm,state,show9", "elm");
+       elm_layout_signal_emit(data, "elm,state,show10", "elm");
+}
+
+static void _interpolation_reset(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,reset", "elm");
+}
+
+static Evas_Object *_test_interpolation(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon, *btn;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/interpolation");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       /***** 1. sine i 33 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_i_33.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image1", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover1", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb1, layout);
+
+       /***** 2. sine o 33 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_o_33.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image2", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover2", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn2", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb2, layout);
+
+       /***** 3. sine io 33 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_33.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image3", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover3", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn3", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb3, layout);
+
+       /***** 4. sine io 50 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_50.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image4", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover4", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn4", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb4, layout);
+
+       /***** 5. sine io 60 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_60.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image5", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover5", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn5", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb5, layout);
+
+       /***** 6. sine io 70 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_70.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image6", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover6", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn6", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb6, layout);
+
+       /***** 7. sine io 80 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_80.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image7", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover7", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn7", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb7, layout);
+
+       /***** 8. sine io 90 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sine_io_90.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image8", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover8", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn8", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb8, layout);
+
+       /***** 9. quint io 50 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/quint_o_50.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image9", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover9", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn9", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb9, layout);
+
+       /***** 10. quint io 80 *****/
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/quint_o_80.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "image10", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_mover.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "mover10", icon);
+
+       btn = elm_button_add(layout);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_part_content_set(layout, "btn10", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_cb10, layout);
+
+       return layout;
+}
+
+static void _interpolation_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Interpolation"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_interpolation(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_start, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _interpolation_reset, layout_inner);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// FADE
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _fade_in_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,in", "elm");
+}
+
+static void _fade_out_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,out", "elm");
+}
+
+static void _fade_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,reset", "elm");
+}
+
+static Evas_Object *_test_fade(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/fade");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g5.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", icon);
+
+       return layout;
+}
+
+static void _fade_in_out_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon, *toolbar;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Fade In/Out"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_fade(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _fade_default_cb, layout_inner);
+
+       toolbar = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(toolbar, NULL, "in", _fade_in_cb, layout_inner);
+       elm_toolbar_item_append(toolbar, NULL, "out", _fade_out_cb, layout_inner);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// ZOOM
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _zoom_1(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,zoom_1", "elm");
+}
+
+static void _zoom_2(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,zoom_2", "elm");
+}
+
+static void _zoom_3(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,zoom_3", "elm");
+}
+
+static void _zoom_4(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,zoom_4", "elm");
+}
+
+static void _zoom_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,reset", "elm");
+}
+
+static Evas_Object *_test_zoom(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/zoom");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g4.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", icon);
+
+       return layout;
+}
+
+static void _zoom_in_out_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Zoom In/Out"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_zoom(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_default_cb, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "x1/4");
+       elm_object_part_content_set(layout_inner, "btn1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_1, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "x1/2");
+       elm_object_part_content_set(layout_inner, "btn2", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_2, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "x2");
+       elm_object_part_content_set(layout_inner, "btn3", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_3, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "x4");
+       elm_object_part_content_set(layout_inner, "btn4", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_4, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _zoom_default_cb, layout_inner);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// ROTATE
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _rotate_default(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,reset", "elm");
+}
+
+static void _rotate_90(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,90", "elm");
+}
+
+static void _rotate_180(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,180", "elm");
+}
+
+static void _rotate_270(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,270", "elm");
+}
+
+static void _rotate_360(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,360", "elm");
+}
+
+static Evas_Object *_test_rotate(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/rotate");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/icon3.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "content", icon);
+
+       return layout;
+}
+
+static void _rotate_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Rotate"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_rotate(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "90");
+       elm_object_part_content_set(layout_inner, "btn1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _rotate_90, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "180");
+       elm_object_part_content_set(layout_inner, "btn2", btn);
+       evas_object_smart_callback_add(btn, "clicked", _rotate_180, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "270");
+       elm_object_part_content_set(layout_inner, "btn3", btn);
+       evas_object_smart_callback_add(btn, "clicked", _rotate_270, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "360");
+       elm_object_part_content_set(layout_inner, "btn4", btn);
+       evas_object_smart_callback_add(btn, "clicked", _rotate_360, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _rotate_default, layout_inner);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// WIPE
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _wipe_start(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,show", "elm");
+}
+
+static void _wipe_reset(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,reset", "elm");
+}
+
+static Evas_Object *_test_wipe(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/wipe");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "bottom2top", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "top2bottom", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "left2right", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "right2left", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "leftbottom2righttop", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "rightbottom2lefttop", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "lefttop2rightbottom", icon);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/g2.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "righttop2leftbottom", icon);
+
+       return layout;
+}
+
+static void _wipe_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon, *toolbar;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Wipe"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_wipe(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/play.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_left_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _wipe_start, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _wipe_reset, layout_inner);
+
+       toolbar = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(toolbar, NULL, "start", _wipe_start, layout_inner);
+       elm_toolbar_item_append(toolbar, NULL, "reset", _wipe_reset, layout_inner);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// FLIP
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _flip_default(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,reset", "elm");
+}
+
+static void _flip_x(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,flipx", "elm");
+}
+
+static void _flip_y(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,state,flipy", "elm");
+}
+
+static Evas_Object *_test_flip(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/flip");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/00_flip.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "content", icon);
+
+       return layout;
+}
+
+static void _flip_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Flip"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_flip(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "Default");
+       elm_object_part_content_set(layout_inner, "btn1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _flip_default, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "X flip");
+       elm_object_part_content_set(layout_inner, "btn2", btn);
+       evas_object_smart_callback_add(btn, "clicked", _flip_x, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_text_set(btn, "Y flip");
+       elm_object_part_content_set(layout_inner, "btn3", btn);
+       evas_object_smart_callback_add(btn, "clicked", _flip_y, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _flip_default, layout_inner);
+
+}
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// CUSTOM
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+static void _custom_in_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,_zoom_in", "elm");
+       elm_layout_signal_emit(data, "elm,action,_fade_in", "elm");
+}
+
+static void _custom_out_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,_zoom_out", "elm");
+       elm_layout_signal_emit(data, "elm,action,_fade_out", "elm");
+}
+
+static void _custom_default_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       elm_layout_signal_emit(data, "elm,action,reset", "elm");
+}
+
+static Evas_Object *_test_custom(Evas_Object *parent)
+{
+       char buf[255];
+       Evas_Object *layout, *icon;
+
+       layout = elm_layout_add(parent);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "vi/custom");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       icon = elm_image_add(layout);
+       snprintf(buf, sizeof(buf), "%s/sky_01.jpg", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(layout, "elm.swallow.content", icon);
+
+       return layout;
+}
+
+static void _custom_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       char buf[255];
+       Evas_Object *scroller, *layout_inner, *btn, *icon, *toolbar;
+       Elm_Object_Item *navi_it;
+
+       struct appdata *ad = (struct appdata *)data;
+
+       if (ad == NULL) return;
+
+       scroller = _create_scroller(ad->nf);
+       navi_it = elm_naviframe_item_push(ad->nf, _("Fade, Zoom and Move"), NULL, NULL, scroller, NULL);
+
+       layout_inner = _test_custom(ad->nf);
+       elm_object_content_set(scroller, layout_inner);
+
+       btn = elm_button_add(ad->nf);
+       elm_object_style_set(btn, "naviframe/title_icon");
+       icon = elm_image_add(ad->nf);
+       snprintf(buf, sizeof(buf), "%s/reset.png", ICON_DIR);
+       elm_image_file_set(icon, buf, NULL);
+       evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       elm_object_part_content_set(btn, "icon", icon);
+       elm_object_item_part_content_set(navi_it, "title_right_btn", btn);
+       evas_object_smart_callback_add(btn, "clicked", _custom_default_cb, layout_inner);
+
+       toolbar = elm_toolbar_add(ad->nf);
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+       elm_toolbar_item_append(toolbar, NULL, "in", _custom_in_cb, layout_inner);
+       elm_toolbar_item_append(toolbar, NULL, "out", _custom_out_cb, layout_inner);
+       elm_object_item_part_content_set(navi_it, "toolbar", toolbar);
+}
+
+static Evas_Object *_create_list_winset(struct appdata *ad)
+{
+       Evas_Object *li;
+       struct _menu_item *menu_its;
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+       menu_its = _menu_its;
+       while (menu_its[idx].name != NULL) {
+               elm_list_item_append(li, menu_its[idx].name, NULL, NULL, menu_its[idx].func, ad);
+               ++idx;
+       }
+       elm_list_go(li);
+
+       return li;
+}
+
+void vi_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad;
+
+       Evas_Object *list;
+
+       ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("VI"), NULL, NULL, list, NULL);
+}
+
diff --git a/live.viewer/dbox.app/src/video.c b/live.viewer/dbox.app/src/video.c
new file mode 100644 (file)
index 0000000..b8f98e8
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "video.h"
+
+static struct _menu_item menu_its[] = {
+       { "Player", video_player_cb },
+       { "Gesture", video_gesture_cb },
+       /* do not delete below */
+       { NULL, NULL }
+};
+
+static void _list_click(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_list_selected_item_get(obj);
+
+       if (it == NULL)
+       {
+               fprintf((LOG_PRI(LOG_ERR) == LOG_ERR?stderr:stdout), "List item is NULL.\n");
+               return;
+       }
+
+       elm_list_item_selected_set(it, EINA_FALSE);
+}
+
+static Evas_Object* _create_list_winset(struct appdata* ad)
+{
+       Evas_Object *li;
+
+       if (ad == NULL) return NULL;
+
+       li = elm_list_add(ad->nf);
+       elm_list_mode_set(li, ELM_LIST_COMPRESS);
+       evas_object_smart_callback_add(li, "selected", _list_click, NULL);
+
+       int idx = 0;
+
+       while(menu_its[ idx ].name != NULL) {
+
+               elm_list_item_append(
+                               li,
+                               menu_its[ idx ].name,
+                               NULL,
+                               NULL,
+                               menu_its[ idx ].func,
+                               ad);
+               ++idx;
+       }
+
+       elm_list_go(li);
+
+       return li;
+}
+
+void video_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *list;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       list = _create_list_winset(ad);
+       elm_naviframe_item_push(ad->nf, _("Video"), NULL, NULL, list, NULL);
+}
diff --git a/live.viewer/dbox.app/src/video_gesture.c b/live.viewer/dbox.app/src/video_gesture.c
new file mode 100644 (file)
index 0000000..3fa5405
--- /dev/null
@@ -0,0 +1,238 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "video.h"
+#include "math.h"
+
+#define PI 3.1415926
+
+struct video_data {
+       struct appdata *ad;
+       Evas_Object *video;
+       Evas_Object *layout;
+       Evas_Object *gl;
+
+       Evas_Coord x, y, w, h;
+       Evas_Coord base_x, base_y;
+       double zoom;
+       double base_zoom;
+       double rotate;
+       double base_rotate;
+};
+
+static void
+_item_show(void *data, Evas_Object *obj, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+
+       evas_object_show(vd->video);
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       struct video_data *vd = (struct video_data *)data;
+       struct appdata *ad;
+
+       if (!vd) return EINA_TRUE;
+
+       ad = vd->ad;
+
+       evas_object_smart_callback_del(ad->nf, "transition,finished", _item_show);
+       evas_object_del(vd->video);
+       evas_object_del(vd->gl);
+       free(vd);
+
+       return EINA_TRUE;
+}
+
+static void
+_gesture_apply(struct video_data *vd)
+{
+       Evas_Map *map;
+
+       map = evas_map_new(4);
+       evas_map_point_coord_set(map, 0, vd->x, vd->y, 0);
+       evas_map_point_coord_set(map, 1, vd->x + vd->w, vd->y, 0);
+       evas_map_point_coord_set(map, 2, vd->x + vd->w, vd->y + vd->h, 0);
+       evas_map_point_coord_set(map, 3, vd->x, vd->y + vd->h, 0);
+       evas_map_point_image_uv_set(map, 0, 0, 0);
+       evas_map_point_image_uv_set(map, 1, vd->w, 0);
+       evas_map_point_image_uv_set(map, 2, vd->w, vd->h);
+       evas_map_point_image_uv_set(map, 3, 0, vd->h);
+
+       evas_map_util_rotate(map, vd->rotate, vd->x + vd->w / 2, vd->y + vd->h / 2);
+       evas_map_util_zoom(map, vd->zoom, vd->zoom, vd->x + vd->w / 2, vd->y + vd->h /2);
+
+       evas_object_map_enable_set(vd->video, EINA_TRUE);
+       evas_object_map_set(vd->video, map);
+
+       evas_map_free(map);
+}
+
+static Evas_Event_Flags
+_rotate_move(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       Elm_Gesture_Rotate_Info *info = (Elm_Gesture_Rotate_Info *)event_info;
+
+       vd->rotate = vd->base_rotate + info->angle - info->base_angle;
+       if (vd->rotate < 0) vd->rotate += 360.0;
+       else if (vd->rotate >= 360) vd->rotate -= 360.0;
+
+       _gesture_apply(vd);
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags
+_rotate_end(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       vd->base_rotate = vd->rotate;
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags
+_zoom_move(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       Elm_Gesture_Zoom_Info *info = (Elm_Gesture_Zoom_Info *)event_info;
+
+       vd->zoom = vd->base_zoom * info->zoom;
+       _gesture_apply(vd);
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags
+_zoom_end(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       vd->base_zoom = vd->zoom;
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags
+_momentum_move(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       Elm_Gesture_Momentum_Info *info = (Elm_Gesture_Momentum_Info *)event_info;
+
+       // if one finger used 
+       if (info->n == 1) {
+               int dx, dy;
+               double radian = PI * vd->rotate / 180;
+
+               dx = cos(radian) * (info->x2 - info->x1) - sin(radian) * (info->y2 - info->y1);
+               dy = sin(radian) * (info->x2 - info->x1) + cos(radian) * (info->y2 - info->y1);
+               vd->x = vd->base_x + dx;
+               vd->y = vd->base_y + dy;
+
+               _gesture_apply(vd);
+       }
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static Evas_Event_Flags
+_momentum_end(void *data, void *event_info)
+{
+       struct video_data *vd = (struct video_data *)data;
+       Elm_Gesture_Momentum_Info *info = (Elm_Gesture_Momentum_Info *)event_info;
+
+       // if one finger used 
+       if (info->n == 1) {
+               vd->base_x = vd->x;
+               vd->base_y = vd->y;
+       }
+
+       return EVAS_EVENT_FLAG_NONE;
+}
+
+static void
+_create_gesture_layer(struct video_data *vd)
+{
+       struct appdata *ad = vd->ad;
+
+       vd->gl = elm_gesture_layer_add(ad->nf);
+       elm_gesture_layer_attach(vd->gl, vd->video);
+
+       //elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_START, _rotate_start, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_MOVE, _rotate_move, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_END, _rotate_end, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ROTATE, ELM_GESTURE_STATE_ABORT, _rotate_end, vd);
+
+       //elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_START, _zoom_start, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_MOVE, _zoom_move, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_END, _zoom_end, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_ZOOM, ELM_GESTURE_STATE_ABORT, _zoom_end, vd);
+
+       //elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_MOMENTUM, ELM_GESTURE_STATE_START, _momentum_start, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_MOMENTUM, ELM_GESTURE_STATE_MOVE, _momentum_move, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_MOMENTUM, ELM_GESTURE_STATE_END, _momentum_end, vd);
+       elm_gesture_layer_cb_set(vd->gl, ELM_GESTURE_MOMENTUM, ELM_GESTURE_STATE_ABORT, _momentum_end, vd);
+}
+
+static void
+_create_video(struct video_data *vd)
+{
+       struct appdata *ad = vd->ad;
+       Evas_Coord nx, ny, nw, nh;
+
+       vd->video = elm_video_add(ad->nf);
+       elm_video_file_set(vd->video, "/opt/media/Videos/Helicopter.mp4");
+       elm_video_play(vd->video);
+
+       evas_object_geometry_get(ad->nf, &nx, &ny, &nw, &nh);
+       vd->x = vd->base_x = nx + nw / 4;
+       vd->y = vd->base_y = ny + nh / 4;
+       vd->w = nw / 2;
+       vd->h = nh / 2;
+       vd->zoom = vd->base_zoom = 1.0;
+       vd->rotate = vd->base_rotate = 0.0;
+
+       evas_object_resize(vd->video, vd->w, vd->h);
+       _gesture_apply(vd);
+}
+
+void video_gesture_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it;
+       struct video_data *vd;
+       struct appdata *ad = (struct appdata *)data;
+       if (ad == NULL) return;
+
+       vd = calloc(1, sizeof(struct video_data));
+       vd->ad = ad;
+
+       vd->layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(vd->layout, ELM_DEMO_EDJ, "elmdemo-test/player");
+       evas_object_size_hint_weight_set(vd->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_part_text_set(vd->layout, "info", "Use two fingers to zoom and rotate.<br>Use one finger to move.");
+
+       _create_video(vd);
+       _create_gesture_layer(vd);
+
+       it = elm_naviframe_item_push(ad->nf, _("Gesture"), NULL, NULL, vd->layout, NULL);
+       elm_naviframe_item_pop_cb_set(it, _pop_cb, vd);
+       evas_object_smart_callback_add(ad->nf, "transition,finished", _item_show, vd);
+}
diff --git a/live.viewer/dbox.app/src/video_player.c b/live.viewer/dbox.app/src/video_player.c
new file mode 100644 (file)
index 0000000..1d1a148
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_test.h"
+#include "elmdemo_util.h"
+#include "video.h"
+#include "Emotion.h"
+
+static void
+_info_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *video;
+       Evas_Object *emo;
+       char info[512] = {0,};
+        char buf[128];
+       const char *str;
+       double len;
+
+       video = evas_object_data_get(obj, "video");
+       emo = elm_video_emotion_get(video);
+
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_TITLE);
+       if (str) {
+               sprintf(buf, "Title: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_ARTIST);
+       if (str) {
+               sprintf(buf, "Artist: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_ALBUM);
+       if (str) {
+               sprintf(buf, "Album: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_YEAR);
+       if (str) {
+               sprintf(buf, "Year: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_GENRE);
+       if (str) {
+               sprintf(buf, "Genre: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_COMMENT);
+       if (str) {
+               sprintf(buf, "Genre: %s, ", str);
+               strcat(info, buf);
+       }
+       str = emotion_object_meta_info_get(emo, EMOTION_META_INFO_TRACK_DISC_ID);
+       if (str) {
+               sprintf(buf, "DISK ID: %s, ", str);
+               strcat(info, buf);
+       }
+       len = elm_video_play_length_get(video);
+       if (len > 0.0) {
+               int h, m, s;
+
+               h = len/3600;
+               m = len/60 - h*60;
+               s = len - h*3600 - m*60;
+               sprintf(buf, "Length: %d:%02d:%2d", h, m, s);
+               strcat(info, buf);
+       }
+
+       elm_object_part_text_set(data, "info", buf);
+}
+
+void video_player_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *layout, *video, *player;
+       struct appdata *ad = (struct appdata *) data;
+       if (ad == NULL) return;
+
+       layout = elm_layout_add(ad->nf);
+       elm_layout_file_set(layout, ELM_DEMO_EDJ, "elmdemo-test/player");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       video = elm_video_add(ad->nf);
+       elm_video_file_set(video, "/opt/media/Videos/Helicopter.mp4");
+       elm_video_play(video);
+       elm_object_part_content_set(layout, "video", video);
+
+       player = elm_player_add(ad->nf);
+       elm_object_content_set(player, video);
+       evas_object_data_set(player, "video", video);
+       evas_object_smart_callback_add(player, "info,clicked", _info_clicked, layout);
+       elm_object_part_content_set(layout, "player", player);
+
+
+       elm_naviframe_item_push(ad->nf, _("Player"), NULL, NULL, layout, NULL);
+}
diff --git a/live.viewer/dbox.app/src/wallpaper.c b/live.viewer/dbox.app/src/wallpaper.c
new file mode 100644 (file)
index 0000000..e013487
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ *  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 "elmdemo_util.h"
+#include "elmdemo_test.h"
+#include "wallpaper.h"
+
+#define IMAGE_MAX 28
+#define EDIT_MODE 1
+
+typedef struct _Testitem
+{
+       Elm_Object_Item *item;
+       const char *path;
+       const char *text;
+       int index;
+} Testitem;
+
+typedef struct View_Data
+{
+       struct appdata *ad;
+       int w;
+       int h;
+       char *type;
+} View_Data;
+
+static Eina_Bool longpressed = EINA_FALSE;
+static Evas_Object *gengrid, *box;
+static Elm_Gengrid_Item_Class *gic;
+
+
+static Evas_Object *
+grid_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       Testitem *ti = (Testitem *)data;
+       Elm_Object_Item *it = elm_gengrid_last_item_get(obj);
+       int last_idx = elm_gengrid_item_index_get(it);
+
+       if (ti->index == last_idx) {
+               if (!strcmp(part, "elm.swallow.end")) {
+                       Evas_Object *progressbar = elm_progressbar_add(obj);
+                       elm_object_style_set(progressbar, "process_medium");
+                       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+                       evas_object_show(progressbar);
+                       elm_progressbar_pulse(progressbar, EINA_TRUE);
+                       return progressbar;
+               } else return NULL;
+       } else if (!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, ti->path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               elm_image_preload_disabled_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       }
+
+       return NULL;
+}
+
+static void
+_item_selected(void *data, Evas_Object *obj, void *event_info)
+{
+       Testitem *ti = (Testitem *)data;
+       int theme_index;
+
+       elm_gengrid_item_selected_set(ti->item, EINA_FALSE);
+
+       if (longpressed) {
+               longpressed = EINA_FALSE;
+               return;
+       }
+
+       theme_index = ea_theme_suitable_theme_get_from_image(ti->path);
+
+       vconf_set_int(VCONFKEY_SETAPPL_CHANGE_UI_THEME_INT, theme_index);
+
+       Eina_Bool result = ea_theme_input_colors_set(theme_index);
+       if( result == EINA_TRUE)
+       {
+               ea_theme_system_colors_apply();
+               change_config_owner();
+       }
+}
+
+static void _realized(void *data, Evas_Object *obj, void *ei)
+{
+       printf("[%s][%d]\n", __func__, __LINE__);
+}
+
+static void
+_create_gengrid (void *data, char *type)
+{
+       struct View_Data *vd = data;
+       struct appdata *ad = vd->ad;
+       int i, n, w, h;
+       char buf[PATH_MAX];
+       static Testitem ti[IMAGE_MAX+1];
+       Evas_Object *win, *conform;
+
+       gengrid = elm_gengrid_add(ad->nf);
+       evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       double scale = elm_config_scale_get();
+       w = (int)(vd->w * scale); //177 as per UX ver 1.7.
+       h = (int)(vd->h * scale);
+       elm_gengrid_item_size_set(gengrid, w, h);
+       elm_gengrid_align_set(gengrid, 0.5, 0.5);
+       elm_gengrid_horizontal_set(gengrid, EINA_TRUE);
+       elm_gengrid_multi_select_set(gengrid, EINA_TRUE);
+       evas_object_smart_callback_add(gengrid, "realized", _realized, NULL);
+
+       gic = elm_gengrid_item_class_new();
+       gic->item_style=type;
+
+       gic->func.text_get = NULL;
+       gic->func.content_get = grid_content_get;
+       gic->func.state_get = NULL;
+       gic->func.del = NULL;
+
+       if ((!ad->win_main) || (!ad->conform))
+       {
+               printf("[%s]:We can't get conformant\n", __FUNCTION__);
+               return;
+       }
+       win     = ad->win_main;
+       conform = ad->conform;
+
+       elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW);
+       elm_win_indicator_opacity_set(win, ELM_WIN_INDICATOR_TRANSPARENT);
+
+       //if you change your layout to nooverlap_mode(to locate layout 0,0)
+       //you should emit signal and set data of "nooverlap"
+       elm_object_signal_emit(conform, "elm,state,indicator,overlap", "");
+       evas_object_data_set(conform, "overlap", (void *)EINA_TRUE);
+
+       for (i = 0; i <= IMAGE_MAX; i++) {
+               n = i;
+               snprintf(buf, sizeof(buf), "%s/wallpaper_image/%d_raw.jpg", ICON_DIR, i+1);
+               ti[n].index = n;
+               ti[n].path = eina_stringshare_add(buf);
+               //TODO: check the func data
+               ti[n].item = elm_gengrid_item_append(gengrid, gic, &(ti[n]), _item_selected, &(ti[n]));
+       }
+}
+
+static Eina_Bool
+_pop_cb(void *data, Elm_Object_Item *it)
+{
+       if (!data) return EINA_TRUE;
+       View_Data *vd = data;
+
+       elm_gengrid_clear(gengrid);
+       evas_object_del(gengrid);
+       gengrid = NULL;
+
+       if (vd) free(vd);
+
+       return EINA_TRUE;
+}
+
+void
+wallpaper_gengrid_create_cb(void *data, char *type)
+{
+       struct appdata *ad;
+       View_Data *vd;
+       Elm_Object_Item *navi_it;
+       Elm_Object_Item *it = NULL;
+
+       vd = (struct View_Data *) data;
+       if (vd == NULL) return;
+       ad = vd->ad;
+
+       _create_gengrid(vd, type);
+       it = elm_gengrid_last_item_get(gengrid);
+       elm_gengrid_item_show(it, ELM_GENGRID_ITEM_SCROLLTO_IN);
+
+       box = elm_box_add(ad->nf);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(box);
+       elm_box_pack_end(box, gengrid);
+       evas_object_show(gengrid);
+
+       navi_it = elm_naviframe_item_push (ad->nf, _("[Theme Change Wallpaper]") , NULL, NULL, box, NULL);
+       elm_naviframe_item_pop_cb_set(navi_it, _pop_cb, vd);
+}
+
+void
+wallpaper_theme_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       View_Data *vd;
+       vd = calloc(1, sizeof(View_Data));
+       vd->ad = (struct appdata *)data;
+       vd->w = 357;
+       vd->h = 267;
+       vd->type = "gallery";
+       wallpaper_gengrid_create_cb(vd, vd->type);
+}
diff --git a/live.viewer/dbox.app/src/window.c b/live.viewer/dbox.app/src/window.c
new file mode 100644 (file)
index 0000000..e1d633d
--- /dev/null
@@ -0,0 +1,291 @@
+#include <stdio.h>
+#include <unistd.h>
+
+#include <Evas.h>
+#include <Ecore_X.h>
+#include <Ecore.h>
+#include <X11/Xlib.h>
+
+#include <dynamicbox_errno.h>
+
+#include <dlog.h>
+#include "debug.h"
+#include "util.h"
+#include "window.h"
+
+static struct info {
+       Eina_List *win_list;
+       Ecore_Event_Handler *damage_handler;
+} s_info = {
+       .win_list = NULL,
+       .damage_handler = NULL,
+};
+
+struct window_data {
+       Evas_Object *image;
+       Ecore_X_Damage damage;
+       Ecore_X_Window pixmap;
+       struct touch_info {
+               int x;
+               int y;
+               int down;
+       } touch_info[2];
+       Eina_Bool is_selected;
+};
+
+static inline void clear_win_list(void)
+{
+       struct window_data *item;
+
+       EINA_LIST_FREE(s_info.win_list, item) {
+               ecore_x_damage_free(item->damage);
+               evas_object_del(item->image);
+               free(item);
+       }
+}
+
+static inline Eina_Bool damage_cb(void *data, int type, void *event)
+{
+       Ecore_X_Event_Damage *e = (Ecore_X_Event_Damage *)event;
+       struct window_data *item;
+       Eina_List *l;
+       int w;
+       int h;
+
+       EINA_LIST_FOREACH(s_info.win_list, l, item) {
+               if ((unsigned int)item->pixmap != (unsigned int)e->drawable) {
+                       continue;
+               }
+
+               ecore_x_window_size_get(item->pixmap, &w, &h);
+
+               evas_object_image_pixels_dirty_set(item->image, EINA_TRUE);
+               evas_object_image_data_update_add(item->image, 0, 0, w, h);
+               evas_object_show(item->image);
+               break;
+       }
+
+       ecore_x_damage_subtract(e->damage, None, None);
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+static void item_in_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct window_data *item = cbdata;
+       Evas_Event_Mouse_In *in = event_info;
+
+       if (item->is_selected) {
+               DbgPrint("%dx%d\n", in->canvas.x, in->canvas.y);
+               ecore_x_mouse_in_send(item->pixmap, in->canvas.x, in->canvas.y);
+               return;
+       }
+}
+
+static void item_out_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct window_data *item = cbdata;
+       Evas_Event_Mouse_Out *out = event_info;
+
+       if (item->is_selected) {
+               DbgPrint("%dx%d\n", out->canvas.x, out->canvas.y);
+               ecore_x_mouse_out_send(item->pixmap, out->canvas.x, out->canvas.y);
+               return;
+       }
+}
+
+static void item_down_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct window_data *item = cbdata;
+       Evas_Event_Mouse_Down *down = event_info;
+
+       item->touch_info[0].down = 1;
+
+       if (item->is_selected) {
+               DbgPrint("%dx%d\n", down->canvas.x, down->canvas.y);
+               ecore_x_mouse_down_send(item->pixmap, down->canvas.x, down->canvas.y, 1);
+               return;
+       }
+
+       item->touch_info[0].x = down->canvas.x;
+       item->touch_info[0].y = down->canvas.y;
+}
+
+static void item_move_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct window_data *item = cbdata;
+       Evas_Event_Mouse_Move *move = event_info;
+
+       if (item->is_selected) {
+               if (!item->touch_info[0].down) {
+                       return;
+               }
+
+               DbgPrint("%dx%d\n", move->cur.canvas.x, move->cur.canvas.y);
+               ecore_x_mouse_move_send(item->pixmap, move->cur.canvas.x, move->cur.canvas.y);
+               return;
+       }
+
+       if (abs(item->touch_info[0].x - move->cur.canvas.x) > 10) {
+               item->touch_info[0].down = 0;
+               return;
+       }
+
+       if (!item->touch_info[0].down) {
+               return;
+       }
+}
+
+static void item_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct window_data *item = cbdata;
+       Evas_Event_Mouse_Up *up = event_info;
+       Eina_List *l;
+       Eina_List *n;
+
+       if (item->is_selected) {
+               if (!item->touch_info[0].down) {
+                       return;
+               }
+
+               ecore_x_mouse_up_send(item->pixmap, up->canvas.x, up->canvas.y, 1);
+               DbgPrint("%dx%d\n", up->canvas.x, up->canvas.y);
+
+               item->touch_info[0].down = 0;
+               return;
+       }
+
+       if (abs(item->touch_info[0].x - up->canvas.x) > 10) {
+               item->touch_info[0].down = 0;
+               return;
+       }
+
+       if (!item->touch_info[0].down) {
+               return;
+       }
+
+       item->touch_info[0].down = 0;
+
+       evas_object_resize(item->image, 720, 1280);
+       evas_object_move(item->image, 0, 0);
+       item->is_selected = 1;
+
+       EINA_LIST_FOREACH_SAFE(s_info.win_list, l, n, item) {
+               if (item->is_selected) {
+                       continue;
+               }
+
+               s_info.win_list = eina_list_remove(s_info.win_list, item);
+               ecore_x_damage_free(item->damage);
+               evas_object_del(item->image);
+               free(item);
+       }
+}
+
+static inline int update_win_list_cb(int pid, Ecore_X_Window win, const char *cmd, void *data)
+{
+       struct window_data *item;
+       Evas_Native_Surface surface;
+       int w;
+       int h;
+       Evas *e;
+
+       item = calloc(1, sizeof(*item));
+       if (!item) {
+               return EINA_FALSE;
+       }
+
+       e = evas_object_evas_get(data);
+       item->image = evas_object_image_filled_add(e);
+       if (!item->image) {
+               free(item);
+               return EINA_FALSE;
+       }
+
+       ecore_x_window_size_get(win, &w, &h);
+
+       evas_object_image_size_set(item->image, w, h);
+       evas_object_image_fill_set(item->image, 0, 0, w, h);
+
+       surface.version = EVAS_NATIVE_SURFACE_VERSION;
+       surface.type = EVAS_NATIVE_SURFACE_X11;
+       surface.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
+       surface.data.x11.pixmap = (unsigned int)win;
+
+       evas_object_image_native_surface_set(item->image, &surface);
+       evas_object_image_pixels_dirty_set(item->image, EINA_TRUE);
+       evas_object_image_data_update_add(item->image, 0, 0, w, h);
+
+       h = eina_list_count(s_info.win_list);
+
+       w = h % 3;
+       h = h / 3;
+
+       // 720
+       // 30 200 30 200 30 200 30
+       // 1280
+       // 200 * 5
+       // top pad : 40 (280 - 40)
+       // 240 / 6 = 40
+       evas_object_resize(item->image, 200, 200);
+       w = (w * 200) + (w + 1) * 30;
+       h = 40 + (h * 200) + (h + 1) * 40;
+       evas_object_move(item->image, w, h);
+       evas_object_show(item->image);
+
+       item->damage = ecore_x_damage_new(win, ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES);
+       if (!item->damage) {
+               LOGE("Failed to create a damage handler\n");
+               evas_object_del(item->image);
+               free(item);
+               return EINA_FALSE;
+       }
+
+       item->pixmap = win;
+
+       evas_object_event_callback_add(item->image, EVAS_CALLBACK_MOUSE_IN, item_in_cb, item);
+       evas_object_event_callback_add(item->image, EVAS_CALLBACK_MOUSE_OUT, item_out_cb, item);
+       evas_object_event_callback_add(item->image, EVAS_CALLBACK_MOUSE_DOWN, item_down_cb, item);
+       evas_object_event_callback_add(item->image, EVAS_CALLBACK_MOUSE_MOVE, item_move_cb, item);
+       evas_object_event_callback_add(item->image, EVAS_CALLBACK_MOUSE_UP, item_up_cb, item);
+
+       s_info.win_list = eina_list_append(s_info.win_list, item);
+       return EINA_TRUE;
+}
+
+int window_list_create(Evas_Object *win)
+{
+       if (!s_info.damage_handler) {
+               s_info.damage_handler = ecore_event_handler_add(ECORE_X_EVENT_DAMAGE_NOTIFY, damage_cb, NULL);
+               if (!s_info.damage_handler) {
+                       ErrPrint("Failed to add damage notifier\n");
+               }
+       }
+
+       window_list_update(win);
+       return 0;
+}
+
+int window_list_update(Evas_Object *win)
+{
+       clear_win_list();
+
+       if (util_win_list_get(update_win_list_cb, win) <= 0) {
+               DbgPrint("Windows are not detected\n");
+       }
+
+       return 0;
+}
+
+int window_list_destroy(void)
+{
+       clear_win_list();
+
+       if (s_info.damage_handler) {
+               ecore_event_handler_del(s_info.damage_handler);
+               s_info.damage_handler = NULL;
+       }
+
+       return 0;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.calendar/CMakeLists.txt b/live.viewer/dbox.calendar/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e8f25bb
--- /dev/null
@@ -0,0 +1,34 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.calendar C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.calendar.icon REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+SET(EXTRA_CFLAGS "")
+FOREACH (flag ${com.samsung.calendar.icon_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "-DTIZEN_DEBUG_ENABLE -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_CALENDAR\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+       src/virtual_canvas.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.calendar.icon_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.calendar/data/CMakeLists.txt b/live.viewer/dbox.calendar/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..7d54966
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(w_calendar_icon.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/w_calendar_icon.edc w_calendar_icon.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/w_calendar_icon.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} w_calendar_icon.edj)
+INSTALL(FILES w_calendar_icon.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.calendar/data/w_calendar_icon.edc b/live.viewer/dbox.calendar/data/w_calendar_icon.edc
new file mode 100644 (file)
index 0000000..b13170c
--- /dev/null
@@ -0,0 +1,95 @@
+collections {
+       images {
+               image: "icon1x1.png" COMP;
+               image: "icon2x2.png" COMP;
+       }
+
+       group {
+               name: "1x1";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+
+                       part {
+                               name: "icon";
+                               type: IMAGE;
+                               description {
+                                       rel1 { relative: 0.0 0.0; to, "bg"; }
+                                       rel2 { relative: 1.0 1.0; to, "bg"; }
+                                       image { normal: "icon1x1.png"; }
+                               }
+                       }
+
+                       part {
+                               name: "text";
+                               type: TEXT;
+                               description {
+                                       rel1 { relative: 0.0 0.0; to, "icon"; }
+                                       rel2 { relative: 1.0 1.0; to, "icon"; }
+                                       text {
+                                               font: "Samsung Sans:style=Bold";
+                                               // text_class: "tizen";
+                                               align: 0.5 0.65;
+                                               size: 30;
+                                               text: "0";
+                                       }
+                               }
+                       }
+               }
+
+               programs {
+               }
+       }
+
+       group {
+               name: "2x2";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 0 0 0 0;
+                               }
+                       }
+
+                       part {
+                               name: "icon";
+                               type: IMAGE;
+                               description {
+                                       rel1 { relative: 0.0 0.0; to, "bg"; }
+                                       rel2 { relative: 1.0 1.0; to, "bg"; }
+                                       image { normal: "icon2x2.png"; }
+                               }
+                       }
+
+                       part {
+                               name: "text";
+                               type: TEXT;
+                               description {
+                                       rel1 { relative: 0.0 0.0; to, "icon"; }
+                                       rel2 { relative: 1.0 1.0; to, "icon"; }
+                                       text {
+                                               font: "Samsung Sans:style=Bold";
+                                               // text_class: "tizen";
+                                               align: 0.5 0.65;
+                                               size: 30;
+                                               text: "0";
+                                       }
+                               }
+                       }
+               }
+
+               programs {
+               }
+       }
+}
+/* End of a file */
diff --git a/live.viewer/dbox.calendar/include/main.h b/live.viewer/dbox.calendar/include/main.h
new file mode 100644 (file)
index 0000000..9a20660
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/**
+ * @note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/**
+ * @note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/**
+ * @brief
+ * @param[in] pkgname
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/**
+ * @brief
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] content
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] event "clicked" only
+ * @param[in] timestamp
+ * @param[in] x
+ * @param[in] y
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/**
+ * @brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * @param[in] filename
+ * @param[in] emission
+ * @param[in] source
+ * @param[in] event_info
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] width
+ * @param[in] height
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[out] w Width of the last content
+ * @param[out] h Height of the last content
+ * @param[out] priority Priority of the last content
+ * @param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * @param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] pinup
+ * @return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.calendar/include/virtual_canvas.h b/live.viewer/dbox.calendar/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.calendar/src/main.c b/live.viewer/dbox.calendar/src/main.c
new file mode 100644 (file)
index 0000000..1eb16b0
--- /dev/null
@@ -0,0 +1,537 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <time.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+#include <vconf.h>
+#include <aul.h>
+
+#include <unicode/unum.h>
+#include <unicode/ustring.h>
+
+#include "main.h"
+#include "virtual_canvas.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+
+int errno;
+
+struct info {
+       char *id;
+       int size_type;
+};
+
+char *get_count_str_from_icu(int count)
+{
+       char *locale_tmp = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       char locale[32] = { 0, };
+       char *p = NULL;
+
+       if (!locale_tmp) {
+               return NULL;
+       }
+
+       strcpy(locale, locale_tmp);
+
+       if(locale[0] != '\0') {
+               p = strstr(locale, ".UTF-8");
+               if(p) {
+                       *p = 0;
+               }
+       }
+
+       char *ret_str = NULL;
+       UErrorCode status = U_ZERO_ERROR;
+       uint32_t number = count;
+       UNumberFormat *num_fmt;
+       UChar result[20] = { 0, };
+       char res[20] = { 0, };
+       int32_t len = (int32_t) (sizeof(result) / sizeof((result)[0]));
+
+       num_fmt = unum_open(UNUM_DEFAULT, NULL, -1, locale, NULL, &status);
+       unum_format(num_fmt, number, result, len, NULL, &status);
+
+       u_austrcpy(res, result);
+
+       unum_close(num_fmt);
+
+       ret_str = strdup(res);
+       free(locale_tmp);
+       return ret_str;
+}
+
+static inline void create_default_output(const char *id, int size_type)
+{
+       Evas *e;
+       Evas_Object *layout;
+       int w, h;
+
+       (void)dynamicbox_service_get_size(size_type, &w, &h);
+
+       e = create_virtual_canvas(w, h);
+       if (!e) {
+               LOGE("Failed to create a virtual canvas\n");
+               return;
+       }
+
+       layout = edje_object_add(e);
+       if (!layout) {
+               destroy_virtual_canvas(e);
+               return;
+       }
+
+       if (size_type == DBOX_SIZE_TYPE_1x1) {
+               edje_object_file_set(layout, "/usr/apps/com.samsung.w-add-viewer/res/edje/w_calendar_icon.edj", "1x1");
+       } else {
+               edje_object_file_set(layout, "/usr/apps/com.samsung.w-add-viewer/res/edje/w_calendar_icon.edj", "2x2");
+       }
+
+       time_t t;
+       struct tm *tm;
+       int idx;
+       char *icu;
+
+       time(&t);
+       tm = localtime(&t);
+       if (tm) {
+               char buf[256] = { 0, };
+               strftime(buf, sizeof(buf) - 1, "%d", tm);
+               if (sscanf(buf, "%d", &idx) != 1) {
+                       idx = 1;
+               }
+       } else {
+               idx = 1;
+       }
+
+       icu = get_count_str_from_icu(idx);
+       LOGD("========> [%s] <======\n", icu);
+       if (icu) {
+               edje_object_part_text_set(layout, "text", icu);
+               free(icu);
+       }
+       evas_object_resize(layout, w, h);
+       evas_object_show(layout);
+
+       if (flush_to_file(e, id, w, h) == EXIT_FAILURE) {
+               LOGE("Failed to flush\n");
+       }
+
+       evas_object_del(layout);
+       destroy_virtual_canvas(e);
+}
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /**
+                * @NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /**
+        * @NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       free(item->id);
+       free(item);
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       create_default_output(id, item->size_type);
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID
+        */
+
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       create_default_output(id, type);
+       return DBOX_OUTPUT_UPDATED;
+}
+
+/**
+ * @brief
+ * The provider will call this to get the content size and its content_info.
+ * So this will be called after you update the contents.
+ * Also the provider will tries to get "title" for reading it if the Accessibility(TTS) is enabled.
+ * You have to summarize your content to A string and copy it to the "title".
+ * It has to be stored in the heap (allocated memory will be released by provider automatically).
+ */
+PUBLIC int dynamicbox_get_info(const char *id, int *w, int *h, double *priority, char **content, char **title)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       dynamicbox_service_get_size(item->size_type, w, h);
+
+       /**
+        * This content string will be used again after reboot the device,
+        * this will be passed to your dynamicbox_create function again via the second parameter "content".
+        */
+       *content = NULL;
+
+       /**
+        * This is not used. just set it to 1.0 for default
+        */
+       *priority = 1.0;
+
+       *title = strdup("Accessibility will read this title string");
+       if (!*title) {
+               LOGE("Heap: %s\n", strerror(errno));
+       }
+
+       return 0;
+}
+
+PUBLIC int dynamicbox_get_alt_info(const char *id, char **icon, char **name)
+{
+       /**
+        * @brief
+        * Set the absolute path of alternative icon file
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *icon = NULL;
+
+       /**
+        * @brief
+        * Set the name of alternative one
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *name = NULL;
+
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+       int ret = DBOX_DONE;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+               create_default_output(id, item->size_type);
+               ret = DBOX_OUTPUT_UPDATED;
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+               create_default_output(id, item->size_type);
+               ret = DBOX_OUTPUT_UPDATED;
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+               create_default_output(id, item->size_type);
+               ret = DBOX_OUTPUT_UPDATED;
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+               create_default_output(id, item->size_type);
+               ret = DBOX_OUTPUT_UPDATED;
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed\n");
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                          even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return ret;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.calendar/src/virtual_canvas.c b/live.viewer/dbox.calendar/src/virtual_canvas.c
new file mode 100644 (file)
index 0000000..05c3619
--- /dev/null
@@ -0,0 +1,123 @@
+#include <Elementary.h>
+#include <Ecore_Evas.h>
+#include <Ecore_X.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+
+#include "virtual_canvas.h"
+#include "main.h"
+
+
+
+#define QUALITY_N_COMPRESS "quality=100 compress=1"
+
+
+
+Evas *create_virtual_canvas(int w, int h)
+{
+        Ecore_Evas *internal_ee;
+        Evas *internal_e;
+
+        // Create virtual canvas
+        internal_ee = ecore_evas_buffer_new(w, h);
+        if (!internal_ee) {
+                LOGD("Failed to create a new canvas buffer\n");
+                return NULL;
+        }
+
+       ecore_evas_alpha_set(internal_ee, EINA_TRUE);
+       ecore_evas_manual_render_set(internal_ee, EINA_TRUE);
+
+        // Get the "Evas" object from a virtual canvas
+        internal_e = ecore_evas_get(internal_ee);
+        if (!internal_e) {
+                ecore_evas_free(internal_ee);
+                LOGD("Faield to get Evas object\n");
+                return NULL;
+        }
+
+        return internal_e;
+}
+
+
+
+int flush_to_file(Evas *e, const char *filename, int w, int h)
+{
+        void *data;
+        Ecore_Evas *internal_ee;
+
+        internal_ee = ecore_evas_ecore_evas_get(e);
+        if (!internal_ee) {
+               LOGD("Failed to get ecore evas\n");
+                return EXIT_FAILURE;
+        }
+
+       ecore_evas_manual_render(internal_ee);
+
+        // Get a pointer of a buffer of the virtual canvas
+        data = (void*)ecore_evas_buffer_pixels_get(internal_ee);
+        if (!data) {
+               LOGD("Failed to get pixel data\n");
+                return EXIT_FAILURE;
+        }
+
+       return flush_data_to_file(e, data, filename, w, h);
+}
+
+
+
+int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h)
+{
+        Evas_Object *output;
+
+        output = evas_object_image_add(e);
+        if (!output) {
+               LOGD("Failed to create an image object\n");
+                return EXIT_FAILURE;
+        }
+
+        evas_object_image_data_set(output, NULL);
+        evas_object_image_colorspace_set(output, EVAS_COLORSPACE_ARGB8888);
+        evas_object_image_alpha_set(output, EINA_TRUE);
+        evas_object_image_size_set(output, w, h);
+        evas_object_image_smooth_scale_set(output, EINA_TRUE);
+        evas_object_image_data_set(output, data);
+       evas_object_image_fill_set(output, 0, 0, w, h);
+        evas_object_image_data_update_add(output, 0, 0, w, h);
+
+        if (evas_object_image_save(output, filename, NULL, QUALITY_N_COMPRESS) == EINA_FALSE) {
+                evas_object_del(output);
+               LOGD("Faield to save a captured image (%s)\n", filename);
+                return EXIT_FAILURE;
+        }
+
+       evas_object_del(output);
+
+        if (access(filename, F_OK) != 0) {
+               LOGD("File %s is not found\n", filename);
+                return EXIT_FAILURE;
+        }
+
+       return EXIT_SUCCESS;
+}
+
+
+
+int destroy_virtual_canvas(Evas *e)
+{
+        Ecore_Evas *ee;
+
+        ee = ecore_evas_ecore_evas_get(e);
+        if (!ee) {
+               LOGD("Failed to ecore evas object\n");
+                return EXIT_FAILURE;
+        }
+
+        ecore_evas_free(ee);
+        return EXIT_SUCCESS;
+}
+
+
+
+// End of a file
diff --git a/live.viewer/dbox.image/CMakeLists.txt b/live.viewer/dbox.image/CMakeLists.txt
new file mode 100644 (file)
index 0000000..9836598
--- /dev/null
@@ -0,0 +1,33 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.img C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(img_pkgs REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${img_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_IMAGE\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+       src/virtual_canvas.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${img_pkgs_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.image/data/CMakeLists.txt b/live.viewer/dbox.image/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f58cd5b
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(tile.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc tile.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} tile.edj)
+INSTALL(FILES tile.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.image/data/hello.edc b/live.viewer/dbox.image/data/hello.edc
new file mode 100644 (file)
index 0000000..8cb844e
--- /dev/null
@@ -0,0 +1,42 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "pkgname";
+                               type: TEXT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 0.5; }
+                                       color: 255 255 255 255;
+                                       text {
+                                               text: "com.samsung.w-add-viewer.dbox.img";
+                                               size: 20;
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "content";
+                               type: TEXT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.5; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                                       text {
+                                               text: "content";
+                                               size: 20;
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.image/include/main.h b/live.viewer/dbox.image/include/main.h
new file mode 100644 (file)
index 0000000..dfe0126
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/*!
+ * \note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/*!
+ * \note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/*!
+ * \brief
+ * \param[in] pkgname
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/*!
+ * \brief
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] content
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] event "clicked" only
+ * \param[in] timestamp
+ * \param[in] x
+ * \param[in] y
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/*!
+ * \brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * \param[in] filename
+ * \param[in] emission
+ * \param[in] source
+ * \param[in] event_info
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] width
+ * \param[in] height
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[out] w Width of the last content
+ * \param[out] h Height of the last content
+ * \param[out] priority Priority of the last content
+ * \param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * \param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] pinup
+ * \return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.image/include/virtual_canvas.h b/live.viewer/dbox.image/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.image/src/main.c b/live.viewer/dbox.image/src/main.c
new file mode 100644 (file)
index 0000000..d9a306a
--- /dev/null
@@ -0,0 +1,672 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+
+#include "main.h"
+#include "virtual_canvas.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+};
+
+static inline void create_default_output(const char *id, int w, int h)
+{
+       Evas *e;
+       Evas_Object *box;
+       int r, g, b, a;
+
+       e = create_virtual_canvas(w, h);
+       if (!e) {
+               LOGE("Failed to create a virtual canvas\n");
+               return;
+       }
+
+       box = evas_object_rectangle_add(e);
+       if (!box) {
+               LOGE("Failed to create a rectangle object\n");
+               destroy_virtual_canvas(e);
+               return;
+       }
+
+       evas_object_resize(box, w, h);
+
+       a = 100 + (rand() % 156);
+       do {
+               r = rand() % 256;
+               g = rand() % 256;
+               b = rand() % 256;
+       } while (r == 0 && g == 0 && b == 0);
+
+       evas_object_color_set(box, r, g, b, a);
+       evas_object_show(box);
+
+       if (flush_to_file(e, id, w, h) == EXIT_FAILURE) {
+               LOGE("Failed to flush\n");
+       }
+
+       evas_object_del(box);
+       destroy_virtual_canvas(e);
+}
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+       int w;
+       int h;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       dynamicbox_service_get_size(DBOX_SIZE_TYPE_1x1, &w, &h);
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       create_default_output(id, w, h);
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_OUTPUT_UPDATED;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /**
+                * @NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /**
+        * @NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       free(item->content);
+       free(item->id);
+       free(item);
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+       Evas *e;
+       Evas_Object *box;
+       Evas_Object *edje;
+       int w;
+       int h;
+       Eina_Bool ret;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+
+       e = create_virtual_canvas(w, h);
+       if (!e) {
+               LOGE("Failed to create a virtual canvas\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       box = evas_object_rectangle_add(e);
+       if (!box) {
+               LOGE("Failed to create a rectangle object\n");
+               destroy_virtual_canvas(e);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       evas_object_resize(box, w, h);
+       evas_object_color_set(box, rand() % 255, rand() % 255, rand() % 255, 255);
+       evas_object_show(box);
+
+       edje = edje_object_add(e);
+       if (!edje) {
+               evas_object_del(box);
+               destroy_virtual_canvas(e);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       LOGD("Load file %s\n", RESDIR"/edje/tile.edj");
+       ret = edje_object_file_set(edje, RESDIR"/edje/tile.edj", "default");
+       if (ret == EINA_FALSE) {
+               evas_object_del(edje);
+               evas_object_del(box);
+               destroy_virtual_canvas(e);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       edje_object_part_text_set(edje, "pkgname", "com.samsung.w-add-viewer.dbox");
+       edje_object_part_text_set(edje, "content", id);
+       evas_object_resize(edje, w, h);
+       evas_object_show(edje);
+
+       if (flush_to_file(e, id, w, h) == EXIT_FAILURE) {
+               LOGE("Failed to flush\n");
+       }
+
+       evas_object_del(edje);
+       evas_object_del(box);
+       destroy_virtual_canvas(e);
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       pid_t pid;
+       pid = aul_launch_app("com.samsung.calculator", NULL);
+       LOGD("Launch [com.samsung.setting]: %d\n", pid);
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * GBAR is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * GBAR is closed
+                */
+       } else if (!strcmp(emission, "mouse,clicked,1") && !strcmp(source, "bg"))  {
+               dynamicbox_desc_h desc_handle;
+
+               desc_handle = dynamicbox_desc_open(id, 1);
+               if (!desc_handle) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_TEXT, "name", buffer, NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_IMAGE, "image", RESDIR"/image/unknown.png", NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_SIGNAL, "image", "show", NULL);
+               dynamicbox_desc_close(desc_handle);
+       } else if (!strcmp(emission, "done") && !strcmp(source, "show"))  {
+               dynamicbox_desc_h desc_handle;
+
+               desc_handle = dynamicbox_desc_open(id, 1);
+               if (!desc_handle) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_TEXT, "name", buffer, NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_SIGNAL, "image", "hide", NULL);
+               dynamicbox_desc_close(desc_handle);
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+       int w;
+       int h;
+       int ret;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID_PARAMETER
+        */
+
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+/**
+ * @brief
+ * The provider will call this to get the content size and its content_info.
+ * So this will be called after you update the contents.
+ * Also the provider will tries to get "title" for reading it if the Accessibility(TTS) is enabled.
+ * You have to summarize your content to A string and copy it to the "title".
+ * It has to be stored in the heap (allocated memory will be released by provider automatically).
+ */
+PUBLIC int dynamicbox_get_info(const char *id, int *w, int *h, double *priority, char **content, char **title)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       dynamicbox_service_get_size(item->size_type, w, h);
+
+       /**
+        * This content string will be used again after reboot the device,
+        * this will be passed to your dynamicbox_create function again via the second parameter "content".
+        */
+       *content = NULL;
+
+       /**
+        * This is not used. just set it to 1.0 for default
+        */
+       *priority = 1.0;
+
+       *title = strdup("Accessibility will read this title string");
+       if (!*title) {
+               LOGE("Heap: %s\n", strerror(errno));
+       }
+
+       return 0;
+}
+
+PUBLIC int dynamicbox_get_alt_info(const char *id, char **icon, char **name)
+{
+       /**
+        * @brief
+        * Set the absolute path of alternative icon file
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *icon = NULL;
+
+       /**
+        * @brief
+        * Set the name of alternative one
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *name = NULL;
+
+       return 0;
+}
+
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed\n");
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                     even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.image/src/virtual_canvas.c b/live.viewer/dbox.image/src/virtual_canvas.c
new file mode 100644 (file)
index 0000000..05c3619
--- /dev/null
@@ -0,0 +1,123 @@
+#include <Elementary.h>
+#include <Ecore_Evas.h>
+#include <Ecore_X.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+
+#include "virtual_canvas.h"
+#include "main.h"
+
+
+
+#define QUALITY_N_COMPRESS "quality=100 compress=1"
+
+
+
+Evas *create_virtual_canvas(int w, int h)
+{
+        Ecore_Evas *internal_ee;
+        Evas *internal_e;
+
+        // Create virtual canvas
+        internal_ee = ecore_evas_buffer_new(w, h);
+        if (!internal_ee) {
+                LOGD("Failed to create a new canvas buffer\n");
+                return NULL;
+        }
+
+       ecore_evas_alpha_set(internal_ee, EINA_TRUE);
+       ecore_evas_manual_render_set(internal_ee, EINA_TRUE);
+
+        // Get the "Evas" object from a virtual canvas
+        internal_e = ecore_evas_get(internal_ee);
+        if (!internal_e) {
+                ecore_evas_free(internal_ee);
+                LOGD("Faield to get Evas object\n");
+                return NULL;
+        }
+
+        return internal_e;
+}
+
+
+
+int flush_to_file(Evas *e, const char *filename, int w, int h)
+{
+        void *data;
+        Ecore_Evas *internal_ee;
+
+        internal_ee = ecore_evas_ecore_evas_get(e);
+        if (!internal_ee) {
+               LOGD("Failed to get ecore evas\n");
+                return EXIT_FAILURE;
+        }
+
+       ecore_evas_manual_render(internal_ee);
+
+        // Get a pointer of a buffer of the virtual canvas
+        data = (void*)ecore_evas_buffer_pixels_get(internal_ee);
+        if (!data) {
+               LOGD("Failed to get pixel data\n");
+                return EXIT_FAILURE;
+        }
+
+       return flush_data_to_file(e, data, filename, w, h);
+}
+
+
+
+int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h)
+{
+        Evas_Object *output;
+
+        output = evas_object_image_add(e);
+        if (!output) {
+               LOGD("Failed to create an image object\n");
+                return EXIT_FAILURE;
+        }
+
+        evas_object_image_data_set(output, NULL);
+        evas_object_image_colorspace_set(output, EVAS_COLORSPACE_ARGB8888);
+        evas_object_image_alpha_set(output, EINA_TRUE);
+        evas_object_image_size_set(output, w, h);
+        evas_object_image_smooth_scale_set(output, EINA_TRUE);
+        evas_object_image_data_set(output, data);
+       evas_object_image_fill_set(output, 0, 0, w, h);
+        evas_object_image_data_update_add(output, 0, 0, w, h);
+
+        if (evas_object_image_save(output, filename, NULL, QUALITY_N_COMPRESS) == EINA_FALSE) {
+                evas_object_del(output);
+               LOGD("Faield to save a captured image (%s)\n", filename);
+                return EXIT_FAILURE;
+        }
+
+       evas_object_del(output);
+
+        if (access(filename, F_OK) != 0) {
+               LOGD("File %s is not found\n", filename);
+                return EXIT_FAILURE;
+        }
+
+       return EXIT_SUCCESS;
+}
+
+
+
+int destroy_virtual_canvas(Evas *e)
+{
+        Ecore_Evas *ee;
+
+        ee = ecore_evas_ecore_evas_get(e);
+        if (!ee) {
+               LOGD("Failed to ecore evas object\n");
+                return EXIT_FAILURE;
+        }
+
+        ecore_evas_free(ee);
+        return EXIT_SUCCESS;
+}
+
+
+
+// End of a file
diff --git a/live.viewer/dbox.scroller/CMakeLists.txt b/live.viewer/dbox.scroller/CMakeLists.txt
new file mode 100644 (file)
index 0000000..15998ad
--- /dev/null
@@ -0,0 +1,33 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.scroller C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.scroller REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.scroller_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_SCROLLER\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+       src/genlist06.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.scroller_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.scroller/data/CMakeLists.txt b/live.viewer/dbox.scroller/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..32f3544
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(scroller.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/scroller.edc scroller.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/scroller.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} scroller.edj)
+INSTALL(FILES scroller.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.scroller/data/scroller.edc b/live.viewer/dbox.scroller/data/scroller.edc
new file mode 100644 (file)
index 0000000..b0b6e15
--- /dev/null
@@ -0,0 +1,49 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                               }
+                       }
+
+                       part {
+                               name: "actor";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                               description {
+                                       state: "rotate" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.scroller/include/genlist06.h b/live.viewer/dbox.scroller/include/genlist06.h
new file mode 100644 (file)
index 0000000..00553a8
--- /dev/null
@@ -0,0 +1 @@
+extern void genlist_test(Evas_Object *win);
diff --git a/live.viewer/dbox.scroller/include/main.h b/live.viewer/dbox.scroller/include/main.h
new file mode 100644 (file)
index 0000000..dfe0126
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/*!
+ * \note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/*!
+ * \note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/*!
+ * \brief
+ * \param[in] pkgname
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/*!
+ * \brief
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] content
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] event "clicked" only
+ * \param[in] timestamp
+ * \param[in] x
+ * \param[in] y
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/*!
+ * \brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * \param[in] filename
+ * \param[in] emission
+ * \param[in] source
+ * \param[in] event_info
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] width
+ * \param[in] height
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[out] w Width of the last content
+ * \param[out] h Height of the last content
+ * \param[out] priority Priority of the last content
+ * \param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * \param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] pinup
+ * \return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.scroller/include/virtual_canvas.h b/live.viewer/dbox.scroller/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.scroller/src/genlist06.c b/live.viewer/dbox.scroller/src/genlist06.c
new file mode 100644 (file)
index 0000000..922738e
--- /dev/null
@@ -0,0 +1,405 @@
+#include <Elementary.h>
+
+#define N_ITEMS 6
+
+typedef struct _Node_Data {
+     Eina_List *children;
+     int value;
+     int level;
+     Eina_Bool favorite;
+} Node_Data;
+
+static Elm_Genlist_Item_Class *_itc = NULL;
+static Elm_Genlist_Item_Class *_itp = NULL;
+static Elm_Genlist_Item_Class *_itfav = NULL;
+static int nitems = 0;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj, const char *part)
+{
+   char buf[256];
+   Node_Data *d = data;
+
+   if (!strcmp(part, "elm.text"))
+     snprintf(buf, sizeof(buf), "Item # %i (level %i)", d->value, d->level);
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_item_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "file");
+
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   return ic;
+}
+
+static void
+_item_sel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("sel item data [%p] on genlist obj [%p], item pointer [%p]\n",
+         data, obj, event_info);
+}
+
+static char *
+_parent_label_get(void *data, Evas_Object *obj, const char *part)
+{
+   char buf[256];
+   Node_Data *d = data;
+
+   snprintf(buf, sizeof(buf), "Group %d (%d items)", d->value / 7,
+           eina_list_count(d->children));
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_parent_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "folder");
+
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   return ic;
+}
+
+static char *
+_favorite_label_get(void *data, Evas_Object *obj, const char *part)
+{
+   char buf[256];
+   Node_Data *d = data;
+
+   if (!strcmp(part, "elm.text"))
+     snprintf(buf, sizeof(buf), "Favorite # %i", d->value);
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_favorite_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "apps");
+
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   return ic;
+}
+
+static void
+_append_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Evas_Object *list = data;
+   Elm_Object_Item *glit, *parent = NULL;
+   Node_Data *pdata, *d = malloc(sizeof(*d));
+
+   d->children = NULL;
+   d->value = nitems++;
+   d->favorite = EINA_FALSE;
+
+   glit = elm_genlist_selected_item_get(list);
+   if (glit)
+     parent = elm_genlist_item_parent_get(glit);
+
+   if (parent)
+     {
+        d->level = elm_genlist_item_expanded_depth_get(parent) + 1;
+        pdata = elm_object_item_data_get(parent);
+        pdata->children = eina_list_append(pdata->children, d);
+     }
+   else
+     d->level = 0;
+
+   elm_genlist_item_append(list, _itc,
+                           d, parent,
+                           ELM_GENLIST_ITEM_NONE,
+                           _item_sel_cb, NULL);
+}
+
+static void
+_favorite_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Evas_Object *list = data;
+   Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
+
+   if (!glit) return;
+
+   Node_Data *d = elm_object_item_data_get(glit);
+   d->favorite = !d->favorite;
+   if (d->favorite)
+     elm_genlist_item_item_class_update(glit, _itfav);
+   else
+     {
+        if (d->children)
+          elm_genlist_item_item_class_update(glit, _itp);
+        else
+          elm_genlist_item_item_class_update(glit, _itc);
+     }
+
+   elm_genlist_item_update(glit);
+}
+
+static void
+_add_child_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Evas_Object *list = data;
+   Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
+   Elm_Object_Item *glit_prev, *glit_parent;
+
+   if (!glit) return;
+
+   Node_Data *d = elm_object_item_data_get(glit);
+   glit_prev = elm_genlist_item_prev_get(glit);
+   glit_parent = elm_genlist_item_parent_get(glit);
+
+   Eina_Bool change_item = !d->children;
+
+   // creating new item data
+   Node_Data *ndata = malloc(sizeof(*ndata));
+   ndata->value = nitems++;
+   ndata->children = NULL;
+   ndata->favorite = EINA_FALSE;
+   ndata->level = elm_genlist_item_expanded_depth_get(glit) + 1;
+   d->children = eina_list_append(d->children, ndata);
+
+   // Changing leaf item to parent item
+   if (change_item)
+     {
+        elm_object_item_del(glit);
+
+        if (glit_prev != glit_parent)
+          glit = elm_genlist_item_insert_after(list, _itp, d, glit_parent,
+                                               glit_prev,
+                                               ELM_GENLIST_ITEM_TREE,
+                                               _item_sel_cb, NULL);
+        else
+          glit = elm_genlist_item_prepend(list, _itp, d, glit_parent,
+                                          ELM_GENLIST_ITEM_TREE,
+                                          _item_sel_cb, NULL);
+        elm_genlist_item_expanded_set(glit, EINA_FALSE);
+        elm_genlist_item_selected_set(glit, EINA_TRUE);
+     }
+   else if (elm_genlist_item_expanded_get(glit))
+     {
+        elm_genlist_item_append(list, _itc, ndata, glit,
+                                ELM_GENLIST_ITEM_NONE, _item_sel_cb, NULL);
+     }
+
+   elm_genlist_item_update(glit);
+
+}
+
+static void
+_clear_list(Node_Data *d)
+{
+   Node_Data *tmp;
+
+   EINA_LIST_FREE(d->children, tmp)
+      _clear_list(tmp);
+   free(d);
+}
+
+static void
+_del_item_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Evas_Object *list = data;
+   Elm_Object_Item *glit = elm_genlist_selected_item_get(list);
+   Elm_Object_Item *glit_parent = NULL;
+
+   if (!glit) return;
+
+   Node_Data *pdata, *d = elm_object_item_data_get(glit);
+   glit_parent = elm_genlist_item_parent_get(glit);
+   elm_genlist_item_subitems_clear(glit);
+   elm_object_item_del(glit);
+
+   _clear_list(d);
+
+   if (!glit_parent) return;
+
+   pdata = elm_object_item_data_get(glit_parent);
+   pdata->children = eina_list_remove(pdata->children, d);
+   elm_genlist_item_update(glit_parent);
+}
+
+static void
+_expand_request_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Elm_Object_Item *glit = event_info;
+   printf("expand request on item: %p\n", event_info);
+   elm_genlist_item_expanded_set(glit, EINA_TRUE);
+}
+
+static void
+_contract_request_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Elm_Object_Item *glit = event_info;
+   printf("contract request on item: %p\n", event_info);
+   elm_genlist_item_expanded_set(glit, EINA_FALSE);
+}
+
+static void
+_expanded_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Eina_List *l;
+   Elm_Object_Item *glit = event_info;
+   Node_Data *it_data, *d = elm_object_item_data_get(glit);
+   Evas_Object *list = elm_object_item_widget_get(glit);
+
+   Elm_Genlist_Item_Class *ic;
+
+   EINA_LIST_FOREACH(d->children, l, it_data)
+     {
+        Elm_Object_Item *nitem;
+        Elm_Genlist_Item_Type type = ELM_GENLIST_ITEM_NONE;
+        printf("expanding item: #%d from parent #%d\n", it_data->value, d->value);
+        if (it_data->favorite)
+          ic = _itfav;
+        else if (it_data->children)
+          {
+             ic = _itp;
+             type = ELM_GENLIST_ITEM_TREE;
+          }
+        else
+          ic = _itc;
+
+        nitem = elm_genlist_item_append(list, ic, it_data, glit,
+                                        type, _item_sel_cb, NULL);
+        elm_genlist_item_expanded_set(nitem, EINA_FALSE);
+     }
+}
+
+static void
+_contracted_cb(void *data, Evas_Object *o, void *event_info)
+{
+   Elm_Object_Item *glit = event_info;
+   elm_genlist_item_subitems_clear(glit);
+}
+
+static Evas_Object *
+_button_add(Evas_Object *list, Evas_Object *box, const char *label, Evas_Smart_Cb cb)
+{
+   Evas_Object *bt;
+
+   bt = elm_button_add(elm_object_parent_widget_get(list));
+   elm_object_text_set(bt, label);
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+
+   if (cb)
+     evas_object_smart_callback_add(bt, "clicked", cb, list);
+
+   return bt;
+}
+
+void genlist_test(Evas_Object *win)
+{
+   Evas_Object *bg, *box, *fbox;
+   Evas_Object *list;
+   int i;
+
+   bg = elm_bg_add(win);
+   elm_bg_color_set(bg, 255,255 ,255);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   if (!_itc)
+     {
+        _itc = elm_genlist_item_class_new();
+        _itc->item_style = "default";
+        _itc->func.text_get = _item_label_get;
+        _itc->func.content_get = _item_content_get;
+        _itc->func.state_get = NULL;
+        _itc->func.del = NULL;
+     }
+
+   if (!_itp)
+     {
+        _itp = elm_genlist_item_class_new();
+        _itp->item_style = "default";
+        _itp->func.text_get = _parent_label_get;
+        _itp->func.content_get = _parent_content_get;
+        _itp->func.state_get = NULL;
+        _itp->func.del = NULL;
+     }
+
+   if (!_itfav)
+     {
+        _itfav = elm_genlist_item_class_new();
+        _itfav->item_style = "default";
+        _itfav->func.text_get = _favorite_label_get;
+        _itfav->func.content_get = _favorite_content_get;
+        _itfav->func.state_get = NULL;
+        _itfav->func.del = NULL;
+     }
+
+   list = elm_genlist_add(win);
+
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, list);
+   evas_object_show(list);
+
+   fbox = elm_box_add(win);
+   elm_box_layout_set(fbox, evas_object_box_layout_flow_horizontal,
+                      NULL, NULL);
+   evas_object_size_hint_weight_set(fbox, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(fbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, fbox);
+   evas_object_show(fbox);
+
+   _button_add(list, fbox, "append item", _append_cb);
+   _button_add(list, fbox, "favorite", _favorite_cb);
+   _button_add(list, fbox, "add child", _add_child_cb);
+   _button_add(list, fbox, "del item", _del_item_cb);
+
+   Elm_Object_Item *gli = NULL, *glg = NULL;
+   Node_Data *data;
+   Node_Data *pdata = NULL; // data for the parent of the group
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+        data = malloc(sizeof(*data)); // data for this item
+        data->children = NULL;
+        data->value = i;
+        data->favorite = EINA_FALSE;
+        nitems++;
+        printf("creating item: #%d\n", data->value);
+        if (i % 3 == 0)
+          {
+             glg = gli = elm_genlist_item_append(list, _itp, data, NULL,
+                                                 ELM_GENLIST_ITEM_TREE,
+                                                 _item_sel_cb, NULL);
+             elm_genlist_item_expanded_set(glg, EINA_TRUE);
+             pdata = data;
+             data->level = 0;
+          }
+        else
+          {
+             gli = elm_genlist_item_append(list, _itc, data, glg,
+                                           ELM_GENLIST_ITEM_NONE,
+                                           _item_sel_cb, NULL);
+             pdata->children = eina_list_append(pdata->children, data);
+             data->level = 1;
+          }
+     }
+
+   evas_object_smart_callback_add(list, "expand,request", _expand_request_cb, list);
+   evas_object_smart_callback_add(list, "contract,request", _contract_request_cb, list);
+   evas_object_smart_callback_add(list, "expanded", _expanded_cb, list);
+   evas_object_smart_callback_add(list, "contracted", _contracted_cb, list);
+}
diff --git a/live.viewer/dbox.scroller/src/main.c b/live.viewer/dbox.scroller/src/main.c
new file mode 100644 (file)
index 0000000..e94b63d
--- /dev/null
@@ -0,0 +1,528 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+
+#include "main.h"
+#include "genlist06.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+       Evas_Object *dbox_win;
+       enum edge {
+               LEFT,
+               RIGHT,
+               MIDDLE,
+       } edge;
+       struct down {
+               int x;
+               int y;
+               int pressed;
+       } down;
+};
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /*!
+                * \NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /* NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       if (item->dbox_win) {
+               evas_object_del(item->dbox_win);
+       }
+       free(item->content);
+       free(item->id);
+       free(item);
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_STATUS_ERROR_DISABLED;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * GBAR is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /*
+                * @NOTE
+                * GBAR is closed
+                */
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+       int w;
+       int h;
+       int ret;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID_PARAMETER
+        */
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (item->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               Evas_Object *dbox_parent;
+
+               dbox_parent = dynamicbox_get_evas_object(id, 0);
+               if (!dbox_parent) {
+                       LOGE("Failed to get an evas object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               item->dbox_win = elm_win_add(dbox_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+               evas_object_del(dbox_parent);
+               if (!item->dbox_win) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_resize(item->dbox_win, w, h);
+               evas_object_show(item->dbox_win);
+
+               genlist_test(item->dbox_win);
+
+               LOGD("Window & Genlist is created\n");
+       } else {
+               evas_object_resize(item->dbox_win, w, h);
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+               // dynamicbox_release_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed [%s]\n", id);
+               // dynamicbox_freeze_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                     even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.simple/CMakeLists.txt b/live.viewer/dbox.simple/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ab03668
--- /dev/null
@@ -0,0 +1,32 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.simple C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.dbox.simple REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.dbox.simple_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_SIMPLE\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.dbox.simple_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.simple/data/CMakeLists.txt b/live.viewer/dbox.simple/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a04c20f
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(simple.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/simple.edc simple.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/simple.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} simple.edj)
+INSTALL(FILES simple.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.simple/data/simple.edc b/live.viewer/dbox.simple/data/simple.edc
new file mode 100644 (file)
index 0000000..98b96f5
--- /dev/null
@@ -0,0 +1,97 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "simple";
+               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;
+                               }
+                       }
+
+                       part {
+                               name: "actor";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                               }
+                       }
+
+                       part {
+                               name: "text";
+                               type: TEXT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       text {
+                                               font: "Samsung Sans"; //:style=Bold
+                                               // text_class: "tizen";
+                                               align: 0.5 0.5;
+                                               size: 26;
+                                               fit: 1 1;
+                                               text: "HELLO";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "actor1";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.2 0.2; }
+                                       rel2 { relative: 0.4 0.4; }
+                                       image { normal: "unknown.png"; }
+                               }
+                       }
+
+                       part {
+                               name: "actor2";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.5 0.5; }
+                                       rel2 { relative: 0.7 0.7; }
+                                       image { normal: "unknown.png"; }
+                               }
+                               description {
+                                       state: "hello,1" 0.0;
+                                       rel1 { relative: 0.4 0.4; }
+                                       rel2 { relative: 0.8 0.8; }
+                                       image { normal: "unknown.png"; }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                               name: "hello";
+                               source: "actor2";
+                               signal: "mouse,down,1";
+                               action: STATE_SET "hello,1" 0.0;
+                               target: "actor2";
+                       }
+                       program {
+                               name: "hello2";
+                               source: "actor2";
+                               signal: "mouse,up,1";
+                               action: STATE_SET "default" 0.0;
+                               target: "actor2";
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.simple/include/main.h b/live.viewer/dbox.simple/include/main.h
new file mode 100644 (file)
index 0000000..deed06d
--- /dev/null
@@ -0,0 +1,163 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/**
+ * @note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+
+/**
+ * @note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/**
+ * @brief
+ * @param[in] pkgname
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/**
+ * @brief
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] content
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] event "clicked" only
+ * @param[in] timestamp
+ * @param[in] x
+ * @param[in] y
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/**
+ * @brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * @param[in] filename
+ * @param[in] emission
+ * \param[in] source
+ * @param[in] event_info
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] width
+ * @param[in] height
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[out] w Width of the last content
+ * @param[out] h Height of the last content
+ * @param[out] priority Priority of the last content
+ * @param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * @param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] pinup
+ * @return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.simple/include/virtual_canvas.h b/live.viewer/dbox.simple/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.simple/src/main.c b/live.viewer/dbox.simple/src/main.c
new file mode 100644 (file)
index 0000000..594c949
--- /dev/null
@@ -0,0 +1,520 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+
+#include "main.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+       Evas_Object *lb_win;
+};
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /*!
+        * \TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /*!
+        * \TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /*!
+        * \NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       s_list = eina_list_append(s_list, info);
+
+       /*!
+        * \NOTE
+        * You can returns OUTPUT_UPDATED or NEED_TO_SCHEDULE or DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /*!
+        * \NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /*!
+                * \NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /* NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       if (item->lb_win) {
+               evas_object_del(item->lb_win);
+               item->lb_win = NULL;
+       }
+       free(item->content);
+       free(item->id);
+       free(item);
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_STATUS_ERROR_DISABLED;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /*
+                * @NOTE
+                * Glance Bar is closed
+                */
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+       int w;
+       int h;
+       int ret;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID_PARAMETER
+        */
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (item->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               Evas_Object *lb_parent;
+               Evas_Object *rect;
+
+               lb_parent = dynamicbox_get_evas_object(id, 0);
+               if (!lb_parent) {
+                       LOGE("Failed to get an evas object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               item->lb_win = elm_win_add(lb_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+               evas_object_del(lb_parent);
+               if (!item->lb_win) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_resize(item->lb_win, w, h);
+               evas_object_show(item->lb_win);
+
+               rect = elm_layout_add(item->lb_win);
+               elm_layout_file_set(rect, RESDIR"/edje/simple.edj", "simple");
+               evas_object_resize(rect, 360, 480);
+               evas_object_show(rect);
+       } else {
+               evas_object_resize(item->lb_win, w, h);
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+               // dynamicbox_release_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed [%s]\n", id);
+               // dynamicbox_freeze_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your livebox
+        * But it can be interrupted by other events.
+        * Then you livebox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                          even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.text/CMakeLists.txt b/live.viewer/dbox.text/CMakeLists.txt
new file mode 100644 (file)
index 0000000..99f5594
--- /dev/null
@@ -0,0 +1,32 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.text C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.text REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.text_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_TEXT\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.text_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+#ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.text/data/CMakeLists.txt b/live.viewer/dbox.text/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f58cd5b
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(tile.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc tile.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} tile.edj)
+INSTALL(FILES tile.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.text/data/hello.edc b/live.viewer/dbox.text/data/hello.edc
new file mode 100644 (file)
index 0000000..c5bb724
--- /dev/null
@@ -0,0 +1,40 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "pkgname";
+                               type: TEXT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 0.5; }
+                                       color: 255 255 255 255;
+                                       text {
+                                               text: "com.samsung.w-add-viewer.dbox.img";
+                                       }
+                               }
+                       }
+
+                       part {
+                               name: "content";
+                               type: TEXT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.5; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                                       text {
+                                               text: "content";
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.text/include/main.h b/live.viewer/dbox.text/include/main.h
new file mode 100644 (file)
index 0000000..dfe0126
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/*!
+ * \note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/*!
+ * \note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/*!
+ * \brief
+ * \param[in] pkgname
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/*!
+ * \brief
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] content
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] event "clicked" only
+ * \param[in] timestamp
+ * \param[in] x
+ * \param[in] y
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/*!
+ * \brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * \param[in] filename
+ * \param[in] emission
+ * \param[in] source
+ * \param[in] event_info
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] width
+ * \param[in] height
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[out] w Width of the last content
+ * \param[out] h Height of the last content
+ * \param[out] priority Priority of the last content
+ * \param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * \param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] pinup
+ * \return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.text/src/main.c b/live.viewer/dbox.text/src/main.c
new file mode 100644 (file)
index 0000000..aadf7f8
--- /dev/null
@@ -0,0 +1,580 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_script.h>
+
+#include <aul.h>
+
+#include "main.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+};
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /*!
+        * \TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /*!
+        * \TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /*!
+        * \NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       s_list = eina_list_append(s_list, info);
+
+       /*!
+        * \NOTE
+        * You can returns OUTPUT_UPDATED or NEED_TO_SCHEDULE or DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /*!
+        * \NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /*!
+                * \NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /* NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       free(item->content);
+       free(item->id);
+       free(item);
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+       int w;
+       int h;
+       struct dynamicbox_desc *desc_handle;
+       char buffer[256];
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+
+       desc_handle = dynamicbox_desc_open(id, 0);
+       if (!desc_handle) {
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       snprintf(buffer, sizeof(buffer) - 1, "name%.3d(%dx%d)", rand() % 1000, w, h);
+
+       dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_TEXT, "name", buffer, NULL);
+       dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_IMAGE, "picture", RESDIR"/image/unknown.png", NULL);
+       dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_SCRIPT, "animation,01", "play", NULL);
+       dynamicbox_desc_close(desc_handle);
+
+       /*!
+        * \NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       // NOTE:
+       //   You will get this if a user press your image.
+       //   You can get the absolute coordinate using the given x,y.
+       //
+       //   event: clicked
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       pid_t pid;
+       pid = aul_launch_app("com.samsung.calculator", NULL);
+       LOGD("Launch [com.samsung.setting]: %d\n", pid);
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /*!
+                * \NOTE
+                * PD is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /*
+                * \NOTE
+                * PD is closed
+                */
+       } else if (!strcmp(emission, "mouse,clicked,1") && !strcmp(source, "bg"))  {
+               struct dynamicbox_desc *desc_handle;
+
+               desc_handle = dynamicbox_desc_open(id, 1);
+               if (!desc_handle) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_TEXT, "name", buffer, NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_IMAGE, "image", RESDIR"/image/unknown.png", NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_SIGNAL, "image", "show", NULL);
+               dynamicbox_desc_close(desc_handle);
+       } else if (!strcmp(emission, "done") && !strcmp(source, "show"))  {
+               struct dynamicbox_desc *desc_handle;
+
+               desc_handle = dynamicbox_desc_open(id, 1);
+               if (!desc_handle) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_TEXT, "name", buffer, NULL);
+               dynamicbox_desc_add_block(desc_handle, NULL, DBOX_DESC_TYPE_SIGNAL, "image", "hide", NULL);
+               dynamicbox_desc_close(desc_handle);
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID
+        */
+
+       item->size_type = type;
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+/*!
+ * \brief
+ * The provider will call this to get the content size and its content_info.
+ * So this will be called after you update the contents.
+ * Also the provider will tries to get "title" for reading it if the Accessibility(TTS) is enabled.
+ * You have to summarize your content to A string and copy it to the "title".
+ * It has to be stored in the heap (allocated memory will be released by provider automatically).
+ */
+PUBLIC int dynamicbox_get_info(const char *id, int *w, int *h, double *priority, char **content, char **title)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       dynamicbox_service_get_size(item->size_type, w, h);
+
+       /*!
+        * This content string will be used again after reboot the device,
+        * this will be passed to your dynamicbox_create function again via the second parameter "content".
+        */
+       *content = NULL;
+
+       /*!
+        * This is not used. just set it to 1.0 for default
+        */
+       *priority = 1.0;
+
+       *title = strdup("Accessibility will read this title string");
+       if (!*title) {
+               LOGE("Heap: %s\n", strerror(errno));
+       }
+
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_get_alt_info(const char *id, char **icon, char **name)
+{
+       /*!
+        * \brief
+        * Set the absolute path of alternative icon file
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *icon = NULL;
+
+       /*!
+        * \brief
+        * Set the name of alternative one
+        * The string must be allocated in the heap.
+        * And it will be released by provider.
+        */
+       *name = NULL;
+
+       return DBOX_DONE;
+}
+
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed\n");
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        *
+        * FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                     even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.transit/CMakeLists.txt b/live.viewer/dbox.transit/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1c42c1d
--- /dev/null
@@ -0,0 +1,33 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.transit C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.transit REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.transit_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_TRANSIT\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+       src/transit04.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.transit_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.transit/data/CMakeLists.txt b/live.viewer/dbox.transit/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a1cc99e
--- /dev/null
@@ -0,0 +1,12 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(transit.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/transit.edc transit.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/transit.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} transit.edj)
+INSTALL(FILES transit.edj DESTINATION ${EDJDIR})
+INSTALL(FILES icon_07.png DESTINATION ${RESDIR}/images)
+INSTALL(FILES icon_08.png DESTINATION ${RESDIR}/images)
diff --git a/live.viewer/dbox.transit/data/transit.edc b/live.viewer/dbox.transit/data/transit.edc
new file mode 100644 (file)
index 0000000..b0b6e15
--- /dev/null
@@ -0,0 +1,49 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                               }
+                       }
+
+                       part {
+                               name: "actor";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                               description {
+                                       state: "rotate" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.transit/include/main.h b/live.viewer/dbox.transit/include/main.h
new file mode 100644 (file)
index 0000000..dfe0126
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/*!
+ * \note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/*!
+ * \note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/*!
+ * \brief
+ * \param[in] pkgname
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/*!
+ * \brief
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] content
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] event "clicked" only
+ * \param[in] timestamp
+ * \param[in] x
+ * \param[in] y
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/*!
+ * \brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * \param[in] filename
+ * \param[in] emission
+ * \param[in] source
+ * \param[in] event_info
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] width
+ * \param[in] height
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[out] w Width of the last content
+ * \param[out] h Height of the last content
+ * \param[out] priority Priority of the last content
+ * \param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * \param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \param[in] pinup
+ * \return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/*!
+ * \brief
+ * \param[in] filename
+ * \return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.transit/include/transit04.h b/live.viewer/dbox.transit/include/transit04.h
new file mode 100644 (file)
index 0000000..300b66a
--- /dev/null
@@ -0,0 +1 @@
+extern void transit04_test(Evas_Object *win);
diff --git a/live.viewer/dbox.transit/include/virtual_canvas.h b/live.viewer/dbox.transit/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.transit/src/main.c b/live.viewer/dbox.transit/src/main.c
new file mode 100644 (file)
index 0000000..e10e310
--- /dev/null
@@ -0,0 +1,530 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+
+#include "main.h"
+#include "transit04.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+       Evas_Object *dbox_win;
+       enum edge {
+               LEFT,
+               RIGHT,
+               MIDDLE,
+       } edge;
+       struct down {
+               int x;
+               int y;
+               int pressed;
+       } down;
+};
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /**
+                * @NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /**
+        * @NOTE:
+        *       You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       if (item->dbox_win) {
+               evas_object_del(item->dbox_win);
+       }
+       free(item->content);
+       free(item->id);
+       free(item);
+       return 0;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_STATUS_ERROR_DISABLED;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is closed
+                */
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+       int w;
+       int h;
+       int ret;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID_PARAMETER
+        */
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (item->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               Evas_Object *lb_parent;
+
+               lb_parent = dynamicbox_get_evas_object(id, 0);
+               if (!lb_parent) {
+                       LOGE("Failed to get an evas object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               item->dbox_win = elm_win_add(lb_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+               evas_object_del(lb_parent);
+               if (!item->dbox_win) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_resize(item->dbox_win, w, h);
+               evas_object_show(item->dbox_win);
+
+               transit04_test(item->dbox_win);
+
+               LOGD("Window & Genlist is created\n");
+       } else {
+               evas_object_resize(item->dbox_win, w, h);
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+               // dynamicbox_release_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed [%s]\n", id);
+               // dynamicbox_freeze_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                          even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.transit/src/transit04.c b/live.viewer/dbox.transit/src/transit04.c
new file mode 100644 (file)
index 0000000..cdab2e9
--- /dev/null
@@ -0,0 +1,146 @@
+#include <Elementary.h>
+
+static void
+_transit_flip(Elm_Transit *trans)
+{
+   elm_transit_effect_flip_add(trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_X, EINA_TRUE);
+}
+
+static void
+_transit_blend(Elm_Transit *trans)
+{
+   elm_transit_effect_blend_add(trans);
+}
+
+static void
+_transit_fade(Elm_Transit *trans)
+{
+   elm_transit_effect_fade_add(trans);
+}
+
+static void
+_transit_resizable_flip(Elm_Transit *trans)
+{
+   elm_transit_effect_resizable_flip_add(
+      trans, ELM_TRANSIT_EFFECT_FLIP_AXIS_Y, EINA_TRUE);
+}
+
+static struct {
+     const char *label;
+     void (*transition_add_cb)(Elm_Transit *);
+     Eina_Bool checked;
+} _transitions[] = {
+       { "Flip", _transit_flip, EINA_FALSE },
+       { "Blend", _transit_blend, EINA_FALSE },
+       { "Fade", _transit_fade, EINA_FALSE },
+       { "Resizable Flip", _transit_resizable_flip, EINA_FALSE },
+       { NULL, NULL, EINA_FALSE }
+};
+
+static void
+_checkbox_transition_add(Evas_Object *box, const char *label, Eina_Bool *checked)
+{
+   Evas_Object *check = elm_check_add(elm_object_parent_widget_get(box));
+   evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(check, 0.0, 0.0);
+   elm_object_text_set(check, label);
+   elm_check_state_pointer_set(check, checked);
+   elm_box_pack_end(box, check);
+   evas_object_show(check);
+}
+
+static void
+_transit_start(void *data, Evas_Object *o, void *event_info)
+{
+   Elm_Transit *trans = NULL;
+   Eina_List *objs = data, *l;
+   Evas_Object *obj;
+   int i;
+
+   trans = elm_transit_add();
+   EINA_LIST_FOREACH(objs, l, obj) {
+      elm_transit_object_add(trans, obj);
+   }
+
+   // FIXME: Should check if there's another transit going before starting a new
+   // one
+
+   for (i = 0; _transitions[i].label; i++)
+     {
+       if (_transitions[i].checked)
+         _transitions[i].transition_add_cb(trans);
+     }
+
+   elm_transit_duration_set(trans, 2.0);
+   elm_transit_go(trans);
+}
+
+int transit04_test(Evas_Object *win)
+{
+   Evas_Object *bg, *obj, *icon, *box, *vbox, *btn, *dummy;
+   Eina_List *objs = NULL;
+   int i;
+
+   /* add a scalable white background to this window */
+   bg = elm_bg_add(win);
+   elm_bg_color_set(bg, 255, 255, 255);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   dummy = elm_bg_add(win);
+   evas_object_size_hint_weight_set(dummy, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(box, dummy);
+   evas_object_show(dummy);
+
+   /* add an object that we are going to play with */
+   obj = elm_button_add(win);
+   elm_object_text_set(obj, "Transformed object!");
+   icon = elm_icon_add(win);
+   elm_image_file_set(icon, RESDIR"/images/icon_07.png", NULL);
+   elm_object_part_content_set(obj, "icon", icon);
+   evas_object_move(obj, 160, 60);
+   evas_object_resize(obj, 250, 100);
+   evas_object_show(obj);
+
+   objs = eina_list_append(objs, obj);
+
+   /* add another object that we are going to play with */
+   obj = elm_button_add(win);
+   elm_object_text_set(obj, "Another object!");
+   icon = elm_icon_add(win);
+   elm_image_file_set(icon, RESDIR"/images/icon_08.png", NULL);
+   elm_object_part_content_set(obj, "icon", icon);
+   evas_object_move(obj, 160, 60);
+   evas_object_resize(obj, 250, 100);
+
+   objs = eina_list_append(objs, obj);
+
+   btn = elm_button_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_text_set(btn, "Transit!");
+   elm_box_pack_end(box, btn);
+   evas_object_show(btn);
+
+   evas_object_smart_callback_add(btn, "clicked", _transit_start, objs);
+
+   vbox = elm_box_add(win);
+   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+   evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, 0.0);
+
+   for (i = 0; _transitions[i].label; i++) {
+     _checkbox_transition_add(vbox, _transitions[i].label, &_transitions[i].checked);
+   }
+
+   elm_box_pack_end(box, vbox);
+   evas_object_show(vbox);
+
+   evas_object_show(win);
+   return 0;
+}
diff --git a/live.viewer/dbox.video/CMakeLists.txt b/live.viewer/dbox.video/CMakeLists.txt
new file mode 100644 (file)
index 0000000..bac5492
--- /dev/null
@@ -0,0 +1,33 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox.video C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.video REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+       mm-player
+       dynamicbox_provider
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.video_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_VIDEO\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+       src/player.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.video_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/Color.mp4 DESTINATION "/opt/usr/media/Videos")
diff --git a/live.viewer/dbox.video/data/CMakeLists.txt b/live.viewer/dbox.video/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1a14655
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(hello.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc hello.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} hello.edj)
+INSTALL(FILES hello.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.video/data/hello.edc b/live.viewer/dbox.video/data/hello.edc
new file mode 100644 (file)
index 0000000..b0b6e15
--- /dev/null
@@ -0,0 +1,49 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                               }
+                       }
+
+                       part {
+                               name: "actor";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                               description {
+                                       state: "rotate" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.video/include/main.h b/live.viewer/dbox.video/include/main.h
new file mode 100644 (file)
index 0000000..a28f240
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/*!
+ * \note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/*!
+ * \note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+       dynamicbox_buffer_h dbox_buffer;
+       char *filename;
+
+       Ecore_Event_Handler *damage_handler;
+       Ecore_X_Damage damage;
+
+       MMHandleType player;
+       enum play_state {
+               PLAYER_CREATED = 0x0,
+               PLAYER_PLAY = 0x01,
+               PLAYER_STOP = 0x02,
+               PLAYER_PAUSE = 0x03,
+               PLAYER_DESTROYED = 0x04,
+       } player_state;
+
+       struct down {
+               int x;
+               int y;
+               int pressed;
+       } down;
+};
+
+
+/*!
+ * \brief
+ * \param[in] pkgname
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/*!
+ * \brief
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[in] content
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *id);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *id);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *id);
+
+/*!
+ * \brief
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *id);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[in] event "clicked" only
+ * \param[in] timestamp
+ * \param[in] x
+ * \param[in] y
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y);
+
+/*!
+ * \brief if "source" == "id", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * \param[in] id
+ * \param[in] emission
+ * \param[in] source
+ * \param[in] event_info
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[in] width
+ * \param[in] height
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *id, int size_type);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[in] cluster
+ * \param[in] category
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *id, const char *cluster, const char *category);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[out] w Width of the last content
+ * \param[out] h Height of the last content
+ * \param[out] priority Priority of the last content
+ * \param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * \param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * \return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *id, int *w, int *h, double *priority, char **content, char **title);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \param[in] pinup
+ * \return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *id, int pinup);
+
+/*!
+ * \brief
+ * \param[in] id
+ * \return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *id);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.video/include/player.h b/live.viewer/dbox.video/include/player.h
new file mode 100644 (file)
index 0000000..2e294c0
--- /dev/null
@@ -0,0 +1,10 @@
+extern int dynamicbox_player_refresh(struct info *info);
+extern int dynamicbox_player_create(struct info *info);
+extern int dynamicbox_player_play(struct info *info);
+extern int dynamicbox_player_stop(struct info *info);
+extern int dynamicbox_player_destroy(struct info *info);
+extern int dynamicbox_player_state(struct info *info);
+extern int dynamicbox_player_updated(struct info *info);
+
+/* End of a file */
+
diff --git a/live.viewer/dbox.video/src/main.c b/live.viewer/dbox.video/src/main.c
new file mode 100644 (file)
index 0000000..b044e02
--- /dev/null
@@ -0,0 +1,554 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_buffer.h>
+
+#include <dynamicbox_provider_buffer.h>
+
+#include <aul.h>
+#include <mm_player.h>
+
+#include "main.h"
+#include "player.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+static inline struct info *find_info(const char *id)
+{
+       Eina_List *l;
+       struct info *info;
+
+       EINA_LIST_FOREACH(s_list, l, info) {
+               if (!strcmp(info->id, id)) {
+                       return info;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->filename = strdup("/opt/usr/media/Videos/Color.mp4");
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       info->player_state = PLAYER_DESTROYED;
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *info;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       info = find_info(id);
+       if (!info) {
+               /**
+                * @NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, info);
+
+       /**
+        * @NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       free(info->filename);
+       free(info->content);
+       free(info->id);
+       free(info);
+       return 0;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *info;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       info = find_info(id);
+       if (!info) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *info;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       dynamicbox_player_updated(info);
+       return DBOX_STATUS_ERROR_DISABLED;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *info;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(info->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       if (dynamicbox_player_state(info) == PLAYER_PLAY) {
+               dynamicbox_player_stop(info);
+               dynamicbox_player_destroy(info);
+       } else {
+               dynamicbox_player_create(info);
+               dynamicbox_player_refresh(info);
+               dynamicbox_player_play(info);
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *info;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is closed
+                */
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+static int event_handler(dynamicbox_buffer_h dbox_buffer, dynamicbox_buffer_event_data_t event_info, void *data)
+{
+       switch (event_info->type) {
+        case DBOX_BUFFER_EVENT_ENTER:
+               break;
+        case DBOX_BUFFER_EVENT_LEAVE:
+               break;
+        case DBOX_BUFFER_EVENT_DOWN:
+               break;
+        case DBOX_BUFFER_EVENT_MOVE:
+               break;
+        case DBOX_BUFFER_EVENT_UP:
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *info;
+       int w;
+       int h;
+       int ret;
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID
+        */
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (info->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               char *uri;
+               int len;
+
+               len = strlen(id) + strlen("file://") + 2;
+
+               uri = malloc(len + 1);
+               if (!uri) {
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+               snprintf(uri, len, "file://%s", id);
+
+               info->dbox_buffer = dynamicbox_provider_buffer_create(DBOX_TYPE_DBOX, "com.samsung.w-add-viewer.video", uri, 1, event_handler, info);
+               free(uri);
+               if (!info->dbox_buffer) {
+                       LOGE("Failed to create a LB Buffer\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+       } else {
+               dynamicbox_provider_buffer_release(info->dbox_buffer);
+       }
+
+       info->size_type = type;
+
+       dynamicbox_provider_buffer_acquire(info->dbox_buffer, w, h, 3);
+
+       if (dynamicbox_player_state(info) == PLAYER_PLAY) {
+               dynamicbox_player_refresh(info);
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /*!
+        * \NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *info;
+
+       info = find_info(id);
+       if (!info) {
+               return NULL;
+       }
+
+       return strdup(info->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *info;
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *info;
+
+       info = find_info(id);
+       if (!info) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+               //dynamicbox_player_stop(info);
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed [%s]\n", id);
+               //dynamicbox_player_play(info);
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        *
+        * FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                     even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.video/src/player.c b/live.viewer/dbox.video/src/player.c
new file mode 100644 (file)
index 0000000..6f90119
--- /dev/null
@@ -0,0 +1,252 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <X11/Xlib.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+
+#include <dynamicbox_provider.h>
+#include <dynamicbox_provider_buffer.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+#include <mm_player.h>
+#include <mm_message.h>
+#include <mm_error.h>
+#include <mm_types.h>
+
+#include "main.h"
+#include "player.h"
+
+int errno;
+
+int dynamicbox_player_updated(struct info *info)
+{
+       int ret;
+       char *uri;
+       int len;
+       dynamicbox_damage_region_t region = {
+               .x = 0,
+               .y = 0,
+       };
+
+       if (dynamicbox_service_get_size(info->size_type, &region.w, &region.h) < 0) {
+               LOGE("Failed to get size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       len = strlen(info->id) + strlen("file://") + 2;
+
+       uri = malloc(len + 1);
+       if (!uri) {
+               LOGE("Heap: %s\n", strerror(errno));
+               return ECORE_CALLBACK_PASS_ON;
+       }
+       snprintf(uri, len, "file://%s", info->id);
+
+       ret = dynamicbox_provider_send_updated("com.samsung.w-add-viewer.video", uri, &region);
+       free(uri);
+
+       LOGD("============== %s\n", info->id);
+       return ret;
+}
+
+static int mm_message_handler_cb(int message, void *param, void *user_param)
+{
+       struct info *info = user_param;
+       switch (message) {
+       case MM_MESSAGE_END_OF_STREAM:
+               dynamicbox_player_stop(info);
+               break;
+       default:
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+void clear(unsigned int pixmap, int w, int h)
+{
+       static unsigned int s_color = 0x00FF0000;
+       Display *disp;
+       GC gc;
+
+       disp = (Display *)ecore_x_display_get();
+       gc = XCreateGC(disp, pixmap, 0, 0);
+       XSetForeground(disp, gc, 0xFF000000 | s_color);
+       XFillRectangle(disp, pixmap, gc, 0, 0, w, h);
+       XSync(disp, FALSE);
+       XFreeGC(disp, gc);
+
+       s_color >>= 2;
+       if (s_color == 0) {
+               s_color = 0xFF000000;
+       }
+}
+
+int dynamicbox_player_refresh(struct info *info)
+{
+       unsigned int pixmap;
+       char *err = NULL;
+       int w;
+       int h;
+
+       if (dynamicbox_service_get_size(info->size_type, &w, &h) < 0) {
+               LOGE("Failed to get size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       pixmap = dynamicbox_provider_buffer_resource_id(info->dbox_buffer);
+       if (pixmap == 0) {
+               LOGE("Failed to get correct pixmap\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (info->damage) {
+               ecore_x_damage_free(info->damage);
+       }
+
+       info->damage = ecore_x_damage_new(pixmap, ECORE_X_DAMAGE_REPORT_RAW_RECTANGLES);
+       if (!info->damage) {
+               LOGE("Failed to create a damage handler\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       clear(pixmap, w, h);
+
+       if (access(info->filename, F_OK) != 0) {
+               LOGE("Failed to access a file: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       LOGD("Pixmap: %x (%dx%d)\n", pixmap, w, h);
+
+       mm_player_set_attribute(info->player, &err,
+                       "display_surface_type", MM_DISPLAY_SURFACE_X,
+                       "display_width", w,
+                       "display_height", h,
+                       "display_overlay", &pixmap, sizeof(pixmap),
+                       "profile_uri", info->filename, strlen(info->filename),
+                       "display_rotation", MM_DISPLAY_ROTATION_NONE,
+                       "profile_play_count", 1,
+                       NULL); 
+       if (err) {
+               // Error
+               LOGE("ERROR: %s\n", err);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static inline Eina_Bool damage_cb(void *data, int type, void *event)
+{
+       struct info *info = data;
+       Ecore_X_Event_Damage *e = (Ecore_X_Event_Damage *)event;
+
+       if (e->drawable == dynamicbox_provider_buffer_resource_id(info->dbox_buffer)) {
+               // For the ugly mm-player
+               static struct timeval stv;
+               static int first = 0;
+               struct timeval etv;
+               struct timeval rtv;
+
+               if (first == 0) {
+                       gettimeofday(&stv, NULL);
+                       first = 1;
+               } else {
+                       gettimeofday(&etv, NULL);
+                       timersub(&etv, &stv, &rtv);
+                       gettimeofday(&stv, NULL);
+
+                       if (rtv.tv_usec > 20000) {
+                               dynamicbox_player_updated(info);
+                       }
+               }
+       }
+
+       ecore_x_damage_subtract(e->damage, None, None);
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+int dynamicbox_player_create(struct info *info)
+{
+       if (info->player_state != PLAYER_DESTROYED) {
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       if (mm_player_create(&info->player) != MM_ERROR_NONE) {
+               LOGE("Failed to create mm player\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       mm_player_set_message_callback(info->player, mm_message_handler_cb, info);
+       info->player_state = PLAYER_CREATED;
+
+       info->damage_handler = ecore_event_handler_add(ECORE_X_EVENT_DAMAGE_NOTIFY, damage_cb, info);
+       if (!info->damage_handler) {
+               LOGE("Failed to add damage notifier\n");
+               mm_player_destroy(info->player);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dynamicbox_player_play(struct info *info)
+{
+       if (info->player_state == PLAYER_PLAY) {
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       if (mm_player_realize(info->player) != MM_ERROR_NONE) {
+               LOGE("Failed to realize a player\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       mm_player_start(info->player);
+       info->player_state = PLAYER_PLAY;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dynamicbox_player_stop(struct info *info)
+{
+       if (!info->player || info->player_state != PLAYER_PLAY) {
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       mm_player_stop(info->player);
+       mm_player_unrealize(info->player);
+       info->player_state = PLAYER_STOP;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dynamicbox_player_destroy(struct info *info)
+{
+       dynamicbox_player_stop(info);
+
+       if (info->damage_handler) {
+               ecore_event_handler_del(info->damage_handler);
+               info->damage_handler = NULL;
+       }
+
+       if (info->player) {
+               mm_player_destroy(info->player);
+               info->player = 0;
+       }
+
+       info->player_state = PLAYER_DESTROYED;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dynamicbox_player_state(struct info *info)
+{
+       return info->player_state;
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.win/CMakeLists.txt b/live.viewer/dbox.win/CMakeLists.txt
new file mode 100644 (file)
index 0000000..b655a25
--- /dev/null
@@ -0,0 +1,32 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(com.samsung.w-add-viewer.dbox C)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(com.samsung.w-add-viewer.dbox REQUIRED
+       elementary
+       dlog
+       dynamicbox
+       dynamicbox_service
+       aul
+)
+
+FOREACH (flag ${com.samsung.w-add-viewer.dbox_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Winline -Werror -fno-builtin-malloc -fno-omit-frame-pointer -g")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+ADD_DEFINITIONS(${EXTRA_CFLAGS})
+ADD_DEFINITIONS("-DLOG_TAG=\"DBOX_WIN\"")
+
+ADD_LIBRARY(${PROJECT_NAME} SHARED
+       src/main.c
+)
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${com.samsung.w-add-viewer.dbox_LDFLAGS})
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBEXECDIR})
+
+ADD_SUBDIRECTORY(data)
+#ADD_SUBDIRECTORY(res)
diff --git a/live.viewer/dbox.win/data/CMakeLists.txt b/live.viewer/dbox.win/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1a14655
--- /dev/null
@@ -0,0 +1,10 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(hello.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc hello.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/hello.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} hello.edj)
+INSTALL(FILES hello.edj DESTINATION ${EDJDIR})
diff --git a/live.viewer/dbox.win/data/hello.edc b/live.viewer/dbox.win/data/hello.edc
new file mode 100644 (file)
index 0000000..b0b6e15
--- /dev/null
@@ -0,0 +1,49 @@
+images {
+       image: "unknown.png" COMP;
+}
+
+collections {
+       group {
+               name: "default";
+               parts {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                               }
+                       }
+
+                       part {
+                               name: "actor";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                               description {
+                                       state: "rotate" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                                       color: 255 255 255 255;
+                                       map { on: 1; }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                       }
+               }
+       }
+}
+
+/* End of a file */
diff --git a/live.viewer/dbox.win/include/main.h b/live.viewer/dbox.win/include/main.h
new file mode 100644 (file)
index 0000000..a44c79c
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_MAIN_H__
+
+/**
+ * @note
+ * Sync function must has not to use any callback
+ */
+#define _SYNC_
+/**
+ * @note
+ * Async function can use the callback but it has to be invoked in specified time "timeout"
+ */
+#define _ASYNC_
+
+/**
+ * @brief
+ * @param[in] pkgname
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_initialize(const char *pkgname);
+
+/**
+ * @brief
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_finalize(void);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] content
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_create(const char *filename, const char *content, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_update(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_destroy(const char *filename);
+
+/**
+ * @brief
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_need_to_create(const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int
+ */
+_ASYNC_ extern int dynamicbox_update_content(const char *filename);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] event "clicked" only
+ * @param[in] timestamp
+ * @param[in] x
+ * @param[in] y
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_clicked(const char *filename, const char *event, double timestamp, double x, double y);
+
+/**
+ * @brief if "source" == "filename", emission could be "gbar,show", "gbar,hide", "dbox,show", "dbox,hide".
+ * @param[in] filename
+ * @param[in] emission
+ * @param[in] source
+ * @param[in] event_info
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_content_event(const char *filename, const char *emission, const char *source, dynamicbox_event_info_t event_info);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] width
+ * @param[in] height
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_resize(const char *filename, int size_type);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] cluster
+ * @param[in] category
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_change_group(const char *filename, const char *cluster, const char *category);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[out] w Width of the last content
+ * @param[out] h Height of the last content
+ * @param[out] priority Priority of the last content
+ * @param[out] *content Content info of the last content which should be usable for dynamicbox_create(..., content_info, ...);
+ * @param[out] *title Only for the [CA] dynamicbox. Describe a title for your sub cluster
+ * @return int
+ */
+_SYNC_ extern int dynamicbox_get_info(const char *filename, int *w, int *h, double *priority, char **content, char **title);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @param[in] pinup
+ * @return char * String which is allocated on a Heap space.
+ */
+_SYNC_ extern char *dynamicbox_pinup(const char *filename, int pinup);
+
+/**
+ * @brief
+ * @param[in] filename
+ * @return int 1 is pinned up, 0 is not pinned up
+ */
+_SYNC_ extern int dynamicbox_is_pinned_up(const char *filename);
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.win/include/virtual_canvas.h b/live.viewer/dbox.win/include/virtual_canvas.h
new file mode 100644 (file)
index 0000000..6930c76
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ *  [live-data-provider]
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Sangil Lee <sangil77.lee@samsung.com>, Seho Chang <seho.chang@samsung.com>
+ * 
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+#define __LIVE_DATA_PROVIDER_LIVE_GEN_TEMPLATE_VIRTUAL_CANVAS_H__
+
+extern int flush_to_file(Evas *e, const char *filename, int w, int h);
+extern int flush_data_to_file(Evas *e, char *data, const char *filename, int w, int h);
+
+extern Evas *create_virtual_canvas(int w, int h);
+extern int destroy_virtual_canvas(Evas *e);
+extern void get_screen_geometry(int *w, int *h);
+
+#endif
+
+// End of a file
diff --git a/live.viewer/dbox.win/src/main.c b/live.viewer/dbox.win/src/main.c
new file mode 100644 (file)
index 0000000..94e3d3b
--- /dev/null
@@ -0,0 +1,632 @@
+#include <Elementary.h>
+#include <errno.h>
+#include <string.h>
+
+#include <dlog.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#include <aul.h>
+
+#include "main.h"
+
+#define PUBLIC __attribute__((visibility("default")))
+
+static Eina_List *s_list;
+int errno;
+
+struct info {
+       char *id;
+       char *content;
+       int size_type;
+       Evas_Object *dbox_win;
+       enum edge {
+               LEFT,
+               RIGHT,
+               MIDDLE,
+       } edge;
+       struct down {
+               int x;
+               int y;
+               int pressed;
+       } down;
+};
+
+static inline struct info *find_item(const char *id)
+{
+       Eina_List *l;
+       struct info *item;
+
+       EINA_LIST_FOREACH(s_list, l, item) {
+               if (!strcmp(item->id, id)) {
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+PUBLIC int dynamicbox_initialize(const char *pkgname)
+{
+       /**
+        * @TODO
+        * Do one-time initialize.
+        * This will be called only once right before the first box is creating
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_finalize(void)
+{
+       /**
+        * @TODO
+        * Do one-time finalization. 
+        * This will be called only once right after the last box is destroyed
+        */
+       return 0;
+}
+
+// NOTE: This function is going to be invoked for initializing all resources
+PUBLIC int dynamicbox_create(const char *id, const char *content, const char *cluster, const char *category)
+{
+       struct info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->id = strdup(id);
+       if (!info->id) {
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->content = strdup(content);
+       if (!info->content) {
+               free(info->id);
+               free(info);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /**
+        * @NOTE
+        * cluster == 'user,created'
+        * category == 'default'
+        *
+        * You don't need to care these two values if you don't know what are them
+        */
+
+       info->size_type = DBOX_SIZE_TYPE_UNKNOWN;
+       s_list = eina_list_append(s_list, info);
+
+       /**
+        * @NOTE
+        * You can returns DBOX_OUTPUT_UPDATED or DBOX_NEED_TO_SCHEDULE or DBOX_DONE
+        * You also can use them at same time using '|'
+        *
+        * If your content is updated, from this function, you have to
+        * return DBOX_OUTPUT_UPDATED;
+        *
+        * If you want to the provider call your dynamicbox_update_content function ASAP
+        * return DBOX_NEED_TO_SCHEDULE;
+        *
+        * If your content is updated and need to call the update_content function ASAP,
+        * return DBOX_OUTPUT_UPDATED | DBOX_NEED_TO_SCHEDULE
+        *
+        * Don't have any changes, just
+        * return DBOX_DONE
+        */
+
+       /**
+        * @NOTE
+        * You create the default output image from here now.
+        * So you HAVE TO return DBOX_OUTPUT_UPDATED
+        */
+       return DBOX_DONE;
+}
+
+// NOTE: This function is going to be invoked for release all resources
+PUBLIC int dynamicbox_destroy(const char *id)
+{
+       struct info *item;
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /**
+                * @NOTE
+                * EXCEPTIONAL CASES
+                */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       s_list = eina_list_remove(s_list, item);
+
+       /**
+        * @NOTE: You have to clear all resource which are related with
+        *       current instance. If you didn't clear it correctly,
+        *       the live data provider will get suffer from the memory
+        *       pressure. therefore, keep trace on your resources.
+        */
+       if (item->dbox_win) {
+               evas_object_del(item->dbox_win);
+       }
+       free(item->content);
+       free(item->id);
+       free(item);
+       return 0;
+}
+
+PUBLIC int dynamicbox_need_to_update(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               /* Hmm, there is no matched instance. */
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \TODO
+        * Check the content,
+        * If you found any changes in your content data,
+        * return 1 or 0
+        *
+        * If you return 1, the provider will schedule to update your box ASAP.
+        * Or the provider will skip to call dynamicbox_update_content function.
+        *
+        * this function can be called several times, before call the dynamicbox_update_content function.
+        *
+        * if your dynamicbox_update_content is not called, and you have content which need to be updated, you have to
+        * keep return 1
+        */
+       return 1;
+}
+
+PUBLIC int dynamicbox_update_content(const char *id)
+{
+       struct info *item;
+
+       LOGD("[%s:%d]\n", __func__, __LINE__);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * This function have to generate a new content.
+        * If you don't want to generate new content,
+        * return negative values.
+        * or you have to generate the new content. in timeout msec.
+        */
+       return DBOX_STATUS_ERROR_DISABLED;
+}
+
+PUBLIC int dynamicbox_clicked(const char *id, const char *event, double timestamp, double x, double y)
+{
+       struct info *item;
+       int ix;
+       int iy;
+       int w;
+       int h;
+
+       /**
+        * @NOTE:
+        *   You will get this if a user press your image.
+        *   You can get the absolute coordinate using the given x,y.
+        *
+        *   event: clicked
+        */
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       (void)dynamicbox_service_get_size(item->size_type, &w, &h);
+       ix = (int)((double)w * x);
+       iy = (int)((double)h * y);
+
+       LOGD("[%s:%d] event[%s] %lf %lf (%lf)\n", __func__, __LINE__, event, x, y, timestamp);
+       LOGD("[%s:%d] on your image (%d, %d)\n", __func__, __LINE__, ix, iy);
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No chages */
+}
+
+PUBLIC int dynamicbox_content_event(const char *id, const char *emission, const char *source, dynamicbox_event_info_t event_info)
+{
+       struct timeval tv;
+       char buffer[BUFSIZ];
+       struct info *item;
+
+       LOGD("[%s:%d] Emission : %s, source: %s [%lf x %lf - %lf x %lf] (%lf x %lf - %d)\n",
+               __func__, __LINE__,
+               emission, source,
+               event_info->part.sx, event_info->part.sy, event_info->part.ex, event_info->part.ey,
+               event_info->pointer.x, event_info->pointer.y, event_info->pointer.down);
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       gettimeofday(&tv, NULL);
+       snprintf(buffer, sizeof(buffer), "%lu.%lu", tv.tv_sec, tv.tv_usec);
+
+       if (!strcmp(emission, "gbar,show") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is opened
+                */
+       } else if (!strcmp(emission, "gbar,hide") && !strcmp(source, id)) {
+               /**
+                * @NOTE
+                * Glance Bar is closed
+                */
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE; /* No changes */
+}
+
+static void edge_left_cb(void *data, Evas_Object *obj, void *info)
+{
+       struct info *item = data;
+       LOGD("=========== LEFT\n");
+       item->edge = LEFT;
+}
+
+static void scroll_cb(void *data, Evas_Object *obj, void *info)
+{
+       struct info *item = data;
+       LOGD("=========== MIDDLE\n");
+       item->edge = MIDDLE;
+}
+
+static void edge_right_cb(void *data, Evas_Object *obj, void *info)
+{
+       struct info *item = data;
+       LOGD("=========== RIGHT\n");
+       item->edge = RIGHT;
+}
+
+static void scroll_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct info *item = data;
+       item->down.pressed = 0;
+}
+
+static void scroll_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct info *item = data;
+       Evas_Event_Mouse_Down *down = event_info;
+
+       item->down.x = down->canvas.x;
+       item->down.y = down->canvas.y;
+       item->down.pressed = 1;
+}
+
+static void scroll_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct info *item = data;
+       Evas_Event_Mouse_Move *move = event_info;
+
+       if (!item->down.pressed) {
+               return;
+       }
+
+       LOGD("%d %d\n", move->cur.canvas.x, item->down.x);
+       if (move->cur.canvas.x > item->down.x) {
+               if (item->edge == LEFT) {
+                       LOGD("=========== RELEASE\n");
+                       dynamicbox_thaw_scroller("com.samsung.w-add-viewer.dbox", item->id);
+               }
+       } else {
+               if (item->edge == RIGHT) {
+                       LOGD("=========== RELEASE\n");
+                       dynamicbox_thaw_scroller("com.samsung.w-add-viewer.dbox", item->id);
+               }
+       }
+}
+
+PUBLIC int dynamicbox_resize(const char *id, int type)
+{
+       struct info *item;
+       int w;
+       int h;
+       int ret;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /*!
+        * \TODO
+        * Check the size type, which is supporting by your box.
+        * If the invalid size is requested, you should returns DBOX_STATUS_ERROR_INVALID_PARAMETER
+        */
+       ret = dynamicbox_service_get_size(type, &w, &h);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               LOGE("Unsupported size\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (item->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               Evas_Object *dbox_parent;
+               Evas_Object *scroller;
+               Evas_Object *box;
+               Evas_Object *rect;
+               int i;
+
+               dbox_parent = dynamicbox_get_evas_object(id, 0);
+               if (!dbox_parent) {
+                       LOGE("Failed to get an evas object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               item->dbox_win = elm_win_add(dbox_parent, "DBox Window", ELM_WIN_DYNAMIC_BOX);
+               evas_object_del(dbox_parent);
+               if (!item->dbox_win) {
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_resize(item->dbox_win, w, h);
+               evas_object_show(item->dbox_win);
+
+               scroller = elm_scroller_add(item->dbox_win);
+               if (!scroller) {
+                       evas_object_del(item->dbox_win);
+                       item->dbox_win = NULL;
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_fill_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               evas_object_resize(scroller, w, h);
+               evas_object_show(scroller);
+
+               box = elm_box_add(scroller);
+               elm_object_content_set(scroller, box);
+
+               for (i = 0; i < 5; i++) {
+                       rect = evas_object_rectangle_add(evas_object_evas_get(item->dbox_win));
+                       if (!rect) {
+                               continue;
+                       }
+                       evas_object_resize(rect, w, h);
+                       evas_object_color_set(rect, rand() % 255, rand() % 255, rand() % 255, 255);
+                       evas_object_size_hint_min_set(rect, w, h);
+                       evas_object_show(rect);
+                       elm_box_pack_end(box, rect);
+               }
+               evas_object_resize(box, w, h);
+               evas_object_show(box);
+               evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_fill_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+               elm_box_horizontal_set(box, EINA_FALSE);
+
+               elm_scroller_page_size_set(scroller, w, h);
+               elm_object_scroll_lock_y_set(scroller, EINA_FALSE);
+               LOGD("Window & Scroller is created\n");
+
+               evas_object_smart_callback_add(scroller, "edge,left", edge_left_cb, item);
+               evas_object_smart_callback_add(scroller, "edge,right", edge_right_cb, item);
+               evas_object_smart_callback_add(scroller, "scroll", scroll_cb, item);
+
+               evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_DOWN, scroll_down_cb, item);
+               evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_UP, scroll_up_cb, item);
+               evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_MOVE, scroll_move_cb, item);
+       } else {
+               evas_object_resize(item->dbox_win, w, h);
+       }
+
+       LOGD("%s is resized to %dx%d\n", id, w, h);
+       item->size_type = type;
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_NEED_TO_SCHEDULE;
+}
+
+PUBLIC int dynamicbox_need_to_create(const char *cluster, const char *category)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * return 0 or 1
+        */
+       return 0;
+}
+
+PUBLIC int dynamicbox_change_group(const char *id, const char *cluster, const char *category)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_need_to_destroy(const char *id)
+{
+       /**
+        * @NOTE
+        * You don't need implement this, if don't know what this is.
+        * This will be called after call the dynamicbox_need_to_update function.
+        * If the dynamicbox_need_to_update function returns 0,
+        * The provider will call this.
+        *
+        * If you return 1, the provider will delete your box.
+        */
+       return 0;
+}
+
+PUBLIC char *dynamicbox_pinup(const char *id, int pinup)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return NULL;
+       }
+
+       return strdup(item->content);
+}
+
+PUBLIC int dynamicbox_is_pinned_up(const char *id)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content.
+        * and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        */
+       return DBOX_DONE;
+}
+
+PUBLIC int dynamicbox_system_event(const char *id, int type)
+{
+       struct info *item;
+
+       item = find_item(id);
+       if (!item) {
+               return DBOX_STATUS_ERROR_NOT_EXIST;
+       }
+
+       if (type == DBOX_SYS_EVENT_FONT_CHANGED) {
+               LOGD("Font is changed\n");
+       } else if (type == DBOX_SYS_EVENT_LANG_CHANGED) {
+               LOGD("Language is changed\n");
+       } else if (type == DBOX_SYS_EVENT_TIME_CHANGED) {
+               LOGD("Time is changed\n");
+       } else if (type == DBOX_SYS_EVENT_REGION_CHANGED) {
+               LOGD("Region is changed\n");
+       } else if (type == DBOX_SYS_EVENT_PAUSED) {
+               LOGD("Paused\n");
+               // dynamicbox_thaw_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_RESUMED) {
+               LOGD("Resumed [%s]\n", id);
+               // dynamicbox_freeze_scroller("com.samsung.w-add-viewer.dbox", id);
+       } else if (type == DBOX_SYS_EVENT_MMC_STATUS_CHANGED) {
+               LOGD("MMC");
+       } else {
+               LOGD("Unknown");
+       }
+
+       /**
+        * @NOTE
+        * If you can generate new content in this function,
+        * Generate a new content. and return DBOX_OUTPUT_UPDATED
+        *
+        * In case of you cannot create the updated image in this function directly,
+        * return DBOX_NEED_TO_SCHEDULE
+        * The provider will call your dynamicbox_need_to_update & dynamicbox_update_content function.
+        *
+        * I recommend that if you are able to generate new content in this function,
+        * generate it directly. and just returns DBOX_OUTPUT_UPDATED
+        *
+        * Because if you return DBOX_NEED_TO_SCHEDULE, the provider will try to update your dynamicbox
+        * But it can be interrupted by other events.
+        * Then you dynamicbox content updating will be delayed
+        *
+        * DBOX_FORCE_TO_SCHEDULE - If you returns this, the provider will try to update your box
+        *                     even though the box is paused you will get need_to_update & update_content function call.
+        */
+       return DBOX_DONE;
+}
+
+/* End of a file */
diff --git a/live.viewer/include/debug.h b/live.viewer/include/debug.h
deleted file mode 100644 (file)
index 2efc6dc..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#if !defined(FLOG)
-#define DbgPrint(format, arg...)       SECURE_LOGD("[\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg)
-#define ErrPrint(format, arg...)       SECURE_LOGE("[\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg)
-#else
-extern FILE *__file_log_fp;
-#define DbgPrint(format, arg...) do { fprintf(__file_log_fp, "[LOG] [\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg); fflush(__file_log_fp); } while (0)
-
-#define ErrPrint(format, arg...) do { fprintf(__file_log_fp, "[ERR] [\e[32m%s/%s\e[0m:%d] " format, util_basename(__FILE__), __func__, __LINE__, ##arg); fflush(__file_log_fp); } while (0)
-#endif
-
-/* End of a file */
diff --git a/live.viewer/include/dlist.h b/live.viewer/include/dlist.h
deleted file mode 100644 (file)
index cd1a421..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define dlist_remove_data(list, data) do { \
-       struct dlist *l; \
-       l = dlist_find_data(list, data); \
-       list = dlist_remove(list, l); \
-} while (0)
-
-#define dlist_foreach(list, l, data) \
-       for ((l) = (list); (l) && ((data) = dlist_data(l)); (l) = dlist_next(l))
-
-#define dlist_foreach_safe(list, l, n, data) \
-       for ((l) = (list), (n) = dlist_next(l); \
-               (l) && ((data) = dlist_data(l)); \
-               (l) = (n), (n) = dlist_next(l))
-
-struct dlist;
-
-extern struct dlist *dlist_append(struct dlist *list, void *data);
-extern struct dlist *dlist_prepend(struct dlist *list, void *data);
-extern struct dlist *dlist_remove(struct dlist *list, struct dlist *l);
-extern struct dlist *dlist_find_data(struct dlist *list, void *data);
-extern void *dlist_data(struct dlist *l);
-extern struct dlist *dlist_next(struct dlist *l);
-extern struct dlist *dlist_prev(struct dlist *l);
-extern int dlist_count(struct dlist *l);
-extern struct dlist *dlist_nth(struct dlist *l, int nth);
-
-/* End of a file */
diff --git a/live.viewer/include/lb.h b/live.viewer/include/lb.h
deleted file mode 100644 (file)
index 37c48ac..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern int lb_init(void);
-extern int lb_fini(void);
-extern int lb_add(Evas_Object *sc, const char *pkgname);
-
-/* End of a file */
diff --git a/live.viewer/include/live_scroller.h b/live.viewer/include/live_scroller.h
deleted file mode 100644 (file)
index 02b2450..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-struct live_sc_event_info {
-       int curidx;
-       int toidx;
-};
-
-struct live_sc_drag_info {
-       int dx;
-       int dy;
-};
-
-struct live_sc_move_info {
-       Evas_Object *item;
-       Evas_Coord x;
-       Evas_Coord y;
-       Evas_Coord w;
-       Evas_Coord h;
-
-       double relx;
-       double rely;
-};
-
-extern Evas_Object *live_scroller_add(Evas_Object *parent);
-extern int live_scroller_append(Evas_Object *scroller, Evas_Object *item);
-extern Evas_Object *live_scroller_remove(Evas_Object *scroller, int idx);
-extern Evas_Object *live_scroller_get_item(Evas_Object *scroller, int idx);
-extern int live_scroller_get_current(Evas_Object *scroller);
-extern int live_scroller_loop_set(Evas_Object *scroller, int is_loop);
-
-extern int live_scroller_freeze(Evas_Object *scroller);
-extern int live_scroller_thaw(Evas_Object *scroller);
-
-extern int live_scroller_anim_to(Evas_Object *scroller, double fps, int offset);
-extern int live_scroller_go_to(Evas_Object *scroller, int idx);
-
-extern int live_scroller_update(Evas_Object *scroller);
-
-extern int live_scroller_remove_by_obj(Evas_Object *scroller, Evas_Object *obj);
-extern int live_scroller_get_item_index(Evas_Object *scroller, Evas_Object *item);
-extern int live_scroller_get_item_count(Evas_Object *scroller);
-
-/* End of a file */
diff --git a/live.viewer/include/main.h b/live.viewer/include/main.h
deleted file mode 100644 (file)
index 3c142be..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern Evas_Object *main_get_window(void);
diff --git a/live.viewer/include/scroller.h b/live.viewer/include/scroller.h
deleted file mode 100644 (file)
index f69575f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern Evas_Object *scroller_create(Evas_Object *parent);
-extern Evas_Object *scroller_peek_by_idx(Evas_Object *sc, int idx);
-extern int scroller_peek_by_obj(Evas_Object *sc, Evas_Object *obj);
-extern int scroller_append(Evas_Object *sc, Evas_Object *child);
-extern int scroller_get_current_idx(Evas_Object *sc);
-extern int scroller_peek_by_obj(Evas_Object *sc, Evas_Object *obj);
-extern Evas_Object *scroller_get_page(Evas_Object *sc, int idx);
-extern int scroller_is_scrolling(Evas_Object *sc);
-
-extern int scroller_add_stop_cb(Evas_Object *scroller, int (*cb)(Evas_Object *sc, void *data), void *data);
-extern void scroller_del_stop_cb(Evas_Object *scroller, int (*cb)(Evas_Object *sc, void *data), void *data);
-
-extern int scroller_get_page_index(Evas_Object *sc, Evas_Object *page);
-
-extern void scroller_unlock(Evas_Object *sc);
-extern void scroller_lock(Evas_Object *sc);
-
-extern int scroller_get_page_count(Evas_Object *sc);
-extern int scroller_scroll_to(Evas_Object *sc, int idx);
-extern int scroller_jump_to(Evas_Object *sc, int idx);
-
-extern int scroller_destroy(Evas_Object *sc);
-extern int scroller_update(Evas_Object *sc, void *data);
-extern int scroller_fast_scroll(Evas_Object *sc, int idx);
-extern void scroller_loop_set(Evas_Object *sc, Eina_Bool val);
-extern void scroller_quick_navi(Evas_Object *sc, Eina_Bool val);
-
-/* End of a file */
diff --git a/live.viewer/include/util.h b/live.viewer/include/util.h
deleted file mode 100644 (file)
index 79ab46b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-extern const char *util_basename(const char *name);
-
-/* End of a file */
diff --git a/live.viewer/live.viewer.xml b/live.viewer/live.viewer.xml
deleted file mode 100644 (file)
index 7a55872..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<manifest xmlns="http://tizen.org/ns/packages" package="live.viewer" version="0.0.1" install-location="auto">
-       <label>Live viewer (native)</label>
-       <author email="nicesj.park@samsung.com" href="www.samsung.com">Sung-jae Park</author>
-       <description>Live box simple viewer (native)</description>
-
-       <ui-application appid="live.viewer" exec="/opt/usr/apps/live.viewer/bin/live-viewer" nodisplay="false" multiple="false" type="capp" taskmanage="true">
-               <icon>live-viewer.png</icon>
-               <label>Live box simple viewer (native)</label>
-               <label xml:lang="en-us">Live box simple viewer (native)</label>
-       </ui-application>
-</manifest>
diff --git a/live.viewer/packaging/com.samsung.w-add-viewer.manifest b/live.viewer/packaging/com.samsung.w-add-viewer.manifest
new file mode 100644 (file)
index 0000000..592ec96
--- /dev/null
@@ -0,0 +1,8 @@
+<manifest>
+    <define>
+        <domain name="com.samsung.w-add-viewer"/>
+    </define>
+    <request>
+        <domain name="com.samsung.w-add-viewer"/>
+    </request>
+</manifest>
diff --git a/live.viewer/packaging/com.samsung.w-add-viewer.spec b/live.viewer/packaging/com.samsung.w-add-viewer.spec
new file mode 100644 (file)
index 0000000..3fd89fb
--- /dev/null
@@ -0,0 +1,83 @@
+#sbs-git:slp/pkgs/v/w-add-viewer w-add-viewer 0.1.2 226202351de9fefb43756c36d215ca74f52431d0
+%define _project_name w-add-viewer
+%define _package_name com.samsung.%{_project_name}
+
+Name: %{_package_name}
+Summary: w-add-viewer application (EFL)
+Version: 0.0.1
+Release: 1
+Group: HomeTF/AddViewer
+License: Flora
+Source0: %{name}-%{version}.tar.gz
+Source1001: %{name}.manifest
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(bundle)
+BuildRequires: pkgconfig(ail)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(pkgmgr)
+BuildRequires: pkgconfig(pkgmgr-info)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(dynamicbox_viewer)
+BuildRequires: pkgconfig(dynamicbox_service)
+BuildRequires: pkgconfig(dynamicbox)
+BuildRequires: pkgconfig(dynamicbox_provider)
+BuildRequires: pkgconfig(dynamicbox_provider_app)
+BuildRequires: pkgconfig(mm-player)
+BuildRequires: cmake
+BuildRequires: edje-bin
+BuildRequires: embryo-bin
+BuildRequires: gettext-devel
+BuildRequires: hash-signer
+
+%description
+w-add-viewer
+
+%prep
+%setup -q
+cp %{SOURCE1001} .
+
+%build
+%if 0%{?tizen_build_binary_release_type_eng}
+export CFLAGS="$CFLAGS -DTIZEN_ENGINEER_MODE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_ENGINEER_MODE"
+export FFLAGS="$FFLAGS -DTIZEN_ENGINEER_MODE"
+%endif
+%if 0%{?sec_build_binary_debug_enable}
+export CFLAGS="$CFLAGS -DTIZEN_DEBUG_ENABLE"
+export CXXFLAGS="$CXXFLAGS -DTIZEN_DEBUG_ENABLE"
+export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
+%endif
+RPM_OPT=`echo $CFLAGS|sed 's/-Wp,-D_FORTIFY_SOURCE=2//'`
+export CFLAGS=$RPM_OPT
+export CFLAGS+=" -DARCH=%{ARCH}"
+%cmake .
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%define tizen_sign 1
+%define tizen_sign_base /usr/apps/%{_package_name}
+%define tizen_sign_level public
+%define tizen_author_sign 1
+%define tizen_dist_sign 1
+%make_install
+
+%post
+
+%files
+%manifest %{_package_name}.manifest
+%defattr(-,root,root,-)
+/usr/apps/%{_package_name}/*
+/etc/smack/accesses2.d/%{_package_name}.rule
+/usr/share/packages/%{_package_name}.xml
+/usr/share/license/%{_package_name}
+/opt/usr/media/Videos/*
+/usr/share/icons/default/small/*.png
+#/opt/usr/media/Videos/*
diff --git a/live.viewer/packaging/live.viewer.spec b/live.viewer/packaging/live.viewer.spec
deleted file mode 100644 (file)
index f817c32..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-Name: live.viewer
-Summary: viewer
-Version: 0.0.1
-Release: 1
-Group: main/app
-License: Flora License
-Source0: %{name}-%{version}.tar.gz
-BuildRequires: cmake, gettext-tools
-BuildRequires: pkgconfig(dlog)
-BuildRequires: pkgconfig(aul)
-BuildRequires: pkgconfig(ail)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(appcore-efl)
-BuildRequires: pkgconfig(livebox-viewer)
-BuildRequires: pkgconfig(ecore-x)
-BuildRequires: pkgconfig(livebox-service)
-BuildRequires: pkgconfig(bundle)
-BuildRequires: pkgconfig(capi-appfw-application)
-BuildRequires: pkgconfig(capi-appfw-app-manager)
-BuildRequires: edje-bin
-
-%description
-Livebox viewer development library
-
-%prep
-%setup -q
-
-%build
-cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
-make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-%post
-
-%files
-%defattr(-,root,root,-)
-/opt/usr/apps/live.viewer/*
-/opt/share/*
diff --git a/live.viewer/res/CMakeLists.txt b/live.viewer/res/CMakeLists.txt
deleted file mode 100644 (file)
index 5f6447c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-ADD_CUSTOM_TARGET(live-viewer.edj ALL
-               COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/res/image
-               ${CMAKE_CURRENT_SOURCE_DIR}/live-viewer.edc live-viewer.edj
-               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/live-viewer.edc
-)
-ADD_DEPENDENCIES(${PROJECT_NAME} live-viewer.edj)
-INSTALL(FILES live-viewer.edj DESTINATION ${PKGROOT}/res/edje)
diff --git a/live.viewer/res/live-viewer.edc b/live.viewer/res/live-viewer.edc
deleted file mode 100644 (file)
index fac023d..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-images {
-       /* image: "a" COMP; */
-}
-
-collections {
-       group {
-               name: "layout";
-               parts {
-                       part {
-                               name: "indicator";
-                               type: RECT;
-                               mouse_events: 0;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 0.0 0.0; }
-                                       rel2 { relative: 1.0 100/1280; }
-                                       color: 0 0 0 0;
-                               }
-                       }
-
-                       part {
-                               name: "delete,btn";
-                               type: SWALLOW;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 4/720 1.0; to_y, "viewer"; }
-                                       rel2 { relative: 716/720 900/1280; }
-                               }
-                       }
-
-                       part {
-                               name: "controller"; /* size list */
-                               type: SWALLOW;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 0.0 1.0; to_y, "delete,btn"; }
-                                       rel2 { relative: 0.3 1.0; }
-                               }
-                       }
-
-                       part {
-                               name: "logger";
-                               type: SWALLOW;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 1.0 1.0; to_x: "controller"; to_y: "delete,btn"; }
-                                       rel2 { relative: 1.0 1.0; }
-                               }
-                       }
-
-                       part {
-                               name: "viewer";
-                               type: RECT;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 4/720 1.0; to, "indicator"; }
-                                       rel2 { relative: 716/720 800/1280; }
-                                       color: 255 255 255 255;
-                               }
-                       }
-
-                       part {
-                               name: "event,blocker";
-                               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;
-                                       visible: 0;
-                               }
-                               description {
-                                       state: "show" 0.0;
-                                       inherit: "default" 0.0;
-                                       color: 50 50 50 50;
-                                       visible: 1;
-                               }
-                       }
-
-                       part {
-                               name: "livebox";
-                               type: SWALLOW;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 0.4 0.4; to, "viewer"; }
-                                       rel2 { relative: 0.6 0.6; to, "viewer"; }
-                               }
-                       }
-
-                       part {
-                               name: "pd";
-                               type: SWALLOW;
-                               mouse_events: 1;
-                               description {
-                                       state: "default" 0.0;
-                                       rel1 { relative: 0.0 0.95; to_y, "livebox"; }
-                                       rel2 { relative: 1.0 1.0; to_y, "livebox"; }
-                                       visible: 0;
-                                       align: 0.0 0.0;
-                               }
-
-                               description {
-                                       state: "show" 0.0;
-                                       rel1 { relative: 0.0 1.0; to_y, "livebox"; }
-                                       rel2 { relative: 1.0 1.0; }
-                                       visible: 1;
-                                       align: 0.0 0.0;
-                               }
-                       }
-               }
-
-               programs {
-                       program {
-                               name: "open,pd";
-                               source: "pd";
-                               signal: "open";
-                               action: STATE_SET "show" 0.0;
-                               target: "pd";
-                               target: "event,blocker";
-                               transition: LINEAR 0.2;
-                       }
-                       program {
-                               name: "hide,pd";
-                               source: "pd";
-                               signal: "close";
-                               action: STATE_SET "default" 0.0;
-                               target: "pd";
-                               target: "event,blocker";
-                               transition: LINEAR 0.1;
-                               after: "hide,pd,done";
-                       }
-
-                       program {
-                               name: "hide,pd,done";
-                               action: SIGNAL_EMIT "hide,done" "pd";
-                       }
-
-                       program {
-                               name: "event,blocker";
-                               source: "event,blocker";
-                               signal: "mouse,clicked,1";
-                               action: SIGNAL_EMIT "close" "pd";
-                       }
-
-                       program {
-                               name: "pd,close,pd";
-                               source: "viewer";
-                               signal: "mouse,clicked,1";
-                               action: SIGNAL_EMIT "close" "pd";
-                       }
-               }
-       }
-}
diff --git a/live.viewer/src/dlist.c b/live.viewer/src/dlist.c
deleted file mode 100644 (file)
index fa3082a..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#include "dlist.h"
-
-/*!
- * \brief
- * This dlist is called Modified Doubly Linked List.
- *
- * Noramlly, The dobule linked list contains address of previous and next element.
- * This dlist also contains them, but the tail element only contains prev address.
- *
- * The head element's prev pointer indicates the last element.
- * But the last element's next pointer indicates NIL.
- *
- * So we can find the last element while crawling this DList
- * But we have to remember the address of the head element.
- */
-
-struct dlist {
-       struct dlist *next;
-       struct dlist *prev;
-       void *data;
-};
-
-struct dlist *dlist_append(struct dlist *list, void *data)
-{
-       struct dlist *item;
-
-       item = malloc(sizeof(*item));
-       if (!item)
-               return NULL;
-
-       item->next = NULL;
-       item->data = data;
-
-       if (!list) {
-               item->prev = item;
-
-               list = item;
-       } else {
-               item->prev = list->prev;
-               item->prev->next = item;
-               list->prev = item;
-       }
-
-       assert(!list->prev->next && "item NEXT");
-
-       return list;
-}
-
-struct dlist *dlist_prepend(struct dlist *list, void *data)
-{
-       struct dlist *item;
-
-       item = malloc(sizeof(*item));
-       if (!item)
-               return NULL;
-
-       item->data = data;
-
-       if (!list) {
-               item->prev = item;
-               item->next = NULL;
-       } else {
-               if (list->prev->next)
-                       list->prev->next = item;
-
-               item->prev = list->prev;
-               item->next = list;
-
-               list->prev = item;
-
-       }
-
-       return item;
-}
-
-struct dlist *dlist_remove(struct dlist *list, struct dlist *l)
-{
-       if (!list || !l)
-               return NULL;
-
-       if (l == list)
-               list = l->next;
-       else
-               l->prev->next = l->next;
-
-       if (l->next)
-               l->next->prev = l->prev;
-       /*!
-        * \note
-        * If the removed entry 'l' has no next element, it is the last element.
-        * In this case, check the existence of the list first,
-        * and if the list is not empty, update the 'prev' of the list (which is a head element of the list) 
-        *
-        * If we didn't care about this, the head element(list) can indicates the invalid element.
-        */
-       else if (list)
-               list->prev = l->prev;
-
-       free(l);
-       return list;
-}
-
-struct dlist *dlist_find_data(struct dlist *list, void *data)
-{
-       struct dlist *l;
-       void *_data;
-
-       dlist_foreach(list, l, _data) {
-               if (data == _data)
-                       return l;
-       }
-
-       return NULL;
-}
-
-void *dlist_data(struct dlist *l)
-{
-       return l ? l->data : NULL;
-}
-
-struct dlist *dlist_next(struct dlist *l)
-{
-       return l ? l->next : NULL;
-}
-
-struct dlist *dlist_prev(struct dlist *l)
-{
-       return l ? l->prev : NULL;
-}
-
-int dlist_count(struct dlist *l)
-{
-       register int i;
-       struct dlist *n;
-       void *data;
-
-       i = 0;
-       dlist_foreach(l, n, data) {
-               i++;
-       }
-
-       return i;
-}
-
-struct dlist *dlist_nth(struct dlist *l, int nth)
-{
-       register int i;
-       struct dlist *n;
-
-       i = 0;
-       for (n = l; n; n = n->next) {
-               if (i == nth)
-                       return n;
-               i++;
-       }
-
-       return NULL;
-}
-
-/* End of a file */
diff --git a/live.viewer/src/lb.c b/live.viewer/src/lb.c
deleted file mode 100644 (file)
index 9870b4a..0000000
+++ /dev/null
@@ -1,966 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <Ecore_X.h>
-
-#include <dlog.h>
-
-#include <livebox.h>
-#include <livebox-service.h>
-
-#include "main.h"
-#include "util.h"
-#include "debug.h"
-#include "lb.h"
-#include "scroller.h"
-
-#define FLICK_COND     100
-
-static Evas_Object *create_canvas(Evas_Object *parent)
-{
-       Evas_Object *canvas;
-
-       canvas = evas_object_image_add(evas_object_evas_get(parent));
-       if (!canvas)
-               return NULL;
-
-       evas_object_image_content_hint_set(canvas, EVAS_IMAGE_CONTENT_HINT_DYNAMIC);
-       evas_object_image_colorspace_set(canvas, EVAS_COLORSPACE_ARGB8888);
-       evas_object_image_alpha_set(canvas, EINA_TRUE);
-       evas_object_move(canvas, 0, 0);
-       return canvas;
-}
-
-static int update_pd_canvas(struct livebox *handle, Evas_Object *image)
-{
-       Evas_Native_Surface surface;
-       int w;
-       int h;
-
-       DbgPrint("Updated\n");
-
-       switch (livebox_pd_type(handle)) {
-       case PD_TYPE_PIXMAP:
-               h = w = 0;
-               livebox_get_pdsize(handle, &w, &h);
-               if (w <= 0 || h <= 0)
-                       break;
-
-               //evas_object_image_size_set(image, w, h);
-
-               DbgPrint("Update: %dx%d\n", w, h);
-               surface.version = EVAS_NATIVE_SURFACE_VERSION;
-               surface.type = EVAS_NATIVE_SURFACE_X11;
-               surface.data.x11.pixmap = livebox_pd_pixmap(handle);
-               surface.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
-               evas_object_image_native_surface_set(image, &surface);
-
-               evas_object_image_data_update_add(image, 0, 0, w, h);
-               evas_object_size_hint_max_set(image, w, h);
-               evas_object_resize(image, w, h);
-               evas_object_show(image);
-               break;
-       case PD_TYPE_BUFFER:
-               livebox_get_pdsize(handle, &w, &h);
-               if (w > 0 && h > 0) {
-                       void *data;
-
-                       data = livebox_acquire_pdfb(handle);
-                       if (data) {
-                               evas_object_image_data_set(image, NULL);
-                               evas_object_image_colorspace_set(image, EVAS_COLORSPACE_ARGB8888);
-                               evas_object_image_alpha_set(image, EINA_TRUE);
-                               evas_object_image_size_set(image, w, h);
-                               evas_object_image_smooth_scale_set(image, EINA_TRUE);
-                               evas_object_image_data_copy_set(image, data);
-                               evas_object_image_data_update_add(image, 0, 0, w, h);
-                               livebox_release_pdfb(data);
-                       }
-                       evas_object_resize(image, w, h);
-                       //evas_object_size_hint_min_set(image, w, h);
-                       evas_object_size_hint_max_set(image, w, h);
-               }
-               break;
-       case PD_TYPE_TEXT:
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static int update_canvas(struct livebox *handle, Evas_Object *image)
-{
-       Evas_Native_Surface surface;
-       const char *filename;
-       int w;
-       int h;
-       int type;
-
-       DbgPrint("Updated\n");
-
-       switch (livebox_lb_type(handle)) {
-       case LB_TYPE_PIXMAP:
-               w = h = 0;
-               type = livebox_size(handle);
-               livebox_service_get_size(type, &w, &h);
-               if (w <= 0 || h <= 0)
-                       break;
-
-               DbgPrint("Update: %dx%d\n", w, h);
-
-               //evas_object_image_size_set(image, w, h);
-
-               surface.version = EVAS_NATIVE_SURFACE_VERSION;
-               surface.type = EVAS_NATIVE_SURFACE_X11;
-               surface.data.x11.pixmap = livebox_lb_pixmap(handle);
-               surface.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
-               evas_object_image_native_surface_set(image, &surface);
-
-               evas_object_image_data_update_add(image, 0, 0, w, h);
-
-               evas_object_resize(image, w, h);
-               evas_object_size_hint_min_set(image, w, h);
-               evas_object_size_hint_max_set(image, w, h);
-               evas_object_show(image);
-               break;
-       case LB_TYPE_BUFFER:
-               w = h = 0;
-               type = livebox_size(handle);
-               livebox_service_get_size(type, &w, &h);
-               if (w > 0 && h > 0) {
-                       void *data;
-                       data = livebox_acquire_fb(handle);
-                       if (data) {
-                               evas_object_image_data_set(image, NULL);
-                               evas_object_image_colorspace_set(image, EVAS_COLORSPACE_ARGB8888);
-                               evas_object_image_alpha_set(image, EINA_TRUE);
-                               evas_object_image_size_set(image, w, h);
-                               evas_object_image_smooth_scale_set(image, EINA_TRUE);
-                               evas_object_image_data_copy_set(image, data);
-                               evas_object_image_data_update_add(image, 0, 0, w, h);
-                               livebox_release_fb(data);
-                       }
-                       evas_object_resize(image, w, h);
-                       evas_object_size_hint_min_set(image, w, h);
-                       evas_object_size_hint_max_set(image, w, h);
-               }
-               break;
-       case LB_TYPE_IMAGE:
-               filename = livebox_filename(handle);
-               if (filename) {
-                       const char *old;
-                       evas_object_image_file_get(image, &old, NULL);
-                       if (old && !strcmp(filename, old)) {
-                               evas_object_image_reload(image);
-                       } else {
-                               evas_object_image_file_set(image, filename, NULL);
-                       }
-
-                       w = h = 0;
-                       type = livebox_size(handle);
-                       livebox_service_get_size(type, &w, &h);
-                       if (w > 0 && h > 0) {
-                               evas_object_resize(image, w, h);
-                               evas_object_size_hint_min_set(image, w, h);
-                               evas_object_size_hint_max_set(image, w, h);
-                       }
-               }
-               break;
-       case LB_TYPE_TEXT:
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static inline void prepend_log(struct livebox *handle, const char *buffer)
-{
-       Evas_Object *layout;
-       Evas_Object *logger;
-
-       layout = livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout\n");
-               return;
-       }
-
-       logger = elm_object_part_content_get(layout, "logger");
-       if (logger)
-               elm_list_item_prepend(logger, buffer, NULL, NULL, NULL, NULL);
-}
-
-static int lb_event_cb(struct livebox *handle, enum livebox_event_type event, void *data)
-{
-       Evas_Object *layout;
-       Evas_Object *sc;
-       Evas_Object *pd;
-       Evas_Object *image;
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout)
-               return -EFAULT;
-
-       switch (event) {
-       case LB_EVENT_LB_UPDATED:
-               DbgPrint("Contents: [%s]\n", livebox_content(handle));
-               image = elm_object_part_content_get(layout, "livebox");
-               if (image)
-                       update_canvas(handle, image);
-               break;
-       case LB_EVENT_PD_UPDATED:
-               image = elm_object_part_content_get(layout, "pd");
-               if (image)
-                       update_pd_canvas(handle, image);
-               break;
-       case LB_EVENT_DELETED:
-               sc = evas_object_data_del(layout, "sc");
-               if (sc)
-                       scroller_peek_by_obj(sc, layout);
-
-               evas_object_del(layout);
-               break;
-       case LB_EVENT_PD_DESTROYED:
-               pd = elm_object_part_content_unset(layout, "pd");
-               if (pd)
-                       evas_object_del(pd);
-
-               sc = evas_object_data_del(layout, "sc");
-               if (sc)
-                       scroller_unlock(sc);
-               break;
-       default:
-               break;
-       }
-
-       return 0;
-}
-
-static int lb_fault_cb(enum livebox_fault_type event,
-                                       const char *pkgname, const char *filename,
-                                       const char *funcname, void *data)
-{
-       DbgPrint("pkgname: %s\nfilename: %s\n:funcname: %s\n", pkgname, filename, funcname);
-       return 0;
-}
-
-static void del_cb(struct livebox *handle, int ret, void *data)
-{
-       Evas_Object *layout = data;
-       Evas_Object *sc;
-
-       sc = evas_object_data_del(layout, "sc");
-       if (sc) {
-               DbgPrint("Scroller: %p\n", sc);
-               scroller_peek_by_obj(sc, layout);
-       }
-
-       DbgPrint("Delete a layout object\n");
-       evas_object_del(layout);
-}
-
-static void delete_btn_cb(void *handle, Evas_Object *obj, void *event_info)
-{
-       int ret;
-       Evas_Object *layout;
-       layout = livebox_get_data(handle);
-       DbgPrint("Livebox Get Data %p - %p\n", handle, layout);
-       ret = livebox_del(handle, del_cb, layout);
-       if (ret < 0) {
-               char buffer[256];
-               snprintf(buffer, sizeof(buffer), "Delete returns: %d\n", ret);
-               prepend_log(handle, buffer);
-       }
-}
-
-static void error_popup(Evas_Object *parent, struct livebox *handle, int ret)
-{
-       ErrPrint("Failed to add a box: %d\n", ret);
-       return;
-}
-
-static void resize_cb(struct livebox *handle, int ret, void *data)
-{
-       Evas_Object *layout;
-       Evas_Object *log_list;
-       char buffer[256];
-
-       layout = livebox_get_data(handle);
-       if (!layout)
-               return;
-
-       log_list = elm_object_part_content_get(layout, "logger");
-       if (!log_list)
-               return;
-
-       snprintf(buffer, sizeof(buffer) - 1, "Resize: %d", ret);
-       elm_list_item_prepend(log_list, buffer, NULL, NULL, NULL, NULL);
-}
-
-static void resize_click_cb(void *handle, Evas_Object *obj, void *event_info)
-{
-       Elm_Object_Item *item;
-       const char *label;
-       int w;
-       int h;
-       int size_type;
-
-       item = elm_list_selected_item_get(obj);
-       if (!item)
-               return;
-
-       label = elm_object_item_part_text_get(item, NULL);
-       if (!label)
-               return;
-
-       sscanf(label, "%dx%d", &w, &h);
-       size_type = livebox_service_size_type(w, h);
-
-       livebox_resize(handle, size_type, resize_cb, NULL);
-}
-
-static void create_resize_controller(struct livebox *handle, Evas_Object *layout)
-{
-       Evas_Object *size_list;
-       char buffer[256];
-       int sizes[NR_OF_SIZE_LIST];
-       int cnt;
-       int i;
-       int w;
-       int h;
-
-       size_list = elm_list_add(layout);
-       cnt = sizeof(sizes) / sizeof(sizes[0]);
-       livebox_get_supported_sizes(handle, &cnt, sizes);
-       for (i = 0; i < cnt; i++) {
-               livebox_service_get_size(sizes[i], &w, &h);
-               snprintf(buffer, sizeof(buffer) - 1, "%dx%d", w, h);
-
-               elm_list_item_append(size_list, buffer, NULL, NULL, resize_click_cb, handle);
-       }
-       evas_object_show(size_list);
-       elm_list_go(size_list);
-       evas_object_size_hint_weight_set(size_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(size_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_object_part_content_set(layout, "controller", size_list);
-}
-
-static void create_logger(struct livebox *handle, Evas_Object *layout)
-{
-       Evas_Object *log_list;
-
-       log_list = elm_list_add(layout);
-       if (!log_list)
-               return;
-
-       elm_list_item_prepend(log_list, "Created", NULL, NULL, NULL, NULL);
-       evas_object_show(log_list);
-       elm_list_go(log_list);
-
-       evas_object_size_hint_weight_set(log_list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(log_list, EVAS_HINT_FILL, EVAS_HINT_FILL);
-       elm_object_part_content_set(layout, "logger", log_list);
-}
-
-struct event_data {
-       Evas_Coord x;
-       Evas_Coord y;
-
-       enum flick {
-               FLICK_UNKNOWN = 0x00,
-               FLICK_DOWN = 0x01,
-               FLICK_UP = 0x02,
-       } flick;
-};
-
-static void pd_closed_cb(struct livebox *handle, int ret, void *data)
-{
-       evas_object_del(data);
-}
-
-static void pd_hide_done_cb(void *data, Evas_Object *obj, const char *emission, const char *source) 
-{
-       Evas_Object *pd;
-       Evas_Object *sc;
-
-       sc = evas_object_data_get(obj, "sc");
-       scroller_unlock(sc);
-
-       elm_object_signal_callback_del(obj, emission, source, pd_hide_done_cb);
-       pd = elm_object_part_content_unset(obj, "pd");
-       livebox_destroy_pd(data, pd_closed_cb, pd);
-}
-
-static void pd_mouse_up_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Up *up = event_info;
-       Evas_Coord x, y, w, h;
-       double rx, ry;
-
-       evas_object_geometry_get(obj, &x, &y, &w, &h);
-
-       rx = (double)(up->canvas.x - x) / (double)w;
-       ry = (double)(up->canvas.y - y) / (double)h;
-       DbgPrint("%dx%d - %dx%d, %lfx%lf\n", x, y, w, h, rx, ry);
-       livebox_content_event(handle, PD_MOUSE_UP, rx, ry);
-}
-
-static void pd_mouse_down_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Down *down = event_info;
-       Evas_Coord x, y, w, h;
-       double rx, ry;
-
-       evas_object_geometry_get(obj, &x, &y, &w, &h);
-       rx = (double)(down->canvas.x - x) / (double)w;
-       ry = (double)(down->canvas.y - y) / (double)h;
-       DbgPrint("%dx%d - %dx%d, %lfx%lf\n", x, y, w, h, rx, ry);
-       livebox_content_event(handle, PD_MOUSE_DOWN, rx, ry);
-}
-
-static void pd_mouse_move_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Move *move = event_info;
-       Evas_Coord x, y, w, h;
-       double rx, ry;
-
-       evas_object_geometry_get(obj, &x, &y, &w, &h);
-       rx = (double)(move->cur.canvas.x - x) / (double)w;
-       ry = (double)(move->cur.canvas.y - y) / (double)h;
-       DbgPrint("%dx%d - %dx%d, %lfx%lf\n", x, y, w, h, rx, ry);
-       livebox_content_event(handle, PD_MOUSE_MOVE, rx, ry);
-}
-
-static void pd_created_cb(struct livebox *handle, int ret, void *data)
-{
-       Evas_Object *layout;
-       Evas_Object *pd_image;
-       Evas_Object *sc;
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout)
-               return;
-
-       sc = evas_object_data_get(layout, "sc");
-
-       pd_image = create_canvas(layout);
-       if (!pd_image)
-               return;
-
-       evas_object_event_callback_add(pd_image, EVAS_CALLBACK_MOUSE_UP, pd_mouse_up_cb, handle);
-       evas_object_event_callback_add(pd_image, EVAS_CALLBACK_MOUSE_DOWN, pd_mouse_down_cb, handle);
-       evas_object_event_callback_add(pd_image, EVAS_CALLBACK_MOUSE_MOVE, pd_mouse_move_cb, handle);
-
-       update_pd_canvas(handle, pd_image);
-
-       elm_object_signal_callback_add(layout, "hide,done", "pd", pd_hide_done_cb, handle);
-       elm_object_part_content_set(layout, "pd", pd_image);
-       elm_object_signal_emit(layout, "open", "pd");
-       scroller_lock(sc);
-}
-
-static void lb_mouse_up_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Up *up = event_info;
-       Evas_Coord x, y, w, h;
-       struct event_data *evt;
-
-       evt = evas_object_data_del(obj, "evt");
-       if (!evt)
-               return;
-
-       evas_object_geometry_get(obj, &x, &y, &w, &h);
-
-       if (livebox_lb_type(handle) == LB_TYPE_PIXMAP || livebox_lb_type(handle) == LB_TYPE_BUFFER) {
-               double rx, ry;
-               rx = (double)(up->canvas.x - x) / (double)w;
-               ry = (double)(up->canvas.y - y) / (double)h;
-               livebox_content_event(handle, LB_MOUSE_UP, rx, ry);
-       }
-
-       if (x < up->canvas.x && up->canvas.x < x + w) {
-               if (y < up->canvas.y && up->canvas.y < y + h) {
-                       livebox_click(handle, (double)x / (double)w, (double)y / (double)h);
-               }
-       }
-
-       if (evt->flick == FLICK_DOWN && (up->canvas.y - evt->y) > (FLICK_COND>>1)) {
-               int ret;
-               /* Open PD */
-               ret = livebox_create_pd_with_position(handle, 0.5, 0.0, pd_created_cb, NULL);
-       }
-
-       free(evt);
-}
-
-static void lb_mouse_down_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       struct event_data *evt;
-       Evas_Event_Mouse_Down *down = event_info;
-       Evas_Object *layout;
-       Evas_Object *sc;
-
-       layout = livebox_get_data(handle);
-       if (!layout)
-               return;
-
-       sc = evas_object_data_get(layout, "sc");
-       if (!sc)
-               return;
-
-       if (scroller_is_scrolling(sc))
-               return;
-
-       if (livebox_lb_type(handle) == LB_TYPE_PIXMAP || livebox_lb_type(handle) == LB_TYPE_BUFFER) {
-               Evas_Coord x, y, w, h;
-               double rx, ry;
-
-               evas_object_geometry_get(obj, &x, &y, &w, &h);
-               rx = (double)(down->canvas.x - x) / (double)w;
-               ry = (double)(down->canvas.y - y) / (double)h;
-               livebox_content_event(handle, LB_MOUSE_DOWN, rx, ry);
-       }
-
-       evt = evas_object_data_get(obj, "evt");
-       if (evt) {
-               ErrPrint("Huh?");
-       } else {
-               evt = malloc(sizeof(*evt));
-               if (!evt) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       return;
-               }
-       }
-
-       evas_object_data_set(obj, "evt", evt);
-
-       evt->x = down->canvas.x;
-       evt->y = down->canvas.y;
-       evt->flick = FLICK_UNKNOWN;
-}
-
-static void lb_mouse_move_cb(void *handle, Evas *e, Evas_Object *obj, void *event_info)
-{
-       Evas_Event_Mouse_Move *move = event_info;
-       struct event_data *evt;
-
-       evt = evas_object_data_get(obj, "evt");
-       if (!evt)
-               return;
-
-       if (livebox_lb_type(handle) == LB_TYPE_PIXMAP || livebox_lb_type(handle) == LB_TYPE_BUFFER) {
-               Evas_Coord x, y, w, h;
-               double rx, ry;
-
-               evas_object_geometry_get(obj, &x, &y, &w, &h);
-               rx = (double)(move->cur.canvas.x - x) / (double)w;
-               ry = (double)(move->cur.canvas.y - y) / (double)h;
-               livebox_content_event(handle, LB_MOUSE_MOVE, rx, ry);
-       }
-
-       if ((move->cur.canvas.x - move->prev.canvas.x) > FLICK_COND) {
-               evt->flick = FLICK_UNKNOWN;
-               return;
-       } else if ((move->cur.canvas.x - move->prev.canvas.x) < -FLICK_COND) {
-               evt->flick = FLICK_UNKNOWN;
-               return;
-       }
-
-       if ((move->cur.canvas.y - move->prev.canvas.y) > 0) {
-               if (evt->flick != FLICK_DOWN)
-                       evt->flick = FLICK_DOWN;
-       } else if ((move->cur.canvas.y - move->prev.canvas.y) < 0) {
-               if (evt->flick != FLICK_UP)
-                       evt->flick = FLICK_UP;
-       }
-}
-
-static int lb_update_begin(struct livebox *handle)
-{
-       DbgPrint("%p\n", handle);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "begin");
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-
-       return 0;
-}
-
-static int lb_update_end(struct livebox *handle)
-{
-       DbgPrint("%p\n", handle);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "end");
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-
-       return 0;
-}
-
-static int lb_update_text(struct livebox *handle, const char *id, const char *part, const char *data)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], part[%s], data[%s]\n", id, part, data);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s=%s", part, data);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-
-       return 0;
-}
-
-static int lb_update_image(struct livebox *handle, const char *id, const char *part, const char *data)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], part[%s], data[%s]\n", id, part, data);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s=%s", part, data);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-
-       return 0;
-}
-
-static int lb_update_script(struct livebox *handle, const char *id, const char *part, const char *file, const char *group)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], part[%s], file[%s], group[%s]\n", id, part, file, group);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s=%s, %s", part, file, group);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-
-       return 0;
-}
-
-static int lb_update_signal(struct livebox *handle, const char *id, const char *emission, const char *signal)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], emission[%s], signal[%s]\n", id, emission, signal);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s,%s", emission, signal);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-       return 0;
-}
-
-static int lb_update_drag(struct livebox *handle, const char *id, const char *part, double dx, double dy)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], part[%s], pos[%lfx%lf]\n", id, part, dx, dy);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s=%lfx%lf", part, dx, dy);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-       return 0;
-}
-
-static int lb_update_info_size(struct livebox *handle, const char *id, int w, int h)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], size[%dx%d]\n", id, w, h);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%dx%d", w, h);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-       return 0;
-}
-
-static int lb_update_info_category(struct livebox *handle, const char *id, const char *category)
-{
-       DbgPrint("%p\n", handle);
-       DbgPrint("id: [%s], category: [%s]\n", id, category);
-
-       Evas_Object *layout;
-       Evas_Object *list;
-       char buffer[80];
-
-       layout = (Evas_Object *)livebox_get_data(handle);
-       if (!layout) {
-               ErrPrint("Failed to get layout object\n");
-               return 0;
-       }
-
-       list = elm_object_part_content_get(layout, "livebox");
-       if (!list) {
-               ErrPrint("Failed to get list\n");
-               return 0;
-       }
-
-       snprintf(buffer, sizeof(buffer), "%s=%s", id, category);
-       elm_list_item_prepend(list, buffer, NULL, NULL, NULL, NULL);
-       return 0;
-}
-
-static void livebox_added_cb(struct livebox *handle, int ret, void *data)
-{
-       Evas_Object *layout;
-       Evas_Object *btn;
-       int w;
-       int h;
-       int type;
-       int idx;
-
-       DbgPrint("%s - %d\n", livebox_pkgname(handle), ret);
-
-       if (ret != 0) {
-               error_popup(main_get_window(), handle, ret);
-               return;
-       }
-
-       layout = elm_layout_add(main_get_window());
-       if (!layout) {
-               ErrPrint("Failed to add a layout\n");
-               return;
-       }
-
-       if (elm_layout_file_set(layout, PKGROOT "/res/edje/live-viewer.edj", "layout") == EINA_FALSE) {
-               DbgPrint("Failed to add a layout\n");
-               evas_object_del(layout);
-               return;
-       }
-
-       if (livebox_lb_type(handle) == LB_TYPE_TEXT) {
-               Evas_Object *list;
-               static struct livebox_script_operators ops = {
-                       .update_begin = lb_update_begin,
-                       .update_end = lb_update_end,
-                       .update_text = lb_update_text,
-                       .update_image = lb_update_image,
-                       .update_script = lb_update_script,
-                       .update_signal = lb_update_signal,
-                       .update_drag = lb_update_drag,
-                       .update_info_size = lb_update_info_size,
-                       .update_info_category = lb_update_info_category,
-               };
-
-               list = elm_list_add(layout);
-               if (!list) {
-                       evas_object_del(layout);
-                       return;
-               }
-
-               (void)livebox_set_text_handler(handle, &ops);
-               elm_object_part_content_set(layout, "livebox", list);
-               elm_list_go(list);
-       } else {
-               Evas_Object *lb_image;
-               lb_image = create_canvas(layout);
-               if (!lb_image) {
-                       ErrPrint("Failed to create a canvas\n");
-                       evas_object_del(layout);
-                       return;
-               }
-
-               evas_object_event_callback_add(lb_image, EVAS_CALLBACK_MOUSE_UP, lb_mouse_up_cb, handle);
-               evas_object_event_callback_add(lb_image, EVAS_CALLBACK_MOUSE_DOWN, lb_mouse_down_cb, handle);
-               evas_object_event_callback_add(lb_image, EVAS_CALLBACK_MOUSE_MOVE, lb_mouse_move_cb, handle);
-
-               w = 0;
-               h = 0;
-               type = livebox_size(handle);
-               if (type != LB_SIZE_TYPE_UNKNOWN) {
-                       livebox_service_get_size(type, &w, &h);
-                       DbgPrint("%dx%d\n", w, h);
-               }
-               evas_object_resize(lb_image, w, h);
-               evas_object_show(lb_image);
-
-               update_canvas(handle, lb_image);
-
-               btn = elm_button_add(main_get_window());
-               if (btn) {
-                       elm_object_text_set(btn, "Delete");
-                       evas_object_smart_callback_add(btn, "clicked", delete_btn_cb, handle);
-                       elm_object_part_content_set(layout, "delete,btn", btn);
-               }
-
-               elm_object_part_content_set(layout, "livebox", lb_image);
-       }
-       evas_object_resize(layout, 720, 1280);
-       evas_object_show(layout);
-
-       create_resize_controller(handle, layout);
-       create_logger(handle, layout);
-
-       livebox_set_data(handle, layout);
-       DbgPrint("Livebox Set Data: %p - %p\n", handle, layout);
-       evas_object_data_set(layout, "sc", data);
-
-       scroller_append(data, layout);
-
-       idx = scroller_get_page_index(data, layout);
-       DbgPrint("Scroll to %d\n", idx);
-       scroller_scroll_to(data, idx);
-}
-
-int lb_add(Evas_Object *sc, const char *pkgname)
-{
-       int w, h;
-       struct livebox *handle;
-
-       evas_object_geometry_get(sc, NULL, NULL, &w, &h);
-
-       DbgPrint("sc: %dx%d, package: %s\n", w, h, pkgname);
-       livebox_activate(pkgname, NULL, NULL);
-
-       handle = livebox_add(pkgname, "default", "user,created", "default",
-                                               DEFAULT_PERIOD, livebox_added_cb, sc);
-       if (!handle) {
-               ErrPrint("Failed to add a new livebox\n");
-               return -EFAULT;
-       }
-
-       return 0;
-}
-
-int lb_init(void)
-{
-       livebox_init(ecore_x_display_get());
-       livebox_set_event_handler(lb_event_cb, NULL);
-       livebox_set_fault_handler(lb_fault_cb, NULL);
-       return 0;
-}
-
-int lb_fini(void)
-{
-       livebox_fini();
-       return 0;
-}
-
-/* End of a file */
diff --git a/live.viewer/src/live_scroller.c b/live.viewer/src/live_scroller.c
deleted file mode 100644 (file)
index 2b88939..0000000
+++ /dev/null
@@ -1,1457 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-
-#include <dlog.h>
-
-#include "live_scroller.h"
-#include "util.h"
-#include "debug.h"
-
-#define SAMPLE_MAX 10
-#define EVT_PERIOD 0.016 /* 60 fps */
-#define EVT_SAMPLE_PERIOD 9
-#define DRAG_SENS 100
-#define ANIM_MIN 40
-#define ANIM_UNIT 15
-
-struct item_list_entry {
-       struct item_list_entry *prev;
-       struct item_list_entry *next;
-
-       Evas_Object *data;
-       Evas_Coord x;
-       Evas_Coord y;
-       Evas_Coord w;
-       Evas_Coord h;
-};
-
-struct evt_info {
-       Evas_Coord x;
-       unsigned int timestamp;
-};
-
-struct evt_queue {
-       struct evt_info ei[SAMPLE_MAX];
-       int front;
-       int rear;
-       int cnt;
-       unsigned int old_timestamp;
-};
-
-struct widget_data {
-       Eina_Bool is_loop;
-       Eina_Bool is_freezed;
-
-       struct item_list_entry *item_list;
-
-       int item_cnt;
-       struct item_list_entry *curlist;
-       struct item_list_entry *tolist;
-
-       Eina_Bool drag_started;
-       Eina_Bool is_pressed;
-       Evas_Coord press_x;
-       Evas_Coord press_y;
-
-       Ecore_Timer *sc_anim_timer;
-       int sc_anim_dx;
-
-       Evas_Object *clip;
-       Evas_Object *evt_layer;
-       Evas_Object *scroller;
-
-       Evas_Coord clip_bx;
-       Evas_Coord clip_bw;
-
-       struct evt_queue evtq;
-       Ecore_Timer *evt_emulator;
-       Evas_Coord old_x;
-       unsigned int prev_timestamp;
-};
-
-#ifdef PROFILE
-#define PROFILE_START() \
-static int _exec_cnt = 0; \
-struct timeval _stv, _etv; \
-long _elapsed; \
-gettimeofday(&_stv, NULL);
-
-#define PROFILE_END() \
-do { \
-       _exec_cnt++; \
-       gettimeofday(&_etv, NULL); \
-       _elapsed = (_etv.tv_sec - _stv.tv_sec) * 1000000l + (_etv.tv_usec - _stv.tv_usec); \
-       DbgPrint("[%d] Elapsed time: %lu\n", _exec_cnt, _elapsed); \
-} while (0)
-#else
-#define PROFILE_START()
-#define PROFILE_END()
-#endif
-
-#define LIST_NEXT(list)        ((list)->next)
-#define LIST_PREV(list)        ((list)->prev)
-#define LIST_DATA(list)        ((list) ? (list)->data : NULL)
-
-static inline void LIST_ITEM_GEO_SET(struct item_list_entry *list, int x, int y, int w, int h)
-{
-       list->x = x;
-       list->y = y;
-       list->w = w;
-       list->h = h;
-}
-
-static inline void LIST_ITEM_GEO_GET(struct item_list_entry *list, int *x, int *y, int *w, int *h)
-{
-       if (x)
-               *x = list->x;
-       if (y)
-               *y = list->y;
-       if (w)
-               *w = list->w;
-       if (h)
-               *h = list->h;
-}
-
-static inline struct item_list_entry *list_item_append(struct item_list_entry *list, void *obj)
-{
-       struct item_list_entry *item;
-
-       item = malloc(sizeof(*item));
-       if (!item)
-               return NULL;
-
-       item->data = obj;
-
-       if (list) {
-               list->prev->next = item;
-               item->prev = list->prev;
-
-               item->next = list;
-               list->prev = item;
-       } else{
-               item->prev = item;
-               item->next = item;
-               list = item;
-       }
-
-       return list;
-}
-
-static inline void *list_item_nth(struct item_list_entry *list, int idx)
-{
-       if (!list)
-               return NULL;
-
-       while (--idx >= 0)
-               list = list->next;
-
-       return list->data;
-}
-
-static inline struct item_list_entry *list_item_nth_list(struct item_list_entry *list, int idx)
-{
-       if (!list)
-               return NULL;
-
-       while (--idx >= 0)
-               list = list->next;
-
-       return list;
-}
-
-static inline struct item_list_entry *list_item_find(struct item_list_entry *list, void *data)
-{
-       struct item_list_entry *item;
-
-       if (!list)
-               return NULL;
-
-       item = list;
-       do {
-               if (LIST_DATA(item) == data)
-                       return item;
-
-               item = LIST_NEXT(item);
-       } while (item != list);
-
-       return NULL;
-}
-
-static inline struct item_list_entry *list_item_remove(struct item_list_entry *list, void *data)
-{
-       struct item_list_entry *item;
-
-       if (!list) {
-               ErrPrint("List is not valid\n");
-               return NULL;
-       }
-
-       DbgPrint("Start\n");
-       item = list;
-       do {
-               if (LIST_DATA(item) == data) {
-                       DbgPrint("ITEM is removed\n");
-                       if (item == list) {
-                               if (list == LIST_NEXT(list))
-                                       list = NULL;
-                               else
-                                       list = LIST_NEXT(list);
-                       }
-
-                       item->prev->next = item->next;
-                       item->next->prev = item->prev;
-                       free(item);
-                       break;
-               }
-
-               item = LIST_NEXT(item);
-       } while (item != list);
-       DbgPrint("End\n");
-
-       return list;
-}
-
-static inline void *list_item_last(struct item_list_entry *list)
-{
-       if (!list)
-               return NULL;
-
-       return list->prev->data;
-}
-
-static inline struct item_list_entry *list_item_last_list(struct item_list_entry *list)
-{
-       if (!list)
-               return NULL;
-
-       return list->prev;
-}
-
-static inline int list_item_count(struct item_list_entry *list)
-{
-       struct item_list_entry *n;
-       int cnt;
-
-       if (!list)
-               return 0;
-
-       cnt = 0;
-       n = list;
-       do {
-               cnt++;
-               n = LIST_NEXT(n);
-       } while (n != list);
-
-       return cnt;
-}
-
-static inline int list_item_idx(struct widget_data *sc_data, struct item_list_entry *ilist)
-{
-       int idx;
-       idx = 0;
-
-       while (ilist != sc_data->item_list) {
-               idx++;
-               ilist = LIST_PREV(ilist);
-       }
-
-       return idx;
-}
-
-static inline void init_evtq(struct evt_queue *evtq)
-{
-       evtq->front = 0;
-       evtq->rear = 0;
-       evtq->cnt = 0;
-       evtq->old_timestamp = 0;
-}
-
-static inline void dq_evt(struct evt_queue *evtq)
-{
-       if (evtq->cnt <= 0)
-               return;
-       evtq->front++;
-       if (evtq->front >= SAMPLE_MAX)
-               evtq->front -= SAMPLE_MAX;
-       evtq->cnt--;
-}
-
-static inline void enq_evt(struct evt_queue *evtq, Evas_Coord x, unsigned int timestamp)
-{
-       unsigned int t_diff;
-       int replace;
-
-       replace = 0;
-       t_diff = timestamp - evtq->old_timestamp;
-
-       if (evtq->cnt <= 0)
-               evtq->old_timestamp = timestamp;
-       else if (t_diff > EVT_SAMPLE_PERIOD)
-               evtq->old_timestamp += EVT_SAMPLE_PERIOD * (t_diff / EVT_SAMPLE_PERIOD);
-       else
-               replace = 1;
-
-       if (!replace) {
-               if (evtq->cnt >= SAMPLE_MAX)
-                       dq_evt(evtq);
-               evtq->rear++;
-               if (evtq->rear >= SAMPLE_MAX)
-                       evtq->rear -= SAMPLE_MAX;
-               evtq->cnt++;
-       }
-
-       evtq->ei[evtq->rear].x = x;
-       evtq->ei[evtq->rear].timestamp = evtq->old_timestamp;
-}
-
-static inline Evas_Coord get_evt_avg(struct evt_queue *evtq)
-{
-       int i;
-       int rear;
-       Evas_Coord x;
-       int weight;
-       int t;
-
-       t = (int)(ecore_time_get() * 1000);
-       rear = evtq->rear;
-
-       x = 0;
-       for (i = 0; i < evtq->cnt; i += weight) {
-               weight = (t - evtq->ei[rear].timestamp) / EVT_SAMPLE_PERIOD;
-               if (weight > (evtq->cnt - i))
-                       weight = evtq->cnt - i;
-               else
-                       weight = 1;
-
-               x += evtq->ei[rear].x * weight;
-               t = evtq->ei[rear].timestamp;
-               rear--;
-               if (rear < 0)
-                       rear += SAMPLE_MAX;
-       }
-
-       x /= evtq->cnt;
-       return x;
-}
-
-/* Move the item to given direction to fit its coordinates to border */
-static inline int calc_anim_dx_with_dir(struct widget_data *sc_data, int *dir)
-{
-       Evas_Coord x, w;
-
-       LIST_ITEM_GEO_GET(sc_data->curlist, &x, NULL, &w, NULL);
-       sc_data->sc_anim_dx = 0;
-
-       if (*dir < 0) {
-               DbgPrint("MOVE to LEFT\n");
-               if (x < sc_data->clip_bx) {
-                       (*dir)++;
-
-                       if (sc_data->tolist == sc_data->item_list) {
-                               if (!sc_data->is_loop) {
-                                       *dir = 0;
-                                       DbgPrint("Looping is disabled\n");
-                                       return -EINVAL;
-                               }
-                       }
-
-                       sc_data->tolist = LIST_PREV(sc_data->tolist);
-                       sc_data->sc_anim_dx = sc_data->clip_bx - x /*- w*/;
-               } else {
-                       sc_data->sc_anim_dx = sc_data->clip_bx - x;
-               }
-       } else if (*dir > 0) {
-               DbgPrint("MOVE to RIGHT\n");
-               if (x < sc_data->clip_bx) {
-                       sc_data->sc_anim_dx = sc_data->clip_bx - x;
-               } else if (x > sc_data->clip_bx) {
-                       struct item_list_entry *newlist;
-
-                       (*dir)--;
-                       newlist = LIST_NEXT(sc_data->tolist);
-                       if (newlist == sc_data->item_list) {
-                               if (!sc_data->is_loop) {
-                                       *dir = 0;
-                                       DbgPrint("Looping is disabled\n");
-                                       return -EINVAL;
-                               }
-                       }
-                       sc_data->tolist = newlist;
-                       sc_data->sc_anim_dx = sc_data->clip_bx - x; /*(sc_data->clip_bx + sc_data->clip_bw) - x;*/
-               }
-       }
-
-       return 0;
-}
-
-static inline void move_item(struct widget_data *sc_data, struct item_list_entry *ilist, int x, int y, int w, int h)
-{
-       struct live_sc_move_info info;
-
-       info.item = LIST_DATA(ilist);
-
-       info.relx = ((double)x - (double)sc_data->clip_bx) / (double)sc_data->clip_bw;
-
-       LIST_ITEM_GEO_SET(ilist, x, y, w, h);
-       info.x = x;
-       info.y = y;
-       info.w = w;
-       info.h = h;
-
-       evas_object_smart_callback_call(sc_data->scroller, "item,moved", &info);
-}
-
-static struct item_list_entry *update_items_geo(struct widget_data *sc_data, int dx)
-{
-       Evas_Coord sx, sw;
-       Evas_Coord y, w, h;
-       struct item_list_entry *ilist;
-       struct item_list_entry *newlist;
-       struct item_list_entry *boundary;
-       int bx_bw;
-       register int x;
-
-       LIST_ITEM_GEO_GET(sc_data->curlist, &sx, &y, &sw, &h);
-
-       bx_bw = sc_data->clip_bx + sc_data->clip_bw;
-
-       sx += dx;
-       move_item(sc_data, sc_data->curlist, sx, y, sw, h);
-
-       newlist = NULL;
-
-       if (sc_data->item_cnt < 3) {
-               ilist = LIST_NEXT(sc_data->curlist);
-               LIST_ITEM_GEO_GET(ilist, NULL, &y, &w, &h);
-
-               if (sx + sw < bx_bw) {
-                       x = sx + sw;
-                       move_item(sc_data, ilist, x, y, w, h);
-                       if (x == sc_data->clip_bx || (x < sc_data->clip_bx && (x + w) > sc_data->clip_bx))
-                               newlist = ilist;
-               } else if (sx > 0) {
-                       x = sx - w;
-                       move_item(sc_data, ilist, x, y, w, h);
-                       if (x == sc_data->clip_bx || (x > sc_data->clip_bx && x < bx_bw)) {
-                               newlist = ilist;
-                       }
-               }
-
-               goto out;
-       }
-
-       x = sx;
-       boundary = NULL;
-       ilist = sc_data->curlist;
-       do {
-               if (!sc_data->is_loop && ilist == sc_data->item_list)
-                       break;
-
-               ilist = LIST_PREV(ilist);
-               if (!ilist)
-                       break;
-
-               LIST_ITEM_GEO_GET(ilist, NULL, &y, &w, &h);
-               x -= w;
-               move_item(sc_data, ilist, x, y, w, h);
-
-               if (dx > 0 && !newlist) {
-                       if ((x == sc_data->clip_bx) || (x > sc_data->clip_bx && x < bx_bw))
-                               newlist = ilist;
-               }
-
-               boundary = ilist;
-       } while (x > sc_data->clip_bx);
-
-       x = sx;
-       w = sw;
-       ilist = sc_data->curlist;
-       do {
-               ilist = LIST_NEXT(ilist);
-               if (!ilist || (!sc_data->is_loop && ilist == sc_data->item_list) || ilist == boundary)
-                       break;
-
-               x += w;
-               LIST_ITEM_GEO_GET(ilist, NULL, &y, &w, &h);
-               move_item(sc_data, ilist, x, y, w, h);
-
-               if (dx < 0 && !newlist) {
-                       if ((x == sc_data->clip_bx) || (x < sc_data->clip_bx && (x + w) > sc_data->clip_bx))
-                               newlist = ilist;
-               }
-       } while (x < bx_bw);
-
-out:
-       if (newlist)
-               sc_data->curlist = newlist;
-               
-       return newlist;
-}
-
-static Eina_Bool emulate_evt(void *data)
-{
-       PROFILE_START();
-       struct widget_data *sc_data;
-       Evas_Coord x;
-       Evas_Coord dx;
-       struct item_list_entry *newlist;
-
-       sc_data = data;
-
-       x = get_evt_avg(&sc_data->evtq);
-       if (x == sc_data->old_x) {
-               PROFILE_END();
-               return ECORE_CALLBACK_RENEW;
-       }
-       
-       dx = x - sc_data->old_x;
-       sc_data->old_x = x;
-
-       newlist = update_items_geo(sc_data, dx);
-       if (newlist) {
-               int idx;
-
-               idx = list_item_idx(sc_data, newlist);
-               evas_object_smart_callback_call(sc_data->scroller, "page,changed", (void *)idx);
-       }
-       PROFILE_END();
-       return ECORE_CALLBACK_RENEW;
-}
-
-static void evt_mouse_down_cb(void *data, Evas *e, Evas_Object *evt_layer, void *event_info)
-{
-       Evas_Event_Mouse_Down *down;
-       struct widget_data *sc_data;
-
-       sc_data = data;
-       down = event_info;
-
-       sc_data->is_pressed = EINA_TRUE;
-       sc_data->press_x = down->canvas.x;
-       sc_data->press_y = down->canvas.y;
-       sc_data->old_x = down->canvas.x;
-
-       if (!sc_data->is_freezed) {
-               init_evtq(&sc_data->evtq);
-               enq_evt(&sc_data->evtq, down->canvas.x, down->timestamp);
-       }
-}
-
-static void evt_mouse_up_cb(void *data, Evas *e, Evas_Object *evt_layer, void *event_info)
-{
-       Evas_Event_Mouse_Up *up;
-       struct widget_data *sc_data;
-       struct live_sc_drag_info info;
-
-       sc_data = data;
-
-       if (!sc_data->is_pressed)
-               return;
-
-       sc_data->is_pressed = EINA_FALSE;
-
-       if (sc_data->evt_emulator) {
-               ecore_timer_del(sc_data->evt_emulator);
-               sc_data->evt_emulator = NULL;
-       }
-
-       if (sc_data->drag_started == EINA_FALSE) {
-               DbgPrint("drag is not started\n");
-               return;
-       }
-
-       up = event_info;
-
-       info.dx = up->canvas.x - sc_data->press_x;
-       info.dy = up->canvas.y - sc_data->press_y;
-
-       sc_data->drag_started = EINA_FALSE;
-
-       evas_object_smart_callback_call(sc_data->scroller, "drag,stop", &info);
-}
-
-static void evt_mouse_move_cb(void *data, Evas *e, Evas_Object *evt_layer, void *event_info)
-{
-       struct widget_data *sc_data;
-       Evas_Event_Mouse_Move *move;
-
-       sc_data = data;
-       
-       if (sc_data->is_pressed == EINA_FALSE)
-               return;
-
-       if (sc_data->item_cnt <= 1)
-               return;
-
-       if (sc_data->is_freezed)
-               return;
-
-       move = event_info;
-
-       if (sc_data->drag_started == EINA_FALSE) {
-               if (abs(move->cur.canvas.x - sc_data->press_x) < DRAG_SENS)
-                       return;
-
-               if (sc_data->sc_anim_timer) {
-                       ecore_timer_del(sc_data->sc_anim_timer);
-                       sc_data->sc_anim_timer = NULL;
-               }
-
-               evas_object_smart_callback_call(sc_data->scroller, "drag,start", NULL);
-               sc_data->drag_started = EINA_TRUE;
-       }
-
-       sc_data->prev_timestamp = move->timestamp;
-       enq_evt(&sc_data->evtq, move->cur.canvas.x, move->timestamp);
-       if (!sc_data->evt_emulator) {
-               if (!sc_data->curlist)
-                       sc_data->curlist = sc_data->item_list;
-
-               sc_data->evt_emulator = ecore_timer_add(EVT_PERIOD, emulate_evt, sc_data);
-       }
-}
-
-static inline int prepare_evt_layer(struct widget_data *sc_data)
-{
-       Evas *e;
-
-       e = evas_object_evas_get(sc_data->scroller);
-       if (!e)
-               return -EFAULT;
-
-       sc_data->evt_layer = evas_object_rectangle_add(e);
-       if (!sc_data->evt_layer)
-               return -EFAULT;
-
-       evas_object_smart_member_add(sc_data->evt_layer, sc_data->scroller);
-
-       evas_object_color_set(sc_data->evt_layer, 255, 255, 255, 0);
-       evas_object_show(sc_data->evt_layer);
-       evas_object_repeat_events_set(sc_data->evt_layer, EINA_TRUE);
-
-       evas_object_event_callback_add(sc_data->evt_layer,
-                       EVAS_CALLBACK_MOUSE_DOWN, evt_mouse_down_cb, sc_data);
-
-       evas_object_event_callback_add(sc_data->evt_layer,
-                       EVAS_CALLBACK_MOUSE_UP, evt_mouse_up_cb, sc_data);
-
-       evas_object_event_callback_add(sc_data->evt_layer,
-                       EVAS_CALLBACK_MOUSE_MOVE, evt_mouse_move_cb, sc_data);
-
-       evas_object_clip_set(sc_data->evt_layer, sc_data->clip);
-       return 0;
-}
-
-static void live_add(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-       Evas *e;
-       int ret;
-
-       sc_data = calloc(1, sizeof(*sc_data));
-       if (!sc_data)
-               return;
-
-       e = evas_object_evas_get(scroller);
-       if (!e) {
-               free(sc_data);
-               return;
-       }
-
-       evas_object_smart_data_set(scroller, sc_data);
-
-       sc_data->clip = evas_object_rectangle_add(e);
-       if (!sc_data->clip) {
-               free(sc_data);
-               return;
-       }
-
-       sc_data->is_pressed = EINA_FALSE;
-       sc_data->drag_started = EINA_FALSE;
-       sc_data->tolist = NULL;
-       sc_data->curlist = NULL;
-       sc_data->item_list = NULL;
-       sc_data->scroller = scroller;
-
-       evas_object_smart_member_add(sc_data->clip, sc_data->scroller);
-
-       ret = prepare_evt_layer(sc_data);
-       if (ret < 0) {
-               evas_object_del(sc_data->clip);
-               free(sc_data);
-       }
-
-       return;
-}
-
-static void live_del(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-       Evas_Object *item;
-       struct item_list_entry *ilist;
-       struct item_list_entry *next;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       ilist = sc_data->item_list;
-       if (ilist) {
-               do {
-                       next = LIST_NEXT(ilist);
-                       item = LIST_DATA(ilist);
-                       evas_object_clip_unset(item);
-                       evas_object_smart_member_del(item);
-                       free(ilist);
-                       ilist = next;
-               } while (ilist != sc_data->item_list);
-       }
-
-       evas_object_del(sc_data->evt_layer);
-       evas_object_del(sc_data->clip);
-       free(sc_data);
-}
-
-static void live_move(Evas_Object *scroller, Evas_Coord bx, Evas_Coord by)
-{
-       struct widget_data *sc_data;
-       Evas_Coord x, y, w, h;
-       Evas_Coord bw;
-
-       Evas_Coord dx;
-       Evas_Coord dy;
-
-       struct item_list_entry *n;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_geometry_get(sc_data->clip, &x, &y, &bw, NULL);
-
-       evas_object_move(sc_data->evt_layer, bx, by);
-       evas_object_move(sc_data->clip, bx, by);
-       sc_data->clip_bx = bx;
-       sc_data->clip_bw = bw;
-
-       dx = bx - x;
-       dy = by - y;
-
-       if (sc_data->item_list) {
-               n = sc_data->item_list;
-               do {
-                       evas_object_move(LIST_DATA(n), bx, by);
-
-                       LIST_ITEM_GEO_GET(n, &x, &y, &w, &h);
-                       x += dx;
-                       y += dy;
-                       move_item(sc_data, n, x, y, w, h);
-                       n = LIST_NEXT(n);
-               } while (n != sc_data->item_list);
-       }
-}
-
-static void live_resize(Evas_Object *scroller, Evas_Coord w, Evas_Coord h)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_resize(sc_data->clip, w, h);
-       evas_object_resize(sc_data->evt_layer, w, h);
-
-       sc_data->clip_bw = w;
-}
-
-static void live_show(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_show(sc_data->clip);
-}
-
-static void live_hide(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_hide(sc_data->clip);
-}
-
-static void live_set_color(Evas_Object *scroller, int r, int g, int b, int a)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_color_set(sc_data->clip, r, g, b, a);
-}
-
-static void live_set_clip(Evas_Object *scroller, Evas_Object *clip)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_clip_set(sc_data->clip, clip);
-}
-
-static void live_unset_clip(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return;
-       }
-
-       evas_object_clip_unset(sc_data->clip);
-}
-
-static inline void rearrange_items(struct widget_data *sc_data)
-{
-       struct item_list_entry *ilist;
-       Evas_Coord x, y, w, h;
-       Evas_Coord sw;
-
-       LIST_ITEM_GEO_GET(sc_data->curlist, NULL, &y, &sw, &h);
-       move_item(sc_data, sc_data->curlist, sc_data->clip_bx, y, sw, h);
-
-       x = sc_data->clip_bx;
-       ilist = sc_data->curlist;
-       while (ilist != sc_data->item_list) {
-               ilist = LIST_PREV(ilist);
-               LIST_ITEM_GEO_GET(ilist, NULL, &y, &w, &h);
-               x -= w;
-               move_item(sc_data, ilist, x, y, w, h);
-       }
-
-       w = sw;
-       x = sc_data->clip_bx;
-       ilist = LIST_NEXT(sc_data->curlist);
-       while (ilist != sc_data->item_list) {
-               x += w;
-               LIST_ITEM_GEO_GET(ilist, NULL, &y, &w, &h);
-               move_item(sc_data, ilist, x, y, w, h);
-               ilist = LIST_NEXT(ilist);
-       }
-}
-
-static Eina_Bool sc_anim_cb(void *data)
-{
-       PROFILE_START();
-       struct widget_data *sc_data;
-       Evas_Coord sx, sw;
-       Evas_Coord y;
-       Evas_Coord dx;
-       struct item_list_entry *ilist;
-
-       sc_data = data;
-
-       if (!sc_data->curlist || !sc_data->tolist) {
-               DbgPrint("cur_list: %p, tolist: %p\n", sc_data->curlist, sc_data->tolist);
-               goto clean_out;
-       }
-
-       ilist = sc_data->curlist;
-       if (sc_data->curlist != sc_data->tolist) {
-               if (sc_data->sc_anim_dx > 0)
-                       ilist = LIST_PREV(ilist);
-               else
-                       ilist = LIST_NEXT(ilist);
-       }
-
-       LIST_ITEM_GEO_GET(ilist, &sx, &y, &sw, NULL);
-       if (ilist == sc_data->tolist) {
-               DbgPrint("next list == tolist\n");
-               dx = abs(sx - sc_data->clip_bx);
-               DbgPrint("sx: %d, clip_bx: %d --> %d\n", sx, sc_data->clip_bx, dx);
-               if (dx < abs(sc_data->sc_anim_dx)) {
-                       if (sc_data->sc_anim_dx < 0)
-                               dx = -dx;
-               } else {
-                       dx = sc_data->sc_anim_dx;
-               }
-       } else {
-               dx = sc_data->sc_anim_dx;
-               DbgPrint("dx: %d\n", dx);
-       }
-
-       if (!dx) {
-               DbgPrint("dx is 0\n");
-               goto clean_out;
-       }
-
-       ilist = update_items_geo(sc_data, dx);
-       if (ilist) {
-               int idx;
-
-               idx = list_item_idx(sc_data, ilist);
-               evas_object_smart_callback_call(sc_data->scroller,"page,changed", (void *)idx);
-       }
-       PROFILE_END();
-       return ECORE_CALLBACK_RENEW;
-
-clean_out:
-       PROFILE_END();
-       evas_object_smart_callback_call(sc_data->scroller, "anim,stop", NULL);
-       sc_data->sc_anim_timer = NULL;
-       return ECORE_CALLBACK_CANCEL;
-}
-
-Evas_Object *live_scroller_add(Evas_Object *parent)
-{
-       static Evas_Smart_Class sc = EVAS_SMART_CLASS_INIT_NAME_VERSION("live,scroller");
-       static Evas_Smart *smart = NULL;
-       Evas_Object *scroller;
-       Evas *e;
-
-       if (!parent)
-               return NULL;
-
-       e = evas_object_evas_get(parent);
-       if (!e)
-               return NULL;
-
-       if (!smart) {
-               sc.add = live_add;
-               sc.del = live_del;
-               sc.move = live_move;
-               sc.resize = live_resize;
-               sc.show = live_show;
-               sc.hide = live_hide;
-               sc.color_set = live_set_color;
-               sc.clip_set = live_set_clip;
-               sc.clip_unset = live_unset_clip;
-
-               smart = evas_smart_class_new(&sc);
-       }
-
-       scroller = evas_object_smart_add(e, smart);
-
-       return scroller;
-}
-
-int live_scroller_append(Evas_Object *scroller, Evas_Object *item)
-{
-       Evas_Coord x, y, w, h;
-       Evas_Coord bx, by, bw, bh;
-       struct widget_data *sc_data;
-       struct item_list_entry *tmplist;
-       Evas_Coord start_x = 0;
-       Evas_Coord start_w = 0;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       evas_object_geometry_get(sc_data->clip, &bx, &by, &bw, &bh);
-
-       if (sc_data->item_list)
-               LIST_ITEM_GEO_GET(sc_data->item_list, &start_x, NULL, &start_w, NULL);
-
-       tmplist = list_item_last_list(sc_data->item_list);
-       if (tmplist) {
-               LIST_ITEM_GEO_GET(tmplist, &x, NULL, &w, NULL);
-               if (x + w == start_x) {
-                       x = start_x - w;
-               } else {
-                       x += w;
-               }
-       } else {
-               x = bx;
-       }
-       
-       evas_object_geometry_get(item, NULL, NULL, &w, &h);
-       evas_object_smart_member_add(item, sc_data->scroller);
-
-       y = by + ((bh - h) >> 1);
-
-       tmplist = list_item_append(sc_data->item_list, item);
-       if (sc_data->item_list == sc_data->curlist)
-               sc_data->curlist = tmplist;
-       if (sc_data->item_list == sc_data->tolist)
-               sc_data->tolist = tmplist;
-       sc_data->item_list = tmplist;
-
-       sc_data->item_cnt++;
-       evas_object_clip_set(item, sc_data->clip);
-       evas_object_stack_below(item, sc_data->clip);
-
-       evas_object_move(item, bx, by);
-       move_item(sc_data, list_item_find(sc_data->item_list, item), x, y, w, h);
-
-       return 0;
-}
-
-int live_scroller_remove_by_obj(Evas_Object *scroller, Evas_Object *obj)
-{
-       struct widget_data *sc_data;
-       struct item_list_entry *tmplist;
-       Evas_Object *item;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       if (sc_data->curlist) {
-               if (LIST_DATA(sc_data->curlist) == obj) {
-                       sc_data->curlist = sc_data->item_list;
-                       DbgPrint("Reset curlist\n");
-               }
-       }
-
-       if (sc_data->tolist) {
-               if (LIST_DATA(sc_data->tolist) == obj) {
-                       sc_data->tolist = sc_data->item_list;
-                       DbgPrint("Reset tolist\n");
-               }
-       }
-
-       tmplist = list_item_remove(sc_data->item_list, obj);
-       if (sc_data->item_list == sc_data->curlist) {
-               sc_data->curlist = tmplist;
-               DbgPrint("Update curlist\n");
-       }
-       if (sc_data->item_list == sc_data->tolist) {
-               sc_data->tolist = tmplist;
-               DbgPrint("Update tolist\n");
-       }
-       sc_data->item_list = tmplist;
-
-       sc_data->item_cnt--;
-       evas_object_clip_unset(obj);
-       evas_object_smart_member_del(obj);
-       DbgPrint("Count of items: %d\n", sc_data->item_cnt);
-
-       item = LIST_DATA(sc_data->curlist);
-       if (item) {
-               Evas_Coord y, w, h;
-               int idx;
-
-               LIST_ITEM_GEO_GET(sc_data->curlist, NULL, &y, &w, &h);
-               DbgPrint("Current GEO: %d, %dx%d\n", y, w, h);
-               LIST_ITEM_GEO_SET(sc_data->curlist, sc_data->clip_bx, y, w, h);
-               DbgPrint("sc_data->curlist : %p\n", sc_data->curlist);
-               update_items_geo(sc_data, 0);
-               DbgPrint("sc_data->curlist : %p\n", sc_data->curlist);
-
-               idx = list_item_idx(sc_data, sc_data->curlist);
-               evas_object_smart_callback_call(sc_data->scroller, "page,changed", (void *)idx);
-       }
-
-       return 0;
-}
-
-Evas_Object *live_scroller_remove(Evas_Object *scroller, int idx)
-{
-       struct widget_data *sc_data;
-       struct item_list_entry *tmplist;
-       Evas_Object *ret;
-       Evas_Object *item;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return NULL;
-       }
-
-       if (idx < 0 || idx >= sc_data->item_cnt)
-               return NULL;
-
-       ret = list_item_nth(sc_data->item_list, idx);
-       if (!ret)
-               return NULL;
-
-       if (list_item_nth_list(sc_data->item_list, idx) == sc_data->curlist) {
-               DbgPrint("Reset curlist\n");
-               sc_data->curlist = sc_data->item_list;
-       }
-
-       if (list_item_nth_list(sc_data->item_list, idx) == sc_data->tolist) {
-               DbgPrint("Reset tolist\n");
-               sc_data->tolist = sc_data->item_list;
-       }
-
-       tmplist = list_item_remove(sc_data->item_list, ret);
-       if (sc_data->item_list == sc_data->curlist)
-               sc_data->curlist = tmplist;
-       if (sc_data->item_list == sc_data->tolist)
-               sc_data->tolist = tmplist;
-       sc_data->item_list = tmplist;
-
-       sc_data->item_cnt--;
-       evas_object_clip_unset(ret);
-       evas_object_smart_member_del(ret);
-
-       item = LIST_DATA(sc_data->curlist);
-       if (item) {
-               Evas_Coord y, w, h;
-               int idx;
-               LIST_ITEM_GEO_GET(sc_data->curlist, NULL, &y, &w, &h);
-               LIST_ITEM_GEO_SET(sc_data->curlist, sc_data->clip_bx, y, w, h);
-               update_items_geo(sc_data, 0);
-               idx = list_item_idx(sc_data, sc_data->curlist);
-               evas_object_smart_callback_call(sc_data->scroller, "page,changed", (void *)idx);
-       }
-       return ret;
-}
-
-Evas_Object *live_scroller_get_item(Evas_Object *scroller, int idx)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return NULL;
-       }
-
-       if (idx < 0 || idx >= sc_data->item_cnt)
-               return NULL;
-
-       return list_item_nth(sc_data->item_list, idx);
-}
-
-int live_scroller_get_current(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-       struct item_list_entry *ilist;
-       int idx;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       ilist = sc_data->curlist;
-       idx = 0;
-       if (ilist) {
-               while (ilist != sc_data->item_list) {
-                       idx++;
-                       ilist = LIST_PREV(ilist);
-               }
-       }
-
-       return idx;
-}
-
-int live_scroller_loop_set(Evas_Object *scroller, int is_loop)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       if (is_loop == EINA_FALSE && sc_data->is_loop == EINA_TRUE)
-               rearrange_items(sc_data);
-
-       sc_data->is_loop = is_loop;
-       return 0;
-}
-
-int live_scroller_freeze(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       sc_data->is_freezed = EINA_TRUE;
-       return 0;
-}
-
-int live_scroller_thaw(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       sc_data->is_freezed = EINA_FALSE;
-       return 0;
-}
-
-int live_scroller_anim_to(Evas_Object *scroller, double sec, int offset)
-{
-       PROFILE_START();
-       struct widget_data *sc_data;
-       Evas_Coord sx, sw;
-       Evas_Coord y;
-       struct live_sc_event_info info;
-       struct item_list_entry *ilist;
-       double ftmp;
-       int ret;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               ret = -EINVAL;
-               goto out;
-       }
-       
-       if (sc_data->is_freezed) {
-               ErrPrint("Scroller is freezed\n");
-               ret = -EBUSY;
-               goto out;
-       }
-
-       if (!sc_data->curlist)
-               sc_data->curlist = sc_data->item_list;
-
-       if (!sc_data->curlist) {
-               ErrPrint("List is empty\n");
-               ret = -ENOENT;
-               goto out;
-       }
-
-       if (sc_data->sc_anim_timer) {
-               ecore_timer_del(sc_data->sc_anim_timer);
-               sc_data->sc_anim_timer = NULL;
-               evas_object_smart_callback_call(sc_data->scroller, "anim,stop", NULL);
-       } else {
-               sc_data->tolist = sc_data->curlist;
-       }
-
-       LIST_ITEM_GEO_GET(sc_data->curlist, &sx, &y, &sw, NULL);
-
-       if (!offset) {
-               sc_data->sc_anim_dx = sc_data->clip_bx - sx;
-               DbgPrint("offset==0, dx: %d\n", sc_data->sc_anim_dx);
-       } else {
-               Evas_Coord tw;
-               struct item_list_entry *tmplist;
-
-               calc_anim_dx_with_dir(sc_data, &offset);
-               DbgPrint("Offset: %d\n", offset);
-
-               ilist = sc_data->curlist;
-               while (offset < 0) {
-                       if (!sc_data->is_loop && ilist == sc_data->item_list) {
-                               DbgPrint("Loop is disabled\n");
-                               break;
-                       }
-
-                       LIST_ITEM_GEO_GET(ilist, NULL, NULL, &tw, NULL);
-                       ilist = LIST_PREV(ilist);
-
-                       sc_data->sc_anim_dx += tw;
-                       DbgPrint("tw: %d (%d)\n", tw, sc_data->sc_anim_dx);
-
-                       offset++;
-                       if (sc_data->tolist == sc_data->item_list) {
-                               if (!sc_data->is_loop) {
-                                       DbgPrint("Looping disabled\n");
-                                       break;
-                               }
-                       }
-                       sc_data->tolist = LIST_PREV(sc_data->tolist);
-               }
-               
-               while (offset > 0) {
-                       LIST_ITEM_GEO_GET(ilist, NULL, NULL, &tw, NULL);
-                       ilist = LIST_NEXT(ilist);
-
-                       sc_data->sc_anim_dx -= tw;
-                       DbgPrint("tw: %d (%d)\n", tw, sc_data->sc_anim_dx);
-
-                       offset--;
-                       tmplist = LIST_NEXT(sc_data->tolist);
-                       if (tmplist == sc_data->item_list) {
-                               if (!sc_data->is_loop) {
-                                       DbgPrint("Looping disabled\n");
-                                       break;
-                               }
-                       }
-                       sc_data->tolist = tmplist;
-
-                       if (!sc_data->is_loop && ilist == sc_data->item_list) {
-                               DbgPrint("Destination arrived or loop is disabled");
-                               break;
-                       }
-               }
-       }
-
-       if (abs(sc_data->sc_anim_dx) > ANIM_MIN) {
-               ftmp = (double)sc_data->sc_anim_dx / ANIM_UNIT;
-               DbgPrint("ftmp: %lf\n", ftmp);
-               if (fabs(ftmp) < ANIM_MIN || fabs(ftmp) > abs(sc_data->sc_anim_dx))
-                       sc_data->sc_anim_dx = ftmp < 0 ? -ANIM_MIN : ANIM_MIN;
-               else
-                       sc_data->sc_anim_dx = (int)ftmp;
-               DbgPrint("Result: %d\n", sc_data->sc_anim_dx);
-       }
-
-       sc_data->sc_anim_timer = ecore_timer_add(sec, sc_anim_cb, sc_data);
-       if (!sc_data->sc_anim_timer) {
-               ErrPrint("Failed to add a animator\n");
-               ret = -EFAULT;
-               goto out;
-       }
-
-       info.curidx = list_item_idx(sc_data, sc_data->curlist);
-       info.toidx = list_item_idx(sc_data, sc_data->tolist);
-       DbgPrint("Current index: %d, To index: %d\n", info.curidx, info.toidx);
-
-       evas_object_smart_callback_call(sc_data->scroller, "anim,start", &info);
-       ret = 0;
-
-out:
-       PROFILE_END();
-       return ret;
-}
-
-int live_scroller_go_to(Evas_Object *scroller, int idx)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       if (sc_data->is_freezed)
-               return -EBUSY;
-
-       if (idx < 0 || idx >= sc_data->item_cnt)
-               return -EINVAL;
-
-       sc_data->curlist = list_item_nth_list(sc_data->item_list, idx);
-       if (!sc_data->curlist)
-               return -EFAULT;
-
-       rearrange_items(sc_data);
-       evas_object_smart_callback_call(sc_data->scroller, "page,changed", (void *)idx);
-
-       return 0;
-}
-
-int live_scroller_update(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-       struct item_list_entry *n;
-       Evas_Object *item;
-       Evas_Coord x, y, w, h;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       if (sc_data->item_list) {
-               n = sc_data->item_list;
-               do {
-                       item = LIST_DATA(n);
-                       LIST_ITEM_GEO_GET(n, &x, &y, &w, &h);
-                       move_item(sc_data, n, x, y, w, h);
-                       n = LIST_NEXT(n);
-               } while (n != sc_data->item_list);
-       }
-
-       return 0;
-}
-
-int live_scroller_get_item_count(Evas_Object *scroller)
-{
-       struct widget_data *sc_data;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return 0;
-       }
-
-       return list_item_count(sc_data->item_list);
-}
-
-int live_scroller_get_item_index(Evas_Object *scroller, Evas_Object *item)
-{
-       struct widget_data *sc_data;
-       struct item_list_entry *n;
-       Evas_Object *tmp;
-       int idx;
-
-       sc_data = evas_object_smart_data_get(scroller);
-       if (!sc_data) {
-               ErrPrint("sc_data is not valid\n");
-               return -EINVAL;
-       }
-
-       if (!sc_data->item_list)
-               return -ENOENT;
-
-       idx = 0;
-       n = sc_data->item_list;
-       do {
-               tmp = LIST_DATA(n);
-               n = LIST_NEXT(n);
-
-               if (tmp == item)
-                       return idx;
-
-               idx++;
-       } while (n != sc_data->item_list);
-
-       return -ENOENT;
-}
-
-/* End of a file */
diff --git a/live.viewer/src/main.c b/live.viewer/src/main.c
deleted file mode 100644 (file)
index 1f57b90..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-
-#include <dlog.h>
-#include <ail.h>
-#include <app.h>
-#include <bundle.h>
-
-#include <livebox.h>
-#include <livebox-service.h>
-
-#include "main.h"
-#include "util.h"
-#include "debug.h"
-#include "scroller.h"
-#include "lb.h"
-
-static struct info {
-       Evas_Object *window;
-       Evas_Object *scroller;
-} s_info = {
-       .window = NULL,
-       .scroller = NULL,
-};
-
-Evas_Object *main_get_window(void)
-{
-       return s_info.window;
-}
-
-static void click_cb(void *data, Evas_Object *obj, void *event_info)
-{
-       Elm_Object_Item *item;
-       const char *label;
-
-       item = elm_list_selected_item_get(obj);
-       if (!item)
-               return;
-
-       label = elm_object_item_part_text_get(item, NULL);
-       if (!label)
-               return;
-
-       DbgPrint("Label: %s (%s)\n", label, data);
-       if (lb_add(s_info.scroller, data) < 0)
-               ErrPrint("Failed to add a new livebox\n");
-}
-
-static int append_livebox_cb(const char *appid, const char *lbid, int is_prime, void *data)
-{
-       char *name;
-
-       DbgPrint("%s - %s\n", appid, lbid);
-
-       name = livebox_service_i18n_name(lbid, NULL);
-       if (!name) {
-               name = strdup(lbid);
-               if (!name) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-                       return 0;
-               }
-       }
-
-       DbgPrint("Name: %s\n", name);
-       elm_list_item_append(data, name, NULL, NULL, click_cb, strdup(lbid));
-       free(name);
-       return 0;
-}
-
-static inline void livebox_list_create(void)
-{
-       Evas_Object *list;
-
-       list = elm_list_add(s_info.window);
-       if (!list) {
-               ErrPrint("Failed to create a list\n");
-               return;
-       }
-
-       evas_object_resize(list, 720, 1280);
-       evas_object_show(list);
-
-       DbgPrint("Get Package list\n");
-       livebox_service_get_pkglist(append_livebox_cb, list);
-       elm_list_go(list);
-
-       scroller_append(s_info.scroller, list);
-}
-
-static bool app_create(void *data)
-{
-       Evas_Object *bg;
-       DbgPrint("create");
-       lb_init();
-
-       s_info.window = elm_win_add(NULL, "Box viewer", ELM_WIN_BASIC);
-       if (!s_info.window) {
-               ErrPrint("Failed to create a window\n");
-               return false;
-       }
-       elm_win_autodel_set(s_info.window, EINA_TRUE);
-
-       evas_object_resize(s_info.window, 720, 1280);
-       evas_object_show(s_info.window);
-
-       bg = elm_bg_add(s_info.window);
-       elm_win_resize_object_add(s_info.window, bg);
-       elm_bg_color_set(bg, 0, 0, 255);
-       evas_object_show(bg);
-
-       s_info.scroller = scroller_create(s_info.window);
-       if (!s_info.scroller) {
-               evas_object_del(s_info.window);
-               s_info.window = NULL;
-               ErrPrint("Failed to create a scroller\n");
-               return false;
-       }
-
-       evas_object_resize(s_info.scroller, 720, 1280);
-       evas_object_show(s_info.scroller);
-
-       livebox_list_create();
-
-       return true;
-}
-
-static void app_terminate(void *data)
-{
-       DbgPrint("terminate");
-       lb_fini();
-       /*!
-        * \TODO
-        * Delete all objects from the scroller.
-        */
-
-       scroller_destroy(s_info.scroller);
-       evas_object_del(s_info.window);
-       s_info.window = NULL;
-}
-
-static void app_pause(void *data)
-{
-       DbgPrint("pause");
-}
-
-static void app_resume(void *data)
-{
-       DbgPrint("resume");
-}
-
-static void app_control(app_control_h service, void *data)
-{
-       DbgPrint("reset");
-}
-
-int main(int argc, char *argv[])
-{
-       app_event_callback_s event_callback;
-
-       setenv("ELM_ENGINE", "gl", 0);
-       event_callback.create = app_create;
-       event_callback.terminate = app_terminate;
-       event_callback.pause = app_pause;
-       event_callback.resume = app_resume;
-       event_callback.app_control = app_control;
-       event_callback.low_memory = NULL;
-       event_callback.low_battery = NULL;
-       event_callback.device_orientation = NULL;
-       event_callback.language_changed = NULL;
-
-       return app_efl_main(&argc, &argv, &event_callback, NULL);
-}
-
-/* End of a file */
diff --git a/live.viewer/src/scroller.c b/live.viewer/src/scroller.c
deleted file mode 100644 (file)
index 7a181fc..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-
-#include <dlog.h>
-
-#include "util.h"
-#include "live_scroller.h"
-#include "scroller.h"
-#include "debug.h"
-
-#define FOCAL_DIST 800
-#define FLICK_COND 100
-
-struct cb_item {
-       int (*cb)(Evas_Object *sc, void *data);
-       void *data;
-};
-
-struct scroll_info {
-       int locked;
-       Eina_Bool scrolling;
-       int focal;
-       Eina_Bool quick;
-
-       Evas_Map *map;
-
-       Ecore_Idler *bg_changer;
-       Eina_List *cb_list;
-};
-
-void scroller_lock(Evas_Object *sc)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-
-       if (!scinfo->locked)
-               live_scroller_freeze(sc);
-
-       scinfo->locked++;
-}
-
-void scroller_unlock(Evas_Object *sc)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-
-       if (scinfo->locked == 0)
-               return;
-
-       scinfo->locked--;
-
-       if (scinfo->locked == 0)
-               live_scroller_thaw(sc);
-}
-
-static void sc_anim_stop(void *data, Evas_Object *obj, void *event_info)
-{
-       Eina_List *l;
-       Eina_List *tmp;
-       struct cb_item *item;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(obj, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-       /*!
-        * \TODO
-        * Do what you want at here when the scroller is stopped
-        */
-
-       scinfo->scrolling = EINA_FALSE;
-       EINA_LIST_FOREACH_SAFE(scinfo->cb_list, l, tmp, item) {
-               if (item->cb(obj, item->data) == ECORE_CALLBACK_CANCEL) {
-                       if (eina_list_data_find(scinfo->cb_list, item)) {
-                               scinfo->cb_list = eina_list_remove(scinfo->cb_list, item);
-                               free(item);
-                       }
-               }
-       }
-}
-
-static inline void sc_drag_start(void *data, Evas_Object *obj, void *event_info)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(obj, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-
-       scinfo->scrolling = EINA_TRUE;
-}
-
-static inline void sc_drag_stop(void *data, Evas_Object *scroller, void *event_info)
-{
-       struct live_sc_drag_info *info;
-       int offset = 0;
-       int ret;
-
-       info = event_info;
-
-       if (info->dx > FLICK_COND)
-               offset = -1;
-       else if (info->dx < -FLICK_COND)
-               offset = 1;
-
-       ret = live_scroller_anim_to(scroller, 0.016f, offset);
-       if (ret < 0) {
-               struct scroll_info *scinfo;
-               scinfo = evas_object_data_get(scroller, "scinfo");
-               if (scinfo)
-                       scinfo->scrolling = EINA_FALSE;
-       }
-}
-
-static Eina_Bool bg_change_cb(void *data)
-{
-       Evas_Object *sc = data;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (scinfo)
-               scinfo->bg_changer = NULL;
-
-       /*!
-        * \note:
-        *  Here,
-        *  Filename of background image handling code is only
-        *  used to demonstrates UX concept and estimates its perfomance.
-        *  So, I'll change this if it should be appled to
-        *  main branch.
-        */
-       DbgPrint("Change the background image (%p)\n", sc);
-       return ECORE_CALLBACK_CANCEL;
-}
-
-static void sc_anim_start(void *data, Evas_Object *obj, void *event_info)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(obj, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-
-       /*!
-        * \note
-        * without drag,start
-        * anim start can be invoked by the scroller_anim_to
-        */
-       scinfo->scrolling = EINA_TRUE;
-
-       if (scinfo->bg_changer)
-               ecore_idler_del(scinfo->bg_changer);
-
-       scinfo->bg_changer = ecore_idler_add(bg_change_cb, obj);
-       if (!scinfo->bg_changer)
-               DbgPrint("Failed to add an idler\n");
-}
-
-static void sc_item_moved(void *data, Evas_Object *obj, void *event_info)
-{
-       struct live_sc_move_info *evt = event_info;
-       int color;
-       int focal;
-       Evas_Coord y, sx, sw;
-       double ftmp;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(obj, "scinfo");
-       if (!scinfo) {
-               ErrPrint("Has no scinfo\n");
-               return;
-       }
-
-       ftmp = fabsl(evt->relx);
-       if (ftmp >= 1.0f) {
-               evas_object_map_enable_set(evt->item, EINA_FALSE);
-               evas_object_hide(evt->item);
-               return;
-       }
-
-       color = 255 * (1.0f - ftmp);
-       if (scinfo->quick) {
-               if (color < 100)
-                       color = 100;
-
-               focal = scinfo->focal;
-       } else {
-               if (color == 0) {
-                       evas_object_map_enable_set(evt->item, EINA_FALSE);
-                       evas_object_hide(evt->item);
-                       return;
-               }
-
-               focal = -ftmp * 200.0f + scinfo->focal;
-       }
-
-       evas_object_geometry_get(data, &sx, NULL, &sw, NULL);
-       
-       /* LEFT */
-       evas_map_point_coord_set(scinfo->map, 0, evt->x, evt->y, 0);
-       evas_map_point_image_uv_set(scinfo->map, 0, 0, 0);
-       evas_map_point_color_set(scinfo->map, 0, color, color, color, color);
-
-       /* RIGHT */
-       evas_map_point_coord_set(scinfo->map, 1, evt->x + evt->w, evt->y, 0);
-       evas_map_point_image_uv_set(scinfo->map, 1, evt->w, 0);
-       evas_map_point_color_set(scinfo->map, 1, color, color, color, color);
-
-       /* BOTTOM-RIGHT */
-       evas_map_point_coord_set(scinfo->map, 2, evt->x + evt->w, evt->y + evt->h, 0);
-       evas_map_point_image_uv_set(scinfo->map, 2, evt->w, evt->h);
-       evas_map_point_color_set(scinfo->map, 2, color, color, color, color);
-
-       /* BOTTOM-LEFT */
-       evas_map_point_coord_set(scinfo->map, 3, evt->x, evt->y + evt->h, 0);
-       evas_map_point_image_uv_set(scinfo->map, 3, 0, evt->h);
-       evas_map_point_color_set(scinfo->map, 3, color, color, color, color);
-
-       y = evt->y + (evt->h >> 1);
-       evas_map_util_3d_rotate(scinfo->map, 0.0f, -30.0f * evt->relx, 0.0f, evt->x + (evt->w >> 1), y, 0);
-       evas_map_util_3d_perspective(scinfo->map, sx + (sw >> 1), y, focal, FOCAL_DIST);
-       evas_object_map_set(evt->item, scinfo->map);
-       evas_object_map_enable_set(evt->item, EINA_TRUE);
-       evas_object_show(evt->item);
-       return;
-}
-
-static void sc_page_changed(void *data, Evas_Object *obj, void *event_info)
-{
-       DbgPrint("Page is changed %d\n", (int)event_info);
-}
-
-int scroller_add_stop_cb(Evas_Object *scroller,
-                       int (*cb)(Evas_Object *sc, void *data), void *data)
-{
-       struct cb_item *item;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(scroller, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return -EINVAL;
-       }
-
-       item = calloc(1, sizeof(*item));
-       if (!item) {
-               ErrPrint("Error: %s\n", strerror(errno));
-               return EXIT_FAILURE;
-       }
-
-       item->cb = cb;
-       item->data = data;
-
-       scinfo->cb_list = eina_list_append(scinfo->cb_list, item);
-       return EXIT_SUCCESS;
-}
-
-void scroller_del_stop_cb(Evas_Object *scroller,
-                       int (*cb)(Evas_Object *sc, void *data), void *data)
-{
-       struct cb_item *item;
-       Eina_List *l;
-       Eina_List *tmp;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(scroller, "scinfo");
-       if (!scinfo) {
-               ErrPrint("Failed to get scinfo\n");
-               return;
-       }
-
-       EINA_LIST_FOREACH_SAFE(scinfo->cb_list, l, tmp, item) {
-               if (item->cb == cb && item->data == data) {
-                       scinfo->cb_list = eina_list_remove(scinfo->cb_list, item);
-                       free(item);
-                       break;
-               }
-       }
-}
-
-Evas_Object *scroller_create(Evas_Object *ctrl)
-{
-       Evas_Object *sc;
-       struct scroll_info *scinfo;
-
-       scinfo = calloc(1, sizeof(*scinfo));
-       if (!scinfo) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return NULL;
-       }
-
-       sc = live_scroller_add(ctrl);
-       if (!sc) {
-               DbgPrint("Failed to create flip object\n");
-               free(scinfo);
-               return NULL;
-       }
-
-       evas_object_data_set(sc, "scinfo", scinfo);
-
-       scinfo->map = evas_map_new(4);
-       if (!scinfo->map) {
-               ErrPrint("Failed to create a map object\n");
-               evas_object_del(sc);
-               free(scinfo);
-               return NULL;
-       }
-
-       evas_map_smooth_set(scinfo->map, EINA_TRUE);
-       evas_map_alpha_set(scinfo->map, EINA_TRUE);
-
-       evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       evas_object_smart_callback_add(sc, "drag,start", sc_drag_start, NULL);
-       evas_object_smart_callback_add(sc, "drag,stop", sc_drag_stop, NULL);
-       evas_object_smart_callback_add(sc, "anim,stop", sc_anim_stop, NULL);
-       evas_object_smart_callback_add(sc, "anim,start", sc_anim_start, NULL);
-       evas_object_smart_callback_add(sc, "page,changed", sc_page_changed, NULL);
-       evas_object_smart_callback_add(sc, "item,moved", sc_item_moved, NULL);
-       live_scroller_loop_set(sc, EINA_TRUE);
-       evas_object_show(sc);
-
-       return sc;
-}
-
-int scroller_append(Evas_Object *sc, Evas_Object *child)
-{
-       return live_scroller_append(sc, child);
-}
-
-int scroller_get_page_index(Evas_Object *sc, Evas_Object *page)
-{
-       return live_scroller_get_item_index(sc, page);
-}
-
-Evas_Object *scroller_get_page(Evas_Object *sc, int idx)
-{
-       return live_scroller_get_item(sc, idx);
-}
-
-Evas_Object *scroller_peek_by_idx(Evas_Object *sc, int idx)
-{
-       return live_scroller_remove(sc, idx);
-}
-
-int scroller_peek_by_obj(Evas_Object *sc, Evas_Object *page)
-{
-       return live_scroller_remove_by_obj(sc, page);
-}
-
-int scroller_get_current_idx(Evas_Object *sc)
-{
-       return live_scroller_get_current(sc);
-}
-
-int scroller_is_scrolling(Evas_Object *sc)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return -EINVAL;
-       }
-
-       return scinfo->scrolling;
-}
-
-int scroller_get_page_count(Evas_Object *sc)
-{
-       return live_scroller_get_item_count(sc);
-}
-
-int scroller_scroll_to(Evas_Object *sc, int idx)
-{
-       int curidx;
-       int cnt;
-       register int i;
-       int next_offset;
-       int prev_offset;
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return -EINVAL;
-       }
-
-       if (scinfo->scrolling) {
-               DbgPrint("Scroller is scrolling\n");
-               return -EINVAL;
-       }
-
-       curidx = live_scroller_get_current(sc);
-       cnt = live_scroller_get_item_count(sc);
-
-       i = curidx;
-       next_offset = 0;
-       while (i != idx && i >= 0 && i < cnt) {
-               i++;
-               if (i >= cnt)
-                       i = 0;
-
-               next_offset++;
-       }
-
-       i = curidx;
-       prev_offset = 0;
-       while (i != idx && i >= 0 && i < cnt) {
-               i--;
-               if (i < 0)
-                       i = cnt - 1;
-
-               prev_offset--;
-       }
-
-       idx = next_offset < -prev_offset ? next_offset : prev_offset;
-       live_scroller_anim_to(sc, 0.016f, idx);
-       return 0;
-}
-
-int scroller_jump_to(Evas_Object *sc, int idx)
-{
-       live_scroller_go_to(sc, idx);
-       return 0;
-}
-
-int scroller_destroy(Evas_Object *sc)
-{
-       int cnt;
-       struct scroll_info *scinfo;
-       struct cb_item *item;
-
-       scinfo = evas_object_data_del(sc, "scinfo");
-       if (!scinfo)
-               return -EFAULT;
-
-       if (scinfo->bg_changer)
-               ecore_idler_del(scinfo->bg_changer);
-
-       EINA_LIST_FREE(scinfo->cb_list, item) {
-               free(item);
-       }
-
-       cnt = live_scroller_get_item_count(sc);
-       if (cnt)
-               DbgPrint("Children is not cleared (%d)\n", cnt);
-
-       evas_object_del(sc);
-       evas_map_free(scinfo->map);
-       free(scinfo);
-       return 0;
-}
-
-int scroller_update(Evas_Object *sc, void *data)
-{
-       struct scroll_info *scinfo;
-
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return -EFAULT;
-       }
-
-       scinfo->focal = (int)data;
-       live_scroller_update(sc);
-       return EXIT_SUCCESS;
-}
-
-int scroller_fast_scroll(Evas_Object *sc, int idx)
-{
-       idx -= scroller_get_current_idx(sc);
-       live_scroller_anim_to(sc, 0.016f, idx);
-       return 0;
-}
-
-void scroller_loop_set(Evas_Object *sc, Eina_Bool val)
-{
-       live_scroller_loop_set(sc, val);
-}
-
-void scroller_quick_navi(Evas_Object *sc, Eina_Bool val)
-{
-       struct scroll_info *scinfo;
-       scinfo = evas_object_data_get(sc, "scinfo");
-       if (!scinfo) {
-               ErrPrint("scinfo is not valid\n");
-               return;
-       }
-
-       scinfo->quick = val;
-}
-
-/* End of a file */
diff --git a/live.viewer/src/util.c b/live.viewer/src/util.c
deleted file mode 100644 (file)
index 8a1c5cb..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <stdlib.h>
-
-#include <dlog.h>
-
-#include "debug.h"
-#include "util.h"
-
-int errno;
-
-const char *util_basename(const char *name)
-{
-       int length;
-       length = name ? strlen(name) : 0;
-       if (!length)
-               return ".";
-
-       while (--length > 0 && name[length] != '/');
-
-       return length <= 0 ? name : name + length + (name[length] == '/');
-}
-
-/* End of a file */
diff --git a/live.viewer/viewer/CMakeLists.txt b/live.viewer/viewer/CMakeLists.txt
new file mode 100644 (file)
index 0000000..6c03f45
--- /dev/null
@@ -0,0 +1,53 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(w-add-viewer C)
+
+SET(SRCS
+       src/main.c
+       src/dynamicbox_evas.c
+)
+
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(viewer_pkgs REQUIRED
+       capi-appfw-application
+       appcore-efl
+       ecore-x
+       ecore
+       evas
+       edje
+       vconf
+       bundle
+        dlog
+       dynamicbox_viewer
+       dynamicbox_service
+       ail
+       utilX
+)
+
+FOREACH(flag ${viewer_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")
+SET(CMAKE_C_FLAGS_RELEASE "-O2")
+
+ADD_DEFINITIONS("-DDYNAMICBOX_EVAS_RESOURCE_EDJ=\"${EDJDIR}/w_add_viewer.edj\"")
+
+ADD_DEFINITIONS("-DDYNAMICBOX_EVAS_RESOURCE_PD=\"gbar\"")
+ADD_DEFINITIONS("-DDYNAMICBOX_EVAS_RESOURCE_LB=\"dynamicbox\"")
+ADD_DEFINITIONS("-DDYNAMICBOX_EVAS_RESOURCE_IMG=\"dynamicbox,image\"")
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+
+#SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${viewer_pkgs_LDFLAGS} "-lm -fpie -fPIC")
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+
+# data
+ADD_SUBDIRECTORY(data)
+ADD_SUBDIRECTORY(po)
diff --git a/live.viewer/viewer/com.samsung.w-add-viewer.desktop.in b/live.viewer/viewer/com.samsung.w-add-viewer.desktop.in
new file mode 100644 (file)
index 0000000..5aab710
--- /dev/null
@@ -0,0 +1,8 @@
+Name=@PROJECT_NAME@
+Exec=@BINDIR@/@PROJECT_NAME@
+Icon=@PKGNAME@.png
+Type=Application
+Version=0.1.0-0
+NoDisplay=false
+X-TIZEN-TaskManage=false
+X-TIZEN-Removable=false
diff --git a/live.viewer/viewer/data/CMakeLists.txt b/live.viewer/viewer/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1e7aeda
--- /dev/null
@@ -0,0 +1,11 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# install edj
+ADD_CUSTOM_TARGET(w_add_viewer.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images ${EDJE_CFLAGS}
+               ${CMAKE_CURRENT_SOURCE_DIR}/w_add_viewer.edc w_add_viewer.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/w_add_viewer.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} w_add_viewer.edj)
+INSTALL(FILES w_add_viewer.edj DESTINATION ${EDJDIR})
+INSTALL(FILES images/unknown.png DESTINATION ${RESDIR}/images)
diff --git a/live.viewer/viewer/data/dynamicbox.edc b/live.viewer/viewer/data/dynamicbox.edc
new file mode 100644 (file)
index 0000000..59687bb
--- /dev/null
@@ -0,0 +1,354 @@
+       styles {
+               style {
+                       name: "overlay,text";
+                       base: "font=Tizen text_class=tizen font_size=20 align=center color=#FFFFFF ellipsis=1.0";
+                       tag:  "br" "\n";
+                       tag:  "hilight" "+ font=Tizen:style=Bold";
+                       tag:  "b" "+ font=Tizen:style=Bold";
+                       tag:  "tab" "\t";
+               }
+       }
+
+       group
+       {
+               name: "overlay";
+               parts
+               {
+                       part {
+                               name: "bg,img";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 100 100 100 100;
+                               }
+                       }
+
+                       part {
+                               name: "text";
+                               type: TEXTBLOCK;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 50/354 270/354; }
+                                       rel2 { relative: 270/354 354/354; }
+                                       text {
+                                               style: "overlay,text";
+                                       }
+                               }
+                       }
+               }
+       }
+
+       group
+       {
+               name: "dynamicbox,image";
+               parts
+               {
+                       part {
+                               name: "front";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "to,back" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part {
+                               name: "front,content";
+                               type: SWALLOW;
+                               clip_to: "front";
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+
+                       part {
+                               name: "back";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "to,back" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+
+                       part {
+                               name: "back,content";
+                               type: SWALLOW;
+                               clip_to: "back";
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+               }
+
+               programs
+               {
+                       program {
+                               name: "turn,to,back,front";
+                               signal: "to,back";
+                               source: "turn";
+                               action: STATE_SET "to,back" 0.0;
+                               target: "front";
+                               target: "back";
+                               transition: LINEAR 0.5;
+                               after: "play,end";
+                       }
+
+                       program {
+                               name: "turn,to,front";
+                               signal: "to,front";
+                               source: "turn";
+                               action: STATE_SET "default" 0.0;
+                               target: "front";
+                               target: "back";
+                               transition: LINEAR 0.5;
+                               after: "play,end";
+                       }
+
+                       program {
+                               name: "play,end";
+                               action: SIGNAL_EMIT "done" "turn";
+                       }
+               }
+       }
+
+       group
+       {
+               name: "dynamicbox";
+               parts
+               {
+                       part {
+                               name: "dynamicbox,content";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       map {
+                                               on: 0;
+                                       }
+                               }
+                               description {
+                                       state: "tilt" 0.0;
+                                       inherit: "default" 0.0;
+                                       map {
+                                               on: 1;
+                                               rotation {
+                                                       x: 30.0;
+                                               }
+                                       }
+                               }
+                               description {
+                                       state: "move,down" 0.0;
+                                       inherit: "default" 0.0;
+                                       rel1 { relative: 0.0 0.2; }
+                                       rel2 { relative: 1.0 1.2; }
+                               }
+                       }
+
+                       part {
+                               name: "overlay";
+                               mouse_events: 1;
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "disable,overlay" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part {
+                               name: "overlay,content";
+                               mouse_events: 1;
+                               type: SWALLOW;
+                               clip_to: "overlay";
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+               }
+
+               programs
+               {
+                       program {
+                               name: "reset,overlay";
+                               signal: "reset";
+                               source: "overlay";
+                               action: STATE_SET "disable,overlay" 0.0;
+                               target: "overlay";
+                       }
+                       program {
+                               name: "enable,overlay";
+                               signal: "enable";
+                               source: "overlay";
+                               action: STATE_SET "default" 0.0;
+                               target: "overlay";
+                               transition: LINEAR 0.5;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "disable,overlay";
+                               signal: "disable";
+                               source: "overlay";
+                               action: STATE_SET "disable,overlay" 0.0;
+                               target: "overlay";
+                               transition: LINEAR 0.5;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "tilt,start";
+                               signal: "tilt";
+                               source: "content";
+                               action: STATE_SET "tilt" 0.0;
+                               target: "dynamicbox,content";
+                               transition: LINEAR 0.15;
+                               after: "tilt,end";
+                       }
+
+                       program {
+                               name: "tilt,end";
+                               action: STATE_SET "default" 0.0;
+                               target: "dynamicbox,content";
+                               transition: LINEAR 0.15;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "move,down,start";
+                               signal: "move,down";
+                               source: "content";
+                               action: STATE_SET "move,down" 0.0;
+                               target: "dynamicbox,content";
+                               transition: LINEAR 0.15;
+                               after: "move,down,end";
+                       }
+
+                       program {
+                               name: "move,down,end";
+                               action: STATE_SET "default" 0.0;
+                               target: "dynamicbox,content";
+                               transition: LINEAR 0.15;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "animation,done";
+                               action: SIGNAL_EMIT "finished" "animation";
+                       }
+               }
+       }
+
+       group
+       {
+               name: "gbar";
+               parts
+               {
+                       part {
+                               name: "gbar,content";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+
+                       part {
+                               name: "overlay";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       color: 255 255 255 255;
+                                       visible: 1;
+                               }
+                               description {
+                                       state: "disable,overlay" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 0 0 0 0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part {
+                               name: "overlay,content";
+                               type: SWALLOW;
+                               clip_to: "overlay";
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+               }
+
+               programs
+               {
+                       program {
+                               name: "reset,overlay";
+                               signal: "reset";
+                               source: "overlay";
+                               action: STATE_SET "disable,overlay" 0.0;
+                               target: "overlay";
+                       }
+                       program {
+                               name: "enable,overlay";
+                               signal: "enable";
+                               source: "overlay";
+                               action: STATE_SET "default" 0.0;
+                               target: "overlay";
+                               transition: LINEAR 0.15;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "disable,overlay";
+                               signal: "disable";
+                               source: "overlay";
+                               action: STATE_SET "disable,overlay" 0.0;
+                               target: "overlay";
+                               transition: LINEAR 0.15;
+                               after: "animation,done";
+                       }
+
+                       program {
+                               name: "animation,done";
+                               action: SIGNAL_EMIT "finished" "animation";
+                       }
+               }
+       }
+
+/* End of a file */
diff --git a/live.viewer/viewer/data/w_add_viewer.edc b/live.viewer/viewer/data/w_add_viewer.edc
new file mode 100644 (file)
index 0000000..be4e801
--- /dev/null
@@ -0,0 +1,242 @@
+/*
+ * 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.
+ */
+
+collections {
+       images {
+               image: "unknown.png" COMP;
+       }
+
+#include "dynamicbox.edc"
+
+#define WIN_WIDTH 480
+#define WIN_HEIGHT 800
+
+#define DBOX_SIZE_1x1_WIDTH 1
+#define DBOX_SIZE_1x1_HEIGHT 1
+
+#define DBOX_SIZE_2x2_WIDTH 454
+#define DBOX_SIZE_2x2_HEIGHT 454
+
+#define DBOX_1x1_WPAD ((WIN_WIDTH-DBOX_SIZE_1x1_WIDTH)/2)
+#define DBOX_2x2_WPAD ((WIN_WIDTH-DBOX_SIZE_2x2_WIDTH)/2)
+
+#define DBOX_1x1_HPAD ((WIN_HEIGHT-DBOX_SIZE_1x1_HEIGHT)/2)
+#define DBOX_2x2_HPAD ((WIN_HEIGHT-DBOX_SIZE_2x2_HEIGHT)/2)
+
+       group {
+               name: "image";
+               parts {
+                       part {
+                               name: "unkown";
+                               type: IMAGE;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image { normal: "unknown.png"; }
+                               }
+                       }
+               }
+       }
+
+       group {
+               name: "preview";
+               parts {
+                       part {
+                               name: "bg,color";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+
+                       part {
+                               name: "bg";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to, "bg,color"; }
+                                       rel2 { relative: 1.0 1.0; to, "bg,color"; }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+                       part {
+                               name: "preview";
+                               type: SWALLOW;
+                               description {
+                                       state: "defaut" 0.0;
+                                       fixed: 1 1;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.5 0.5; to, "bg"; }
+                                       rel2 { relative: 0.5 0.5; to, "bg"; }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+
+                       part {
+                               name: "name";
+                               type: TEXT;
+                               effect: TIZEN_GLOW_SHADOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; to, "preview"; }
+                                       rel2 { relative: 1.0 1.0; to, "preview"; }
+                                       align: 0.5 0.5;
+                                       color: 255 255 255 255;
+                                       color2: 0 0 0 255;
+                                       color3: 0 0 0 255;
+                                       text {
+                                               text: "Hello";
+                                               align: 0.5 0.5;
+                                               size: 20;
+                                       }
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                               name: "show,box";
+                               signal: "show";
+                               source: "preview";
+                               action: STATE_SET "show" 0.0;
+                               target: "preview";
+                               target: "bg";
+                       }
+
+                       program {
+                               name: "hide,box";
+                               signal: "hide";
+                               source: "preview";
+                               action: STATE_SET "default" 0.0;
+                               target: "preview";
+                               target: "bg";
+                       }
+               }
+       }
+
+       group {
+               name: "layout";
+               parts {
+                       part {
+                               name: "scroller";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       visible: 1;
+                               }
+                       }
+
+                       part {
+                               name: "bg";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.5 0.5; }
+                                       rel2 { relative: 0.5 0.5; }
+                                       align: 0.5 0.5;
+                                       fixed: 1 1;
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+
+                       part {
+                               name: "dynamicbox";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               description {
+                                       state: "defaut" 0.0;
+                                       rel1 { to, "bg"; }
+                                       rel2 { to, "bg"; }
+                                       visible: 0;
+                               }
+                               description {
+                                       state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+
+                       part {
+                               name: "content";
+                               type: RECT;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { to, "bg"; }
+                                       rel2 { to, "bg"; }
+                                       color: 255 0 0 255;
+                                       visible: 0;
+                               }
+
+                               description {
+                                       state: "empty" 0.0;
+                                       inherit: "default" 0.0;
+                                       visible: 1;
+                               }
+                       }
+               }
+
+               programs {
+                       program {
+                               name: "show,box";
+                               signal: "show";
+                               source: "dynamicbox";
+                               action: STATE_SET "show" 0.0;
+                               target: "dynamicbox";
+                               target: "bg";
+                       }
+
+                       program {
+                               name: "hide,box";
+                               signal: "hide";
+                               source: "dynamicbox";
+                               action: STATE_SET "default" 0.0;
+                               target: "dynamicbox";
+                               target: "bg";
+                       }
+
+                       program {
+                               name: "empty,content";
+                               signal: "empty";
+                               source: "content";
+                               action: STATE_SET "empty" 0.0;
+                               target: "content";
+                       }
+               }
+       }
+
+}
diff --git a/live.viewer/viewer/include/dynamicbox_evas.h b/live.viewer/viewer/include/dynamicbox_evas.h
new file mode 100644 (file)
index 0000000..4e741fd
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Samsung API
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __DYNAMICBOX_EVAS_H
+#define __DYNAMICBOX_EVAS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DYNAMICBOX_EVAS_DEFAULT_PERIOD                -1.0f                   /**< Default Update Period */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_CREATE_ABORTED   "dbox,create,aborted"   /**< Livebox creation is aborted */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_CREATED          "dbox,created"          /**< Livebox is created */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_RESIZE_ABORTED   "dbox,resize,aborted"   /**< Resizing dynamicbox is aborted */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_RESIZED          "dbox,resized"          /**< Livebox is resized */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_FAULTED          "dbox,faulted"          /**< Livebox has faulted */
+#define DYNAMICBOX_SMART_SIGNAL_UPDATED               "updated"               /**< Livebox content is updated */
+#define DYNAMICBOX_SMART_SIGNAL_EXTRA_INFO_UPDATED    "info,updated"          /**< Livebox extra info is updated */
+#define DYNAMICBOX_SMART_SIGNAL_PROVIDER_DISCONNECTED "provider,disconnected" /**< Provider is disconnected */
+#define DYNAMICBOX_SMART_SIGNAL_GBAR_DESTROYED        "gbar,destroyed"        /**< GBAR is destroyed */
+#define DYNAMICBOX_SMART_SIGNAL_GBAR_ABORTED          "gbar,aborted"          /**< GBAR creation is aborted */
+#define DYNAMICBOX_SMART_SIGNAL_GBAR_CREATED          "gbar,created"          /**< GBAR is created */
+#define DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED   "flickdown,cancelled"   /**< Flick down is canceld */
+#define DYNAMICBOX_SMART_SIGNAL_CONTROL_SCROLLER      "control,scroller"      /**< Control Scroller */
+#define DYNAMICBOX_SMART_SIGNAL_DBOX_DELETED          "dbox,deleted"          /**< DynamicBox is deleted */
+#define DYNAMICBOX_SMART_SIGNAL_PERIOD_CHANGED        "dbox,period,changed"   /**< Period is changed */
+
+/**
+ * \brief
+ * Data structure for Smart Callback Event
+ */
+struct dynamicbox_evas_event_info {
+       const char *pkgname;    /**< Livebox Application Id */
+       int event;              /**< Event type - DBOX_EVENT_XXX, refer the dynamicbox.h */
+       int error;              /**< Error type - DBOX_STATUS_XXX, refer the dynamicbox.h */
+};
+
+enum dynamicbox_evas_raw_event_type {
+       DYNAMICBOX_EVAS_RAW_DELETE = 0x00,
+       DYNAMICBOX_EVAS_RAW_CREATE = 0x02,
+       DYNAMICBOX_EVAS_RAW_MAX = 0xff,
+};
+
+struct dynamicbox_evas_raw_event_info {
+       const char *pkgname;
+       enum dynamicbox_evas_raw_event_type type;
+       int error;
+       Evas_Object *dynamicbox;
+};
+
+/**
+ * \brief
+ * Configuration keys
+ */
+enum dynamicbox_evas_conf {
+       DYNAMICBOX_EVAS_MANUAL_PAUSE_RESUME = 0x0001,   /**< Visibility will be changed manually */
+       DYNAMICBOX_EVAS_SHARED_CONTENT = 0x0002,                /**< Multiple instances will share the content of one real instance */
+       DYNAMICBOX_EVAS_SUPPORT_GBAR = 0x0004,          /**< GBAR will be used */
+       DYNAMICBOX_EVAS_USE_FIXED_SIZE = 0x0008,                /**< Livebox will be resized to specific size only */
+       DYNAMICBOX_EVAS_EASY_MODE = 0x0010,             /**< Easy mode on/off */
+       DYNAMICBOX_EVAS_SCROLL_X = 0x0020,                      /**< Box will be scrolled from left to right vice versa */
+       DYNAMICBOX_EVAS_SCROLL_Y = 0x0040,                      /**< Box will be scrolled from top to bottom vice versa */
+       DYNAMICBOX_EVAS_EVENT_AUTO_FEED = 0x0080,               /**< Feeds event automatically from the master provider */
+       DYNAMICBOX_EVAS_DELAYED_PAUSE_RESUME = 0x0100,  /**< Delaying the pause/resume when it is automatically changed */
+       DYNAMICBOX_EVAS_SENSITIVE_MOVE = 0x0200,                /**< Force feeds mouse up event if the box is moved */
+       DYNAMICBOX_EVAS_AUTO_RENDER_SELECTION = 0x0400, /**< Select render automatically, if a box moved, do not sync using animator, or use the animator */
+       DYNAMICBOX_EVAS_UNKNOWN = 0xFFFF
+};
+
+enum dynamicbox_access_result {
+       DYNAMICBOX_ACCESS_DONE = 0x00,
+       DYNAMICBOX_ACCESS_FIRST = 0x01,
+       DYNAMICBOX_ACCESS_LAST = 0x02,
+       DYNAMICBOX_ACCESS_READ = 0x04,
+       DYNAMICBOX_ACCESS_ERROR = 0x80,
+       DYNAMICBOX_ACCESS_UNKNOWN = 0xFF
+};
+
+extern int evas_object_dynamicbox_init(Evas_Object *win, int force_to_buffer);
+extern int evas_object_dynamicbox_fini(void);
+
+extern Evas_Object *evas_object_dynamicbox_add(Evas_Object *parent, const char *dbox_id, const char *content_info, const char *cluster, const char *category, double period);
+extern int evas_object_dynamicbox_destroy_pd(Evas_Object *dynamicbox);
+
+extern int evas_object_dynamicbox_resumed(void);
+extern int evas_object_dynamicbox_paused(void);
+
+extern int evas_object_dynamicbox_pause(Evas_Object *dynamicbox);
+extern int evas_object_dynamicbox_resume(Evas_Object *dynamicbox);
+
+extern int evas_object_dynamicbox_view_port_set(Evas_Object *dynamicbox, int x, int y, int w, int h);
+extern int evas_object_dynamicbox_view_port_get(Evas_Object *dynamicbox, int *x, int *y, int *w, int *h);
+extern int evas_object_dynamicbox_conf_set(enum dynamicbox_evas_conf type, int value);
+
+extern const char *evas_object_dynamicbox_content(Evas_Object *dynamicbox);
+extern const char *evas_object_dynamicbox_title(Evas_Object *dynamicbox);
+extern const char *evas_object_dynamicbox_dbox_id(Evas_Object *dynamicbox);
+
+extern double evas_object_dynamicbox_period(Evas_Object *dynamicbox);
+extern void evas_object_dynamicbox_cancel_click(Evas_Object *dynamicbox);
+
+/**
+ * @brief This function should be called right after create the dynamicbox object. before resizing it.
+ */
+extern void evas_object_dynamicbox_disable_preview(Evas_Object *dynamicbox);
+extern void evas_object_dynamicbox_disable_overlay_text(Evas_Object *dynamicbox);
+extern void evas_object_dynamicbox_disable_loading(Evas_Object *dynamicbox);
+
+extern int evas_object_dynamicbox_force_mouse_up(Evas_Object *dynamicbox);
+extern int evas_object_dynamicbox_access_action(Evas_Object *dynamicbox, int type, void *_info, void (*ret_cb)(Evas_Object *obj, int ret, void *data), void *data);
+extern void evas_object_dynamicbox_activate(Evas_Object *dynamicbox);
+extern int evas_object_dynamicbox_is_faulted(Evas_Object *dynamicbox);
+
+extern int evas_object_dynamicbox_unset_raw_event_callback(enum dynamicbox_evas_raw_event_type type, void (*cb)(struct dynamicbox_evas_raw_event_info *info, void *data), void *data);
+extern int evas_object_dynamicbox_set_raw_event_callback(enum dynamicbox_evas_raw_event_type type, void (*cb)(struct dynamicbox_evas_raw_event_info *info, void *data), void *data);
+
+extern int evas_object_dynamicbox_freeze_visibility(Evas_Object *dynamicbox, int status);
+extern int evas_object_dynamicbox_thaw_visibility(Evas_Object *dynamicbox);
+extern int evas_object_dynamicbox_visibility_is_freezed(Evas_Object *dynamicbox);
+extern int evas_object_dynamicbox_dump(Evas_Object *dynamicbox, const char *filename);
+extern int evas_object_dynamicbox_is_dynamicbox(Evas_Object *dynamicbox);
+extern void evas_object_dynamicbox_use_render_animator(int flag);
+extern void evas_object_dynamicbox_set_permanent_delete(Evas_Object *dynamicbox, int flag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+/* End of a file */
diff --git a/live.viewer/viewer/include/main.h b/live.viewer/viewer/include/main.h
new file mode 100644 (file)
index 0000000..595cf1f
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * 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 __MAIN_H__
+#define __MAIN_H__
+
+#if !defined(PKGNAME)
+#  define PKGNAME "com.samsung.w-add-viewer"
+#endif
+
+#define S_(str) dgettext("sys_string", str)
+#define T_(str) dgettext(PACKAGE, str)
+#undef N_
+#define N_(str) (str)
+#undef _
+#define _(str) gettext(str)
+
+#define _EDJ(x) elm_layout_edje_get(x)
+#define _X(x) (x*elm_config_scale_get())
+
+/* Build */
+#define HAPI __attribute__((visibility("hidden")))
+
+struct appdata
+{
+       Evas_Object *win;
+       Evas_Object *layout;
+       Evas_Object *scroller_box;
+       Ecore_Event_Handler *handler;
+       int box_created;
+};
+
+#endif /* __MAIN_H__ */
+
diff --git a/live.viewer/viewer/po/CMakeLists.txt b/live.viewer/viewer/po/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0bf6fb1
--- /dev/null
@@ -0,0 +1,33 @@
+# for i18n
+
+SET(POFILES
+da.po et.po gl.po is.po lo.po nb.po ro.po ta.po zh_CN.po
+ar.po de_DE.po eu.po gu.po it_IT.po lt.po ne.po ru_RU.po te.po zh_HK.po
+as.po el_GR.po fa.po he.po ja_JP.po lv.po nl_NL.po sinhala.po th.po zh_TW.po
+az.po en.po fi.po hi.po ka.po mk.po or.po sk.po tr_TR.po
+bg.po en_PH.po fil.po hr.po khmer.po ml.po pa.po sl.po uk.po
+bn.po en_US.po fr_CA.po hu.po kk.po mr.po pl.po sq.po ur.po
+ca.po es_ES.po fr_FR.po hy.po kn.po ms.po pt_BR.po sr.po uz.po
+cs.po es_MX.po ga.po id.po ko_KR.po my.po pt_PT.po sv.po vi.po
+)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE("PO: ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/live.viewer/viewer/po/ar.po b/live.viewer/viewer/po/ar.po
new file mode 100644 (file)
index 0000000..0aa09e7
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "تطبيقات"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "تعذر الإزالة"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "انقر مع الاستمرار فوق عنصر واجهة المستخدم لنقله."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "تم تغيير الشاشة الرئيسية."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "جاري التحميل ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "يتعذر تحميل البيانات. انقر لإعادة المحاولة."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "تتعذر إضافة التطبيق. لا تتوفّر مساحة إضافية على الشاشة الرئيسية."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "تتعذر إضافة التطبيق المصغر. لا تتوفّر مساحة إضافية على الشاشة الرئيسية."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "التطبيقات موجودة بالفعل."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "التطبيق المصغر موجود بالفعل."
+
diff --git a/live.viewer/viewer/po/as.po b/live.viewer/viewer/po/as.po
new file mode 100644 (file)
index 0000000..cd17b32
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "এপ্প্‌চ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ৱিজেট"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "আঁতৰাবলৈ অক্ষম৷"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ইয়াক লৈ যাবৰ বাবে এটা ৱিজেট টিপক আৰু ধৰি থাকক৷"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "গৃহ স্ক্ৰীণ সলনি কৰা হৈছে৷"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "লোড হৈ আছে..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ডাটা লোড কৰিবলৈ অক্ষম৷ পুনঃচেষ্টা কৰিবৰ বাবে টিপক।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "এপ্লিকেশ্বন যোগ কৰিবলৈ অক্ষম৷ গৃহ স্ক্ৰীণত কোনো কোঠা নাই৷"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ৱিজেট যোগ কৰিবলৈ অক্ষম৷ গৃহ স্ক্ৰীণত কোনো কোঠা নাই৷"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "এপ্লিকেশ্বন ইতিমধ্যে মজুত আছে৷"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ৱিজেট ইতিমধ্যে মজুত আছে৷"
+
diff --git a/live.viewer/viewer/po/az.po b/live.viewer/viewer/po/az.po
new file mode 100644 (file)
index 0000000..a8c0cea
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Proqramlar"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Qurğu"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Silmək mümkün deyil."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Yerini dəyişmək üçün piktoqrama vurub saxlayın."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Əsas ekran dəyişib."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Yüklənir..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Məlumatları yükləmək mümkün deyil. Yenidən cəhd etmək üçün vurun"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Proqram əlavə etmək mümkün olmadı. Əsas ekranda artıq yer yoxdur."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Piktoqram əlavə etmək mümkün olmadı. Əsas ekranda artıq yer yoxdur."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Proqram artıq mövcuddur."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Piktoqram artıq mövcuddur."
+
diff --git a/live.viewer/viewer/po/bg.po b/live.viewer/viewer/po/bg.po
new file mode 100644 (file)
index 0000000..02bb97e
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Приложения"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Визуален елемент"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Не може да се премахне."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Чукнете и задръжте виз. ел., за да го преместите."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Началният екран е променен."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Зареждане"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Данните не могат да се заредят. Чукнете, за да опитате отново."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Приложението не може да се добави. Няма повече място в началния екран."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Визуалният елемент не може да се добави. Няма повече място в началния екран."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Приложението вече съществува."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Визуалният елемент вече съществува."
+
diff --git a/live.viewer/viewer/po/bn.po b/live.viewer/viewer/po/bn.po
new file mode 100644 (file)
index 0000000..af7135c
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "অ্যাপস"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "উইজেট"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "অপসারণ করতে অক্ষম।"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "উইজেট সরাতে সেটি ট্যাপ করে ধরে থাকুন।"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "হোম স্ক্রিন পরিবর্তিত।"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "লোড হচ্ছে..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "তথ্য লোড করতে অক্ষম৷ পুনরায় চেষ্টা করতে ট্যাপ করুন৷"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "অ্যাপ্লিকেশন যোগ করতে অক্ষম। হোম স্ক্রিনে আর রুম নেই।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "উইজেট যোগ করতে অক্ষম। হোম স্ক্রিনে আর রুম নেই।"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "অ্যাপ্লিকেশন ইতিমধ্যে বিদ্যমান।"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "উইজেট ইতিমধ্যে বিদ্যমান।"
+
diff --git a/live.viewer/viewer/po/ca.po b/live.viewer/viewer/po/ca.po
new file mode 100644 (file)
index 0000000..d9be1ab
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicacions"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "No es pot eliminar"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Mantenir tocat un widget per moure'l"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ha canviat la pantalla d'inici"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Carregant..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "No es poden carregar les dades. Toqui per tornar-ho a intentar."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No es pot afegir l'aplicació. No hi ha més lloc a la pantalla d'inici."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No es pot afegir el widget. No hi ha més lloc a la pantalla d'inici."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "L'aplicació ja existeix."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "El widget ja existeix."
+
diff --git a/live.viewer/viewer/po/cs.po b/live.viewer/viewer/po/cs.po
new file mode 100644 (file)
index 0000000..a4004f9
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikace"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nelze odstranit."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Klepnutím a podržením nástroje ho přesunete."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Domovská obrazovka byla změněna."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Nahrávám..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Data nelze načíst. Klepnutím opakujte akci."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Aplikaci nelze přidat. Na domovské obrazovce již není místo."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nástroj nelze přidat. Na domovské obrazovce již není místo."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikace již existuje."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Nástroj již existuje."
+
diff --git a/live.viewer/viewer/po/da.po b/live.viewer/viewer/po/da.po
new file mode 100644 (file)
index 0000000..2376344
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Programmer"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Kan ikke fjerne."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tryk og hold en widget nede for at flytte den."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Startskærm ændret."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Indlæser data ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Kan ikke indlæse data. Tap for at prøve igen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kunne ikke tilføje program. Ikke mere plads på startskærmen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kunne ikke tilføje widget. Ikke mere plads på startskærmen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Programmet findes allerede."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget findes allerede."
+
diff --git a/live.viewer/viewer/po/de_DE.po b/live.viewer/viewer/po/de_DE.po
new file mode 100644 (file)
index 0000000..6578174
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Menü"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Entfernen nicht möglich"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Zum Verschieben des Widgets tippen und halten."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Startbildschirm geändert"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Lädt..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Daten konnten nicht geladen werden. Für erneuten Versuch tippen"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Anwendung kann nicht hinzugefügt werden. Kein Platz mehr auf dem Startbildschirm."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Widget kann nicht hinzugefügt werden. Kein Platz mehr auf dem Startbildschirm."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Anwendung ist bereits vorhanden."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget bereits vorhanden."
+
diff --git a/live.viewer/viewer/po/el_GR.po b/live.viewer/viewer/po/el_GR.po
new file mode 100644 (file)
index 0000000..8f9a273
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Εφαρμογές"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Δεν είναι δυνατή η αφαίρεση."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Πατ. παρατετ. ένα widget για να το μετακινήσετε."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Η αρχική οθόνη άλλαξε."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Φόρτωση..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Δεν είναι δυνατή η φόρτωση δεδομένων. Πατήστε για να δοκιμάσετε ξανά."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Δεν είναι δυνατή η προσθήκη της εφαρμογής. Δεν υπάρχει χώρος στην αρχική οθόνη."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Δεν είναι δυνατή η προσθήκη του widget. Δεν υπάρχει χώρος στην αρχική οθόνη."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Η εφαρμογή υπάρχει ήδη."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Το widget υπάρχει ήδη."
+
diff --git a/live.viewer/viewer/po/en.po b/live.viewer/viewer/po/en.po
new file mode 100644 (file)
index 0000000..ee9694b
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Unable to remove."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tap and hold a widget to move it."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Home screen changed."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Unable to load data. Tap to retry."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add application. No more room on home screen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add widget. No more room on home screen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Application already exists."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget already exists."
+
diff --git a/live.viewer/viewer/po/en_PH.po b/live.viewer/viewer/po/en_PH.po
new file mode 100644 (file)
index 0000000..ee9694b
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Unable to remove."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tap and hold a widget to move it."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Home screen changed."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Unable to load data. Tap to retry."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add application. No more room on home screen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add widget. No more room on home screen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Application already exists."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget already exists."
+
diff --git a/live.viewer/viewer/po/en_US.po b/live.viewer/viewer/po/en_US.po
new file mode 100644 (file)
index 0000000..38db94d
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Unable to remove."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Press and hold a widget to move it."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Home screen changed."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Loading..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Unable to load data. Tap to retry."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add application. No more room on home screen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Unable to add widget. No more room on home screen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Application already exists."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget already exists."
+
diff --git a/live.viewer/viewer/po/es_ES.po b/live.viewer/viewer/po/es_ES.po
new file mode 100644 (file)
index 0000000..f97092e
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicaciones"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "No se puede eliminar"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Mantenga pulsado un widget para moverlo"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Se ha cambiado la pantalla de inicio"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "No se pueden cargar datos. Pulse para volver a intentarlo."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No se puede añadir la aplicación. No hay espacio disponible en la pantalla de inicio."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No se puede añadir el widget. No hay espacio disponible en la pantalla de inicio."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "La aplicación ya existe."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "El widget ya existe."
+
diff --git a/live.viewer/viewer/po/es_MX.po b/live.viewer/viewer/po/es_MX.po
new file mode 100644 (file)
index 0000000..ecfe438
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicaciones"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "No se puede eliminar."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Mantenga pulsado el Widget para moverlo."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Se cambió la pantalla de inicio."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "No es posible cargar los datos. Pulse para intentarlo de nuevo."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No se puede añadir la aplicación. No hay espacio disponible en la pantalla de inicio."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "No se puede añadir el widget. No hay espacio disponible en la pantalla de inicio."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "La aplicación ya existe."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "El widget ya existe."
+
diff --git a/live.viewer/viewer/po/et.po b/live.viewer/viewer/po/et.po
new file mode 100644 (file)
index 0000000..9942aed
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Rakendused"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Vidin"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Ei saa eemaldada."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Vidina teisaldamiseks toksake ja hoidke seda."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Avaekraani on muudetud."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Laadimine..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Andmeid ei saa laadida. Toksake, et proovida uuesti."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Rakendust ei saa lisada. Avaekraanil pole rohkem ruumi."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Vidinat ei saa lisada. Avaekraanil pole rohkem ruumi."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Rakendus on juba olemas."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Vidin on juba olemas."
+
diff --git a/live.viewer/viewer/po/eu.po b/live.viewer/viewer/po/eu.po
new file mode 100644 (file)
index 0000000..7bdf91a
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikazioak"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ElMezularitza tua"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Ezin da kendu"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Ukitu eta eutsi widget bat mugitzeko"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Pantaila nagusia aldatuta"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Kargatzen..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Ezin dira datuak kargatu. Ukitu berriz saiatzeko."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ezin da aplikazioa gehitu. Ez dago lekurik pantaila nagusian."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ezin da widgeta gehitu. Ez dago lekurik pantaila nagusian."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikazioa badago lehendik."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widgeta badago lehendik."
+
diff --git a/live.viewer/viewer/po/fa.po b/live.viewer/viewer/po/fa.po
new file mode 100644 (file)
index 0000000..b00867f
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "برنامه"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "نوار ابزار"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "حذف ممکن نیست"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "برای جابجا کردن ابزارک روی آن ضربه زده و نگه دارید."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "صفحه اصلی تغییر کرد."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "در حال دانلود..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "بارگیری داده ممکن نیست. برای امتحان مجدد ضربه بزنید."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "افزودن برنامه ممکن نیست. فضای بیشتری در صفحه اصلی وجود ندارد."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "افزودن ویجت ممکن نیست. فضای بیشتری در صفحه اصلی وجود ندارد."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "برنامه از قبل وجود دارد."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ویجت از قبل وجود دارد."
+
diff --git a/live.viewer/viewer/po/fi.po b/live.viewer/viewer/po/fi.po
new file mode 100644 (file)
index 0000000..8be8f7d
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Sovellukset"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Pienoisohjelma"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Ei voi poistaa."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Siirrä pienoisohjelmaa painamalla jonkin aikaa."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Alkunäyttö vaihdettu."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Ladataan..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Tietoja ei voi ladata. Yritä napauttamalla uudelleen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Sovellusta ei voi lisätä. Alkunäytössä ei ole enää tilaa."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Pienoisohjelmaa ei voi lisätä. Alkunäytössä ei ole enää tilaa."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Sovellus on jo olemassa."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Pienoisohjelma on jo olemassa."
+
diff --git a/live.viewer/viewer/po/fil.po b/live.viewer/viewer/po/fil.po
new file mode 100644 (file)
index 0000000..741d656
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Hindi maalis."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tap and hold a widget to move it."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Pinalitan ang home screen."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Naglo-load..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Hindi ma-load ang data. I-tap upang subukang muli."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Hindi maidagdag ang application. Wala nang espasyo sa home screen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Hindi maidagdag ang widget. Wala nang espasyo sa home screen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Umiiral na ang application."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Umiiral na ang widget."
+
diff --git a/live.viewer/viewer/po/fr_CA.po b/live.viewer/viewer/po/fr_CA.po
new file mode 100644 (file)
index 0000000..4fff46f
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Applications"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widgets"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Suppression impossible."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Touchez longuement le widget pour le déplacer."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Écran d'accueil modifié"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Chargement..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Impossible de charger les données. Appuyez pour réessayer."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossible d'ajouter l'application. Espace saturé sur l'écran d'accueil."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossible d'ajouter le widget. Espace saturé sur l'écran d'accueil."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "L'application existe déjà."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Le widget existe déjà."
+
diff --git a/live.viewer/viewer/po/fr_FR.po b/live.viewer/viewer/po/fr_FR.po
new file mode 100644 (file)
index 0000000..63f9e31
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Applications"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widgets"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Suppression impossible"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "App. de façon prolongée sur widget pour déplacer."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ecran d'accueil modifié"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Chargement en cours."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Impossible de charger les données. Appuyez pour réessayer."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossible d'ajouter l'application. Espace saturé sur l'écran d'accueil."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossible d'ajouter le widget. Espace saturé sur l'écran d'accueil."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "L'application existe déjà."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Le widget existe déjà."
+
diff --git a/live.viewer/viewer/po/ga.po b/live.viewer/viewer/po/ga.po
new file mode 100644 (file)
index 0000000..2a4a623
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Feidhmchláir"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Giuirléid"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Ní féidir é a bhaint."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tapáil agus coinnigh giuirléid lena bogadh"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Scáileán baile athraithe."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Ag lódáil..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Ní féidir sonraí a choinneáil. Tapáil le triail arís."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ní féidir í a chur leis an bhfeidhmchlár. Níl aon spás eile fágtha ar an scáileán baile."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ní féidir giuirléid a chur leis. Níl aon spás eile fágtha ar an scáileán baile."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Tá an feidhmchlár ann cheana."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Tá giuirléid ann cheana."
+
diff --git a/live.viewer/viewer/po/gl.po b/live.viewer/viewer/po/gl.po
new file mode 100644 (file)
index 0000000..bdad5c9
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicacións"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Non se pode eliminar"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Mantén tocado un widget para movelo"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Pantalla de inicio cambiada"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Cargando..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Non se poden cargar datos. Toca para tentalo de novo."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Non se pode engadir a aplicación. Non hai máis espazo na pantalla de inicio."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Non se pode engadir o widget. Non hai máis espazo na pantalla de inicio."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "A aplicación xa existe."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "O widget xa existe."
+
diff --git a/live.viewer/viewer/po/gu.po b/live.viewer/viewer/po/gu.po
new file mode 100644 (file)
index 0000000..dffcd28
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ઍપ્સ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "વિજેટ"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "કાઢવામાં અસમર્થ."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "વિજેટ ખસેડવા માટે તેને ટૅપ કરો અને હોલ્ડ કરો"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "હોમ સ્ક્રીન બદલાઇ ગઈ છે."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "લોડિંગ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ડેટા લોડ કરવામાં અસમર્થ. ફરીથી પ્રયાસ કરવા માટે ટૅપ કરો."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "અનુપ્રયોગ ઉમેરવા માટે અસમર્થ. હોમ સ્ક્રીન પર હવે વધુ અવકાશ નથી."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "વિજૅટ ઉમેરવામાં અસમર્થ. હોમ સ્ક્રીન પર હવે વધુ અવકાશ નથી."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "અનુપ્રયોગ પહેલાંથી હયાત છે."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "વિજૅટ પહેલાંથી હયાત છે."
+
diff --git a/live.viewer/viewer/po/he.po b/live.viewer/viewer/po/he.po
new file mode 100644 (file)
index 0000000..149d6de
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "יישומים"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "לא ניתן להסיר"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "הקש באריכות על ווידג'ט כדי להזיז אותו."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "מסך הבית השתנה."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "טוען..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "לא ניתן לטעון נתונים. הקש כדי לנסות שנית."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "לא ניתן להוסיף יישום. אין עוד מקום במסך הבית."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "לא ניתן להוסיף יישומון. אין עוד מקום במסך הבית."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "יישום זה כבר קיים."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "היישומון כבר קיים."
+
diff --git a/live.viewer/viewer/po/hi.po b/live.viewer/viewer/po/hi.po
new file mode 100644 (file)
index 0000000..ece57de
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "एप्स"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "विजेट"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "हटाने में असमर्थ।"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "विजेट ले जाने के लिए उसे टैप करे रखें"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "होम स्क्रीन बदली गई।"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "लोड हो रहा है..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "डाटा लोड करने में अक्षम। फिर से प्रयास करने हेतु टैप करें।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ऐप्लिकेशन जोड़ने में अक्षम। होम स्क्रीन पर कोई और रूम नहीं है।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "विजेट जोड़ने में अक्षम। होम स्क्रीन पर कोई और रूम नहीं है।"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "एप्लिकेशन पहले से मौजूद है।"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "विजेट पहले से मौजूद है।"
+
diff --git a/live.viewer/viewer/po/hr.po b/live.viewer/viewer/po/hr.po
new file mode 100644 (file)
index 0000000..2bd136f
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikacije"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nemoguće ukloniti."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Dodirnite i držite widget da biste ga premjestili."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Početni zaslon je promijenjen."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Učitavanje..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nije moguće učitati podatke. Dodirnite radi ponavljanja."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Dodavanje aplikacije nije moguće. Nema više mjesta na početnom zaslonu."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Dodavanje widgeta nije moguće. Nema više mjesta na početnom zaslonu."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikacija već postoji."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget već postoji."
+
diff --git a/live.viewer/viewer/po/hu.po b/live.viewer/viewer/po/hu.po
new file mode 100644 (file)
index 0000000..019a383
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Alkalmazások"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nem lehet eltávolítani."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tartsa ujját a widgeten, amelyet át kíván helyezni."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "A kezdőképernyő módosult."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Betöltés..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nem lehet betölteni az adatokat. Érintse meg az újabb próbálkozáshoz."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nem adható hozzá alkalmazás. Nincs több hely a kezdőképernyőn."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nem adható hozzá widget. Nincs több hely a kezdőképernyőn."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Ez az alkalmazás már megvan."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Ez a widget már megvan."
+
diff --git a/live.viewer/viewer/po/hy.po b/live.viewer/viewer/po/hy.po
new file mode 100644 (file)
index 0000000..068921d
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Ծրագրեր"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Վիդջետ"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Անհնար է հեռացնել:"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Տեղափոխելու համար թակեք և պահեք պատկերագիրը:"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Հիմնական էկրանը փոխվել է:"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Բեռնում է..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Անհնար է տվյալներ բեռնել: Թակեք՝ նորից փորձելու համար"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Անհնար է ծրագիր ավելացնել. այլևս տեղ չկա հիմնական էկրանում:"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Անհնար է պատկերագիր ավելացնել. այլևս տեղ չկա հիմնական էկրանում:"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Ծրագիրն արդեն գոյություն ունի:"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Պատկերագիրն արդեն գոյություն ունի:"
+
diff --git a/live.viewer/viewer/po/id.po b/live.viewer/viewer/po/id.po
new file mode 100644 (file)
index 0000000..f0d8888
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikasi"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Tidak dapat menghapus."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Ketuk dan tahan widget untuk memindahkannya."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Layar depan diubah."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Meloading…"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Tidak dapat memuat data. Ketuk untuk mencoba lagi."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Tidak dapat menambah aplikasi. Tidak ada ruang lagi di layar depan."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Tidak dapat menambah widget. Tidak ada ruang lagi di layar depan."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikasi sudah ada."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget sudah ada."
+
diff --git a/live.viewer/viewer/po/is.po b/live.viewer/viewer/po/is.po
new file mode 100644 (file)
index 0000000..f702c7b
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Forrit"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Græja"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Mistókst að fjarlægja."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Pikkaðu og haltu inni á græju til að færa hana."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Heimaskjá var breytt."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Hleð..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Ekki tókst að hlaða gögn. Pikkaðu til að reyna aftur."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ekki er hægt að bæta við forriti. Ekki er pláss á heimaskjánum."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ekki er hægt að bæta við græju. Ekki er pláss á heimaskjánum."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Forritið er þegar til."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Græjan er þegar til."
+
diff --git a/live.viewer/viewer/po/it_IT.po b/live.viewer/viewer/po/it_IT.po
new file mode 100644 (file)
index 0000000..129ddd7
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Applicazioni"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Impossibile rimuovere."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Toccate e tenete premuto un widget per spostarlo."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Schermata Home modificata."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Caricamento..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Impossibile caricare i dati. Toccate per riprovare."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossibile aggiungere applicazione. Spazio insufficiente nella schermata Home."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossibile aggiungere widget. Spazio insufficiente nella schermata Home."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Applicazione già esistente."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget già esistente."
+
diff --git a/live.viewer/viewer/po/ja_JP.po b/live.viewer/viewer/po/ja_JP.po
new file mode 100644 (file)
index 0000000..5f95683
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "アプリ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ウィジェット"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "移動することができません。"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "移動するには、ウィジェットを長押しします。"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ホーム画面が変更されました。"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "読み込み中..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "データをロードできません。タップして再度実行してください。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "アプリケーションを追加できません。ホーム画面にスペースがありません。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ウィジェットを追加できません。ホーム画面にスペースがありません。"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "アプリケーションは既に存在します。"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ウィジェットは既に存在します。"
+
diff --git a/live.viewer/viewer/po/ka.po b/live.viewer/viewer/po/ka.po
new file mode 100644 (file)
index 0000000..e540a2c
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "პროგრამები"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "გრაფიკული კლიპი"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ვერ მოცილდება."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ვიჯეტის გადასატანად დაარტყით მას და არ აიღოთ ხელი."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "საწყისი ეკრანი შეიცვალა."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "იტვირთება..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "მონაცემთა ჩატვირთვა შეუძლებელია. შეეხეთ და გაიმეორეთ მცდელობა"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "პროგრამა ვერ ემატება. საწყის ეკრანზე აღარ არის ადგილი."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ვიჯეტის დამატება შეუძლებელია. საწყის ეკრანზე აღარ არის ადგილი."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "პროგრამა უკვე არსებობს."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ვიჯეტი უკვე არის."
+
diff --git a/live.viewer/viewer/po/khmer.po b/live.viewer/viewer/po/khmer.po
new file mode 100644 (file)
index 0000000..5939e81
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "កម្មវិធី"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "វីដជីត"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "មិន​អាច​លុប។"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ប៉ះ​វីដជីត​មួយ​ឲ្យ​ជាប់​ដើម្បី​ផ្លាស់ទី​វា។"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "បាន​ប្តូរ​គេហ​អេក្រង់។"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "កំពុង​ផ្ទុក..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "មិន​អាច​ផ្ទុក​ទិន្នន័យ។ ប៉ះ​ដើម្បី​សាកល្បង​ម្ដងទៀត។"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "មិន​អាច​ថែម​កម្មវិធី។ គ្មាន​កន្លែង​ទៀត​លើ​គេហអេក្រង់។"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "មិន​អាច​ថែម​វីដជីត។ គ្មាន​កន្លែង​ទៀត​លើ​គេហអេក្រង់។"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "កម្មវិធី​មាន​ហើយ។"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "វីដជីត​មាន​ហើយ។"
+
diff --git a/live.viewer/viewer/po/kk.po b/live.viewer/viewer/po/kk.po
new file mode 100644 (file)
index 0000000..8168e31
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Бағдарламалар"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Виджет"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Алып тастау мүмкін емес."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Виджетті жылжыту үшін оны басып тұрыңыз."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Бастапқы экран өзгертілді."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Жазылуда..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Деректерді жүктеу мүмкін емес. Қайталау үшін түртіңіз"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Бағдарламаны қосу мүмкін емес. Бұл бастапқы экранда басқа орын жоқ."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Виджетті қосу мүмкін емес. Бұл бастапқы экранда басқа орын жоқ."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Бағдарлама бұрыннан бар."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Виджет бұрыннан бар."
+
diff --git a/live.viewer/viewer/po/kn.po b/live.viewer/viewer/po/kn.po
new file mode 100644 (file)
index 0000000..bc8927a
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ಅನ್ವಹಿಸುವಿಕೆಗಳು"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ವಿಜೆಟ್"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ಕದಲಿಸಲು ಅಸಮರ್ಥ."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ಅದನ್ನು ಕದಲಿಸಲು ಒಂದು ವಿಜೆಟ್‌ನ್ನು ತಟ್ಟಿ ಮತ್ತು ಹಿಡಿಯಿರಿ."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ಹೋಮ್ ಸ್ಕ್ರೀನ್ ಬದಲಾಯಿಸಲಾಗಿದೆ."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "ಲೋಡಿಂಗ್..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ಡೇಟಾ ಲೋಡ್ ಮಾಡಲು ಅಸಮರ್ಥ. ಮರುಪ್ರಯತ್ನಿಸಲು ಒತ್ತಿ."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ಅನ್ವಹಿಸುವಿಕೆ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಇನ್ನು ಕೊಠಡಿಗಳು ಇಲ್ಲ."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ವಿಜೆಟ್ ಸೇರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಹೋಮ್‌ ಸ್ಕ್ರೀನ್‌ನಲ್ಲಿ ಇನ್ನು ಕೊಠಡಿಗಳು ಇಲ್ಲ."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "ಅನ್ವಹಿಸುವಿಕೆ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ವಿಜೆಟ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ."
+
diff --git a/live.viewer/viewer/po/ko_KR.po b/live.viewer/viewer/po/ko_KR.po
new file mode 100644 (file)
index 0000000..424ef94
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "앱스"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "위젯"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "제거할 수 없습니다."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "위젯을 이동하려면 길게 누르세요."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "홈 화면이 변경되었습니다."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "로딩 중..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "데이터를 불러올 수 없습니다. 다시 시도하려면 누르세요."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "홈 화면에 공간이 없어 애플리케이션을 추가할 수 없습니다."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "홈 화면에 공간이 없어 위젯을 추가할 수 없습니다."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "같은 애플리케이션이 있습니다."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "같은 위젯이 있습니다."
+
diff --git a/live.viewer/viewer/po/lo.po b/live.viewer/viewer/po/lo.po
new file mode 100644 (file)
index 0000000..82751dc
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ແອັບ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ວິດເຈັທ"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ບໍ່ສາມາດເອົາອອກໄປໄດ້."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ແຕະວິດເຈັດຄ້າງໄວ້ເພື່ອຍ້າຍມັນ."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ໜ້າຈໍຫຼັກໄດ້ປ່ຽນ."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "ກຳລັງໂຫຼດ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ບໍ່ສາມາດໂຫຼດຂໍ້ມູນໄດ້. ເຄາະເພື່ອລອງໃໝ່."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ບໍ່ສາມາດເພີ່ມແອພພລິເຄຊັນໄດ້. ບໍ່ມີຫ້ອງຢູ່ໃນໜ້າຈໍຫຼັກອີກ."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ບໍ່ສາມາດເພີ່ມວິດເຈັດໄດ້. ບໍ່ມີຫ້ອງຢູ່ໃນໜ້າຈໍຫຼັກອີກ."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "ມີແອພພລິເຄຊັນຢູ່ແລ້ວ."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ມີວິດເຈັດຢູ່ແລ້ວ."
+
diff --git a/live.viewer/viewer/po/lt.po b/live.viewer/viewer/po/lt.po
new file mode 100644 (file)
index 0000000..b76e110
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Programos"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Valdiklis"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Negalima pašalinti."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Norėdami perkelti vald., bakstelėkite ir laikykite."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Pradžios ekranas pakeistas."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Įkeliama..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Neįmanoma įkelti duomenų. Bakstelėkite ir bandykite dar kartą."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Neįmanoma pridėti programos. Pradžios ekrane nebėra vietos."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Neįmanoma pridėti valdiklio. Pradžios ekrane nebėra vietos."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Programa jau yra."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Valdiklis jau yra."
+
diff --git a/live.viewer/viewer/po/lv.po b/live.viewer/viewer/po/lv.po
new file mode 100644 (file)
index 0000000..2d4760b
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Programmas"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Logrīks"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nevar noņemt."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Pieskarieties un turiet logrīku, lai to pārvietotu."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Sākuma ekrāns ir nomainīts."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Ielādē..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nevar ielādēt datus. Pieskarieties, lai mēģinātu vēlreiz."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nevar pievienot programmu. Sākuma ekrānā vairs nav vietas."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nevar pievienot logrīku. Sākuma ekrānā vairs nav vietas."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Programma jau pastāv."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Logrīks jau pastāv."
+
diff --git a/live.viewer/viewer/po/mk.po b/live.viewer/viewer/po/mk.po
new file mode 100644 (file)
index 0000000..ef83622
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Апликации"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Виџет"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Не може да се отстрани."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Допрете и држете виџет за да го поместите."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Почетниот екран е сменет."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Активирање..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Не можат да се вчитаат податоци. Допрете за повторен обид."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Не може да се додаде апликација. Нема веќе место на почетниот екран."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Не може да се додаде виџет. Нема веќе место на почетниот екран."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Апликацијата веќе постои."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Виџетот веќе постои."
+
diff --git a/live.viewer/viewer/po/ml.po b/live.viewer/viewer/po/ml.po
new file mode 100644 (file)
index 0000000..e201ac6
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ആപ്ലിക്കേഷനുകൾ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "വിഡ്ജെറ്റ്"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "നീക്കം ചെയ്യാന്‍ ആവുന്നില്ല."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "വിജിറ്റ് നീക്കുന്നതിന് അതില്‍ തട്ടി ഹോള്‍ഡ് ചെയ്യുക."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ഹോം സ്ക്രീന്‍ മാറ്റി."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "ലോഡ്‌ ചെയ്യുന്നു..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ഡാറ്റ ലോഡുചെയ്യാന്‍ കഴിയുന്നില്ല. വീണ്ടും ശ്രമിക്കുന്നതിന് ടാപ്പുചെയ്യുക"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ആപ്ലിക്കേഷൻ ചേർക്കാനാവില്ല. ഹോം സ്ക്രീനിൽ ഇനിയും സ്ഥലമില്ല."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "വിജിറ്റ് ചേർ‌ക്കാനാവില്ല. ഹോം സ്ക്രീനിൽ ഇനിയും സ്ഥലമില്ല."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "ആപ്ലിക്കേഷൻ നേരത്തേതന്നെ നിലവിലുണ്ട്."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "വിജിറ്റ് നേരത്തേതന്നെ നിലവിലുണ്ട്."
+
diff --git a/live.viewer/viewer/po/mr.po b/live.viewer/viewer/po/mr.po
new file mode 100644 (file)
index 0000000..2475c88
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ऍप्‍स"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "विजेट"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "काढण्यास अक्षम."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ते हलवण्या साठी विजेट टॅप आणि होल्ड करा."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "होम स्क्रीन बदलली."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "लोड होत आहे..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "डेटा लोड करण्यामध्‍ये अक्षम. पुनर्प्रयत्न करण्‍यासाठी टॅप करा."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "अनुप्रयोग जोडण्यात अक्षम. मुख्य स्‍क्रीनवर कोणतेही अधिक कक्ष नाहीत."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "विजेट जोडण्यात अक्षम. मुख्य स्‍क्रीनवर कोणतेही अधिक कक्ष नाहीत."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "अनुप्रयोग आधीपासूनच अस्तित्वात आहे."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "विजेट आधीपासूनच अस्तित्वात आहे."
+
diff --git a/live.viewer/viewer/po/ms.po b/live.viewer/viewer/po/ms.po
new file mode 100644 (file)
index 0000000..8348425
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikasi"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Tidak dapat mengalih keluar."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Ketik dan tahan widget untuk mengalihkannya."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Skrin utama ditukar."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Memuat…"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Tidak dapat memuatkan data. Ketik untuk mencuba semula."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Tidak dapat menambah aplikasi. Tiada ruang pada skrin utama."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Tidak dapat menambah widget. Tiada ruang pada skrin utama."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikasi telah wujud."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget telah wujud."
+
diff --git a/live.viewer/viewer/po/my.po b/live.viewer/viewer/po/my.po
new file mode 100644 (file)
index 0000000..0293fe9
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "အက္ပ္မ်ား"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "၀စ္ဂ်စ္တ္"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ျဖဳတ္ရန္ မရႏိုင္ပါ။"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ဝစ္ဂတ္အား ေရႊ႕ရန္ ဤအား ႏွိပ္ျပီး ကိုင္ထားပါ။"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "မူလ ဖန္သားျပင္ ေျပာင္းထားသည္။"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "အခ်က္အလက္ျဖည့္သြင္းေနပါသည္…"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ေဒတာ တင္ရန္ မရႏိုင္ပါ။ ျပန္ၾကိဳးစားရန္ ႏွိပ္ပါ။"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "အပလီေကးရွင္းကို ေပါင္းထည့္လို႔ မရႏိုင္ပါ။ မူလ ဖန္သားျပင္ေပၚ၌ အခန္းလြတ္ေနရာ ေနာက္ထပ္ မရွိေတာ့ပါ။"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ဝစ္ဂက္စ္ကို ေပါင္းထည့္လို႔ မရႏိုင္ပါ။ မူလ ဖန္သားျပင္ေပၚ၌ အခန္းလြတ္ေနရာ ေနာက္ထပ္ မရွိေတာ့ပါ။"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "အပလီေကးရွင္းက ရွိႏွင့္ေနၿပီးသား ျဖစ္သည္။"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ဝစ္ဂက္စ္က ရွိႏွင့္ေနၿပီးသား ျဖစ္သည္။"
+
diff --git a/live.viewer/viewer/po/nb.po b/live.viewer/viewer/po/nb.po
new file mode 100644 (file)
index 0000000..5f491da
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apper"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Kan ikke fjerne."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Trykk på og hold en widget for å flytte den."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Startskjerm endret."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Åpner..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Kan ikke laste data. Trykk for å prøve på nytt."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan ikke legge appen. Ikke mer plass på startskjermbildet."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan ikke legge widgeten. Ikke mer plass på startskjermbildet."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Appen finnes allerede."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widgeten finnes allerede."
+
diff --git a/live.viewer/viewer/po/ne.po b/live.viewer/viewer/po/ne.po
new file mode 100644 (file)
index 0000000..00317b0
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "एप्स"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "विजिट"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "हटाउन असमर्थ छ।"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "विजिटलाई सार्न ट्याप गरि समात्नुहोस्।"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "गृह स्क्रीन परिवर्तित भयो।"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "लोड हुँदै छ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "डाटा लोड गर्न सकेन। पुन: प्रयास गर्नुहोस् मा ट्याप गर्नुहोस्।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "अनुप्रयोग थप्‍न असक्षम। गृह स्क्रीनमा थप स्थान छैन।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "विजिट थप्न असक्षम। गृह स्क्रीनमा थप स्थान छैन।"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "अनुप्रयोगहरू पहिलेनै अवस्थित छ।"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "विजिट पहिलेनै अवस्थित छ।"
+
diff --git a/live.viewer/viewer/po/nl_NL.po b/live.viewer/viewer/po/nl_NL.po
new file mode 100644 (file)
index 0000000..3490463
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Kan niet verwijderen."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tik op widget en houd vast om deze te verplaatsen."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Startscherm gewijzigd."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Laden..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Kan gegevens niet laden. Tik om opnieuw te proberen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan applicatie niet toevoegen. Geen ruimte meer op startscherm."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan widget niet toevoegen. Geen ruimte meer op startscherm."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Applicatie bestaat al."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget bestaat al."
+
diff --git a/live.viewer/viewer/po/or.po b/live.viewer/viewer/po/or.po
new file mode 100644 (file)
index 0000000..c45fa50
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ଆପ୍ଲିକେସନଗୁଡିକ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ୱିଜେଟ୍"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ଅପସାରଣ କରିବାକୁ ଅସମର୍ଥ।"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ଏହା ଘୁଞ୍ଚାଇବାକୁ ଏକ ୱିଜେଟ୍ ଟ୍ୟାପ୍ କରି ଧରି ରଖନ୍ତୁ।"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ହୋମ୍ ସ୍କ୍ରିନ୍ ପରିବର୍ତ୍ତନ ହେଲା।"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "ଲୋଡ୍ କରୁଛି..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ଡାଟା ଲୋଡ୍ କରିବାକୁ ଅସମର୍ଥ। ପୁନଃଚେଷ୍ଟା କରିବାକୁ ଟ୍ୟାପ୍ କରନ୍ତୁ।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ଆପ୍ଲିକେସନ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ହୋମ୍ ସ୍କ୍ରିନରେ ଆଉ ଅଧିକ ପ୍ରକୋଷ୍ଟ ନାହିଁ।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ୱିଜାଟ୍ ଯୋଡିବାକୁ ଅସମର୍ଥ। ହୋମ୍ ସ୍କ୍ରିନରେ ଆଉ ଅଧିକ ପ୍ରକୋଷ୍ଟ ନାହିଁ।"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "ଆପ୍ଲିକେସନ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ରହିଛି।"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ୱିଜାଟ୍ ପୂର୍ବରୁ ବିଦ୍ୟମାନ ରହିଛି।"
+
diff --git a/live.viewer/viewer/po/pa.po b/live.viewer/viewer/po/pa.po
new file mode 100644 (file)
index 0000000..fb2b893
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ਐਪਸ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "ਵਿੱਜੇਟ"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ਹਟਾਉਣ ਵਿੱਚ ਅਸਮਰੱਥ।"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ਵਿੱਜੇਟ ਮੂਵ ਕਰਨ ਲਈ ਇਸਨੂੰ ਟੈਪ ਅਤੇ ਹੋਲਡ ਕਰੋ।"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ਹੋਮ ਸਕ੍ਰੀਨ ਬਦਲੀ।"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ਡੈਟਾ ਨੂੰ ਲੋਡ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ਅਨੁਪ੍ਰਯੋਗ ਜੋੜ੍ਹਣ ਵਿੱਚ ਅਸਮਰੱਥ। ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਹੋਰ ਰੂਮ ਨਹੀਂ।"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ਵਿਜੇਟ ਜੋੜਨ ਵਿੱਚ ਅਸਮਰੱਥ। ਹੋਮ ਸਕ੍ਰੀਨ ਵਿੱਚ ਹੋਰ ਰੂਮ ਨਹੀਂ।"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "ਅਨੁਪ੍ਰਯੋਗ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ।"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ਵਿਜੇਟ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ।"
+
diff --git a/live.viewer/viewer/po/pl.po b/live.viewer/viewer/po/pl.po
new file mode 100644 (file)
index 0000000..e775ca4
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikacje"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nie można usunąć."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Dotknij widget, przytrzymaj go, aby przesunąć."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Zmieniono ekran startowy."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Ładuję..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nie można załadować danych. Dotknij, aby spróbować ponownie."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nie można dodać aplikacji. Na ekranie startowym nie ma już miejsca."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nie można dodać widgetu. Na ekranie startowym nie ma już miejsca."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikacja już istnieje."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget już istnieje."
+
diff --git a/live.viewer/viewer/po/pt_BR.po b/live.viewer/viewer/po/pt_BR.po
new file mode 100644 (file)
index 0000000..4315d61
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicativos"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Impossível remover."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Toque e mantenha pressionada um widget para movê-lo."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Tela de início alterada."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Carregando..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Não é possível carregar os dados. Toque para tentar novamente."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Não é possível adicionar o aplicativo. Nenhum local na tela de início."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Não é possível adicionar o widget. Nenhum local na tela de início."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "O aplicativo já existe."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "O widget já existe."
+
diff --git a/live.viewer/viewer/po/pt_PT.po b/live.viewer/viewer/po/pt_PT.po
new file mode 100644 (file)
index 0000000..ff7f5ba
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicações"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Impossível remover."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Toque, sem soltar, um widget para o mover."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ecrã principal alterado."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "A carregar..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Impossível carregar dados. Toque para tentar novamente."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossível adicionar aplicação. Já não há espaço no ecrã principal."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Impossível adicionar widget. Já não há espaço no ecrã principal."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplicação já existe."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget já existe."
+
diff --git a/live.viewer/viewer/po/ro.po b/live.viewer/viewer/po/ro.po
new file mode 100644 (file)
index 0000000..9bcc44f
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplicaţii"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Imposibil de eliminat"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Ţineţi apăsat pe un widget pentru a-l muta."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ecranul de pornire s-a modificat."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Încărcare..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Datele nu pot fi încărcate. Atingeţi pentru a reîncerca."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Aplicaţia nu poate fi adăugată. Ecranul de pornire este plin."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Widgetul nu poate fi adăugat. Ecranul de pornire este plin."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplicaţia există deja."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widgetul există deja."
+
diff --git a/live.viewer/viewer/po/ru_RU.po b/live.viewer/viewer/po/ru_RU.po
new file mode 100644 (file)
index 0000000..0d34157
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Приложения"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Виджеты"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Невозможно удалить."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Для перемещения виджета нажмите и удерживайте его."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Главный экран изменен."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Загрузка..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Не удалось загрузить данные. Коснитесь для повтора"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Не удалось добавить приложение. Нет места на этом главном экране."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Не удалось добавить виджет. Нет места на этом главном экране."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Приложение уже существует."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Виджет уже существует."
+
diff --git a/live.viewer/viewer/po/sinhala.po b/live.viewer/viewer/po/sinhala.po
new file mode 100644 (file)
index 0000000..d061177
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "යෙදුම්"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "වි‍ජෙට්ටුව"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ඉවත් කළ නොහැක."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "විජෙට්ටුව චලනය කිරීමට ඊට තට්ටු කර තබා ගන්න."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "මුල් පිටු තිරය වෙනස් කෙරිණි."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "පූරණය කරමින්..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "දත්ත ප්‍රවේශනය කිරීමට නොහැකිය. යළි උත්සාහ කිරීමට තට්ටු කරන්න"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "යෙදුම එක් කිරීමට නොහැකි විය. මුල්පිටු තිරය මත තවත් ඉඩ නැත."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "විජෙට්ටුවක් එක් කළ නොහැක. මුල්පිටු තිරය මත තවත් ඉඩ නැත."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "යෙදුම දැනටමත් තිබේ."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "විජට්ටුව දැනටමත් පවතී."
+
diff --git a/live.viewer/viewer/po/sk.po b/live.viewer/viewer/po/sk.po
new file mode 100644 (file)
index 0000000..f1f7ed0
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikácie"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nedá sa odstrániť."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Ťukn. na miniaplikáciu a podržaním ju premiestnite."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Domovská obrazovka sa zmenila."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Načítava sa..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nemožno načítať údaje. Ťuknutím to môžete skúsiť znova."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Aplikáciu nemožno pridať. Na domovskej obrazovke už nie je voľné miesto."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Miniaplikáciu nemožno pridať. Na domovskej obrazovke už nie je voľné miesto."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikácia už existuje."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Miniaplikácia už existuje."
+
diff --git a/live.viewer/viewer/po/sl.po b/live.viewer/viewer/po/sl.po
new file mode 100644 (file)
index 0000000..6ee853e
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikacije"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Pripomoček"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Ni mogoče odstraniti."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Pritisnite in držite pripomoček, da ga premaknete."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Domači zaslon je spremenjen."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Nalaganje..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Podatkov ni mogoče naložiti. Pritisnite, da poskusite znova."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Aplikacije ni mogoče dodati. Na domačem zaslonu ni več prostora."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Pripomočka ni mogoče dodati. Na domačem zaslonu ni več prostora."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikacija že obstaja."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Pripomoček že obstaja."
+
diff --git a/live.viewer/viewer/po/sq.po b/live.viewer/viewer/po/sq.po
new file mode 100644 (file)
index 0000000..dc0fdac
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikacionet"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Mini-aplikacion"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nuk mund të heqë."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Prek dhe mbaj miniaplikacionin për ta lëvizur."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ekrani bazë u ndryshua."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Duke ngarkuar..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Nuk mund të ngarkoj të dhëna. Trokit për të riprovuar."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nuk mund të shtoj aplikacionin. Nuk ka më vend në ekranin bazë."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nuk mund të shtoj widget-in. Nuk ka më vend në ekranin bazë."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikacioni ekziston tashmë."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget-i ekziston tashmë."
+
diff --git a/live.viewer/viewer/po/sr.po b/live.viewer/viewer/po/sr.po
new file mode 100644 (file)
index 0000000..5db6c5c
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Aplikacije"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Nemoguće ukloniti."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Kucni i zadrži widget radi njegovog premeštanja."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Početni ekran je promenjen."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Učitavanje..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Učitavanje podataka nije moguće. Kucni za ponovni pokušaj."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nije moguće dodati aplikaciju. Nema više mesta na početnom ekranu."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Nije moguće dodati widget. Nema više mesta na početnom ekranu."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Aplikacija već postoji."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget već postoji."
+
diff --git a/live.viewer/viewer/po/sv.po b/live.viewer/viewer/po/sv.po
new file mode 100644 (file)
index 0000000..efaca9e
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Program"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Det går inte att ta bort."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Tryck på och håll ned en widget för att flytta den."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Startsidan har ändrats."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Laddar..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Det går inte att läsa in data. Tryck om du vill försöka igen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan inte lägga till program. Det finns ingen mer plats på hemskärmen."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Kan inte lägga till widget. Det finns ingen mer plats på hemskärmen."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Programmet finns redan."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widgeten finns redan."
+
diff --git a/live.viewer/viewer/po/ta.po b/live.viewer/viewer/po/ta.po
new file mode 100644 (file)
index 0000000..9a7ff7c
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ப.பாடுகள்"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "விட்ஜெட்"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "அகற்ற முடியவில்லை."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "ஒரு விட்ஜெட்டை இதற்கு நகர்த்த டேப் செய்து வைத்திருக்கவும்."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "முகப்புத் திரை மாற்றப்பட்டது."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "லோடிங்..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "தரவை ஏற்ற இயலவில்லை. மீண்டும் முயலவென டேப் செய்க."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "பயன்பாட்டை சேர்க்க இயலவில்லை. முகப்புத் திரையில் இடமில்லை."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "விட்ஜெட்டைச் சேர்க்க முடியவில்லை. முகப்புத் திரையில் இடமில்லை."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "பயன்பாடு முன்பே உள்ளது."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "விட்ஜெட் முன்பே உள்ளது."
+
diff --git a/live.viewer/viewer/po/te.po b/live.viewer/viewer/po/te.po
new file mode 100644 (file)
index 0000000..2622fa9
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ఆప్స్"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "విడ్జెట్"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "తీసివేయడం సాధ్యం కాదు."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "దీన్ని తరలించేందుకు ఒక విడ్జెట్‌ను నొక్కి పట్టి ఉంచండి."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "హోమ్ స్క్రీన్ మారింది."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "లోడ్ అవుతోంది..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "డేటాను లోడ్ చేయడం సాధ్యం కాదు. మళ్లీ ప్రయత్నించడానికి ట్యాప్ చేయండి."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "అప్లికేషన్‌ని జోడించడం సాధ్యం కాదు. హోమ్ స్క్రీన్‌లో గది లేదు."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "విడ్జెట్‌ను జోడించడం సాధ్యం కాదు. హోమ్ స్క్రీన్‌లో గది లేదు."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "అప్లికేషన్ ఇప్పటికే ఉంది."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "విడ్జెట్ ఇప్పటికే ఉంది."
+
diff --git a/live.viewer/viewer/po/th.po b/live.viewer/viewer/po/th.po
new file mode 100644 (file)
index 0000000..9a2d616
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "แอพ"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ลบ​ไม่​ได้"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "สัมผัส​ Widget ​ค้าง​ไว้​เพื่อ​เลื่อน"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "เปลี่ยนหน้าจอหลักแล้ว"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "โหลด..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ไม่สามารถโหลดข้อมูลได้ สัมผัสเพื่อลองอีกครั้ง"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ไม่สามารถเพิ่มแอพพลิเคชั่นได้ ไม่มีที่ว่างเพิ่มในหน้าจอหลัก"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ไม่สามารถเพิ่มวิดเจ็ท ไม่มีที่ว่างเพิ่มในหน้าจอหลัก"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "มีแอพพลิเคชั่นอยู่แล้ว"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "มีวิดเจ็ทอยู่แล้ว"
+
diff --git a/live.viewer/viewer/po/tr_TR.po b/live.viewer/viewer/po/tr_TR.po
new file mode 100644 (file)
index 0000000..70bd6d5
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Uygulamalar"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Kaldırılamıyor"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Bir widget'ı taşımak için dokunun ve bırakmayın."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Ana ekran değişti."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Yükleniyor..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Veri yüklenemiyor. Tekrar denemek için dokunun."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Uygulama eklenemiyor. Ana sayfa ekranında yer yok."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Widget eklenemiyor. Ana sayfa ekranında yer yok."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Uygulama zaten mevcut."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget zaten mevcut."
+
diff --git a/live.viewer/viewer/po/uk.po b/live.viewer/viewer/po/uk.po
new file mode 100644 (file)
index 0000000..d0aba38
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Програми"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Віджет"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Неможливо видалити."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Натисніть і утримуйте віджет, щоб перемістити його."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Головний екран змінено."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Завантаження..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Неможливо завантажити дані. Натисніть, щоб спробувати ще раз"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Неможливо додати програму. На цьому екрані оформлення більше немає місця."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Неможливо додати віджет. На цьому екрані оформлення більше немає місця."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Така програма вже існує."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Такий віджет уже існує."
+
diff --git a/live.viewer/viewer/po/update-po.sh b/live.viewer/viewer/po/update-po.sh
new file mode 100644 (file)
index 0000000..dc707ad
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+PACKAGE=volume
+SRCROOT=../src
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW
+ALL_LINGUAS="ar bg ca cs da de_DE el_GR en en_GB en_US es_ES fi fr_FR he hi hr hu id it_IT ja_JP ko_KR lt lv ms nl_NL no pl pt_PT ro ru_RU sk sl sr sv th tr_TR uk vi zh_CN zh_HK zh_TW"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot  "
+if [ ! -e $POTFILES ] ; then
+       echo "$POTFILES not found"
+       exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+               --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES
+if [ $? -ne 0 ]; then
+       echo "xgettext error"
+       exit 1
+fi
+
+if [ ! -f ${PACKAGE}.po ]; then
+       echo "No such file: ${PACKAGE}.po"
+       exit 1
+fi
+
+rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot
+echo "done"
+
+for LANG in $ALL_LINGUAS; do
+       echo "$LANG : "
+
+       if [ ! -e $LANG.po ] ; then
+               sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po
+               echo "${LANG}.po created"
+       else
+               if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+                       if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+                               rm -f ${LANG}.new.po
+                       else
+                               if mv -f ${LANG}.new.po ${LANG}.po; then
+                                       echo ""
+                               else
+                                       echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+                                       rm -f ${LANG}.new.po
+                                       exit 1
+                               fi
+                       fi
+               else
+                       echo "msgmerge for $LANG failed!"
+                       rm -f ${LANG}.new.po
+               fi
+       fi
+       echo ""
+done
+
diff --git a/live.viewer/viewer/po/ur.po b/live.viewer/viewer/po/ur.po
new file mode 100644 (file)
index 0000000..775efbd
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "ایپلیکیشنز"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "وڈجیٹ"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "ہٹانے سے قاصر۔"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "اسے منتقل کرنے کے لیے کسی وجٹ کو دبائیں یا دبا کر رکھیں"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "ہوم اسکرین تبدیل ہوگئی۔"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "لوڈنگ..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "ڈیٹا لوڈ کرنے سے قاصر۔ پھرکوشش کرنے کے لئے تھپتھپائیں۔"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "اپلیکیشن شامل کرنے سے قاصر۔ ہوم اسکرین پر مزید جگہ نہیں ہے۔"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "ویجٹ لوڈ کرنے سے قاصر۔ ہوم اسکرین پر مزید جگہ نہیں ہے۔"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "اپلیکیشن پہلے سے ہی موجود ہے۔"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "ویجٹ پہلے سے ہی موجود ہے۔"
+
diff --git a/live.viewer/viewer/po/uz.po b/live.viewer/viewer/po/uz.po
new file mode 100644 (file)
index 0000000..2ba86a5
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Ilovalar"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Vidjet"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Olib tashlab bo‘lmaydi."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Vidjetni ko‘chirish uchun uni bosib turing."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Asosiy ekran o‘zgartirildi."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Yuklanmoqda..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Ma’lumotni yuklab bo‘lmaydi. Qayta urinib ko‘rish uchun cherting"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Ilovani qo‘shib bo‘lmaydi. Asosiy ekranda boshqa joy yo‘q."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Vidjetni qo‘shib bo‘lmaydi. Asosiy ekranda boshqa joy yo‘q."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Ilova avvaldan mavjud."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Vidjet oldindan mavjud."
+
diff --git a/live.viewer/viewer/po/vi.po b/live.viewer/viewer/po/vi.po
new file mode 100644 (file)
index 0000000..90cbe47
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Ứng dụng"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "Không thể xóa."
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "Chạm và giữ để di chuyển widget."
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "Màn hình chờ đã thay đổi."
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "Đang tải…"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "Không thể tải dữ liệu. Hãy chạm để thử lại."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Không thể thêm ứng dụng. Không còn chỗ trên màn hình chính."
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "Không thể thêm tiện ích. Không còn chỗ trên màn hình chính."
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "Ứng dụng đã tồn tại."
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Tiện ích đã tồn tại."
+
diff --git a/live.viewer/viewer/po/zh_CN.po b/live.viewer/viewer/po/zh_CN.po
new file mode 100644 (file)
index 0000000..a268f21
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "应用程序"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "桌面小组件"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "无法移除。"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "点击并按住小组件以进行移动。"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "主屏已更改。"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "载入中…"
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "无法载入数据。轻敲以重试。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "无法添加应用程序。主屏幕无更多空间。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "无法添加小组件。主屏幕无更多空间。"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "应用程序已存在。"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "小组件已存在。"
+
diff --git a/live.viewer/viewer/po/zh_HK.po b/live.viewer/viewer/po/zh_HK.po
new file mode 100644 (file)
index 0000000..420c08d
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "應用程式"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "無法移除。"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "輕觸並按住 Widget 以移動。"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "主螢幕已變更。"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "正在載入..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "無法載入數據。輕觸以重試。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "無法加入應用程式。主螢幕空間不足。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "無法加入 Widget。主螢幕空間不足。"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "應用程式已存在。"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "Widget 已存在。"
+
diff --git a/live.viewer/viewer/po/zh_TW.po b/live.viewer/viewer/po/zh_TW.po
new file mode 100644 (file)
index 0000000..14062f3
--- /dev/null
@@ -0,0 +1,33 @@
+msgid "IDS_IDLE_BODY_APPS"
+msgstr "Apps"
+
+msgid "IDS_IDLE_HEADER_WIDGET"
+msgstr "Widget"
+
+msgid "IDS_IM_POP_UNABLE_TO_REMOVE"
+msgstr "無法刪除。"
+
+msgid "IDS_COM_BODY_TAP_AND_HOLD_A_WIDGET_TO_MOVE_IT_ABB"
+msgstr "輕觸並按住 Widget 以移動。"
+
+msgid "IDS_ST_BODY_HOME_SCREEN_CHANGED_ABB"
+msgstr "主螢幕已變更。"
+
+msgid "IDS_IDLE_POP_LOADING_ING"
+msgstr "正在載入..."
+
+msgid "IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"
+msgstr "無法載入資料。輕觸以重試。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_APPLICATION_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "無法新增應用程式。主螢幕空間不足。"
+
+msgid "IDS_HS_POP_UNABLE_TO_ADD_WIDGET_NO_MORE_ROOM_ON_HOME_SCREEN"
+msgstr "無法新增 widget。主螢幕空間不足。"
+
+msgid "IDS_HS_TPOP_APPLICATION_ALREADY_EXISTS"
+msgstr "應用程式已存在。"
+
+msgid "IDS_HS_TPOP_WIDGET_ALREADY_EXISTS"
+msgstr "widget 已存在。"
+
diff --git a/live.viewer/viewer/src/dynamicbox_evas.c b/live.viewer/viewer/src/dynamicbox_evas.c
new file mode 100644 (file)
index 0000000..88f02a7
--- /dev/null
@@ -0,0 +1,4738 @@
+/*
+ * Samsung API
+ * Copyright (c) 2013 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Flora License, Version 1.1 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <libintl.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include <Elementary.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <Ecore_Evas.h>
+#include <Evas.h>
+#include <Edje.h>
+
+#include <ail.h>
+
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+
+#if defined(LOG_TAG)
+#undef LOG_TAG
+#endif
+#define LOG_TAG "DYNAMICBOX_EVAS"
+#include <dlog.h>
+
+#include "dynamicbox_evas.h"
+
+#if !defined(SECURE_LOGD)
+#define SECURE_LOGD LOGD
+#endif
+
+#if !defined(SECURE_LOGW)
+#define SECURE_LOGW LOGW
+#endif
+
+#if !defined(SECURE_LOGE)
+#define SECURE_LOGE LOGE
+#endif
+
+#if !defined(S_)
+#define S_(str) dgettext("sys_string", str)
+#endif
+
+#if !defined(T_)
+#define T_(str) dgettext(PACKAGE, str)
+#endif
+
+#if !defined(N_)
+#define N_(str) (str)
+#endif
+
+#if !defined(_)
+#define _(str) gettext(str)
+#endif
+
+
+#if !defined(DbgPrint)
+#define DbgPrint(format, arg...)       SECURE_LOGD(format, ##arg)
+#endif
+
+#if !defined(ErrPrint)
+#define ErrPrint(format, arg...)       SECURE_LOGE(format, ##arg)
+#endif
+
+#if !defined(WarnPrint)
+#define WarnPrint(format, arg...)      SECURE_LOGW(format, ##arg)
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_RESOURCE_EDJ)
+#define DYNAMICBOX_EVAS_RESOURCE_EDJ "/usr/share/dynamicbox-evas/res/edje/dynamicbox.edj"
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_UNKNOWN)
+#define DYNAMICBOX_EVAS_UNKNOWN "/usr/apps/com.samsung.w-home/res/images/unknown.png"
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_RESOURCE_GBAR)
+#define DYNAMICBOX_EVAS_RESOURCE_GBAR "gbar"
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_RESOURCE_LB)
+#define DYNAMICBOX_EVAS_RESOURCE_LB "dynamicbox"
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_RESOURCE_IMG)
+#define DYNAMICBOX_EVAS_RESOURCE_IMG "dynamicbox,image"
+#endif
+
+#if !defined(DYNAMICBOX_EVAS_RESOURCE_OVERLAY_LOADING)
+#define DYNAMICBOX_EVAS_RESOURCE_OVERLAY_LOADING "overlay"
+#endif
+
+#define DEFAULT_OVERLAY_COUNTER 2
+#define DEFAULT_OVERLAY_WAIT_TIME 1.0f
+
+#define DBOX_CLASS_NAME "dynamicbox"
+
+int errno;
+
+/*!
+ * \note
+ * Detect click event if the pointer does moved in this region (x , y < 5 pixels)
+ */
+#define CLICK_REGION 22
+
+static struct {
+       Evas_Smart_Class sc;
+       Evas_Smart *smart;
+       Eina_List *list;
+       struct {
+               Eina_List *delete_list;
+               Eina_List *create_list;
+       } raw_event;
+       int screen_width;
+       int screen_height;
+
+       union _conf {
+               struct _field {
+                       unsigned int user_view_port: 1;
+                       unsigned int force_to_buffer: 1;
+                       unsigned int support_gbar: 1;
+                       unsigned int manual_pause_resume: 1;
+                       unsigned int use_fixed_size: 1;
+                       unsigned int easy_mode: 1;
+                       unsigned int is_scroll_x: 1;
+                       unsigned int is_scroll_y: 1;
+                       unsigned int auto_feed: 1;
+                       unsigned int delayed_pause_resume: 1;
+                       unsigned int sensitive_move: 1;
+                       unsigned int render_animator: 1;
+                       unsigned int auto_render_selector: 1;
+
+                       unsigned int reserved: 19;
+               } field;
+               unsigned int mask;
+       } conf;
+
+       Evas_Object *win;
+       Ecore_Animator *renderer;
+       Eina_List *dbox_dirty_objects;
+       Eina_List *gbar_dirty_objects;
+} s_info = {
+       .sc = EVAS_SMART_CLASS_INIT_NAME_VERSION(DBOX_CLASS_NAME),
+       .smart = NULL,
+       .list = NULL,
+       .raw_event = {
+               .delete_list = NULL,
+               .create_list = NULL,
+       },
+       .conf = {
+               .mask = 0,
+       },
+       .screen_width = 720,
+       .screen_height = 1280,
+       .win = NULL,
+       .renderer = NULL,
+       .dbox_dirty_objects = NULL,
+       .gbar_dirty_objects = NULL,
+};
+
+struct access_ret_cb_data {
+       Evas_Object *obj;
+       void (*ret_cb)(Evas_Object *, int, void *);
+       void *data;
+};
+
+struct acquire_data {
+       struct widget_data *data;
+       Evas_Object *content;
+       int w;
+       int h;
+};
+
+enum CANCEL_CLICK {
+       CANCEL_DISABLED = 0x0,
+       CANCEL_USER = 0x01,
+       CANCEL_PROCESSED = 0x02
+};
+
+struct widget_data {
+       enum {
+               WIDGET_DATA_CREATED = 0x00beef00,
+               WIDGET_DATA_DELETED = 0x0d0e0a0d,
+       } state;
+       struct dynamicbox *handle;
+       Evas *e;
+       Evas_Object *stage;     /*!< Do not resize thie directly, it should be resized via XX_update_geometry */
+       Evas_Object *parent;
+
+       Evas_Object *dbox_layout;       /*!< Layout of Dynamicbox content part */
+       Evas_Object *gbar_layout;       /*!< Layout of GBAR content part */
+
+       Evas_Object *dynamicbox;        /*!< Container object */
+
+       struct view_port {
+               int x;
+               int y;
+               int w;
+               int h;
+       } view_port;
+
+       char *dbox_id;
+       char *content;
+       char *cluster;
+       char *category;
+       double period;
+
+       void *dbox_fb;
+       void *gbar_fb;
+
+       unsigned int gbar_pixmap;
+       unsigned int dbox_pixmap;
+
+       struct down {
+               int x;
+               int y;
+
+               struct {
+                       int x;
+                       int y;
+                       int w;
+                       int h;
+               } geo;
+       } down;
+
+       int x;
+       int y;
+
+       int dbox_width;
+       int dbox_height;
+       int size_type;
+
+       union {
+               struct {
+                       unsigned int pressed: 1;                     /**< Mouse is pressed */
+                       unsigned int touch_effect: 1;                /**< Requires to play touch effect */
+                       unsigned int mouse_event: 1;                 /**< Requires to feed mouse event */
+                       unsigned int scroll_x: 1;                    /**< */
+                       unsigned int scroll_y: 1;
+                       unsigned int faulted: 1;
+                       unsigned int flick_down: 1;
+                       unsigned int gbar_created: 1;
+
+                       unsigned int created: 1;
+                       unsigned int deleted: 1;
+                       unsigned int dbox_pixmap_acquire_requested: 1;
+                       unsigned int gbar_pixmap_acquire_requested: 1;
+                       unsigned int cancel_scroll_x: 1;
+                       unsigned int cancel_scroll_y: 1;
+                       unsigned int cancel_click: 2;
+                       unsigned int disable_preview: 1;
+                       unsigned int disable_loading: 1;
+                       unsigned int disable_text: 1;
+                       unsigned int dbox_overlay_loaded: 1;
+                       unsigned int gbar_overlay_loaded: 1;
+
+                       unsigned int freeze_visibility: 1;
+
+                       unsigned int dbox_dirty: 1;
+                       unsigned int gbar_dirty: 1;
+
+                       unsigned int send_delete: 1;
+                       unsigned int permanent_delete: 1;
+
+                       unsigned int reserved: 5;
+               } field;        /* Do we really has performance loss? */
+
+               unsigned int flags;
+       } is;
+
+       int refcnt;
+       int overlay_update_counter;
+       Ecore_Timer *overlay_timer;
+       int freezed_visibility;
+};
+
+enum EFFECT_MASK {
+       EFFECT_NONE = 0x0,
+       EFFECT_WIDTH = 0x01,
+       EFFECT_HEIGHT = 0x02,
+       EFFECT_BOTH = 0x03,
+       EFFECT_MOVE = 0x10
+};
+
+struct animation_data {
+       Ecore_Timer *timer;
+       Evas_Object *obj;
+
+       unsigned int effect_mask;
+       int w;
+       int h;
+       int x;
+       int y;
+};
+
+struct raw_event_cbdata {
+       void (*cb)(struct dynamicbox_evas_raw_event_info *info, void *data);
+       void *data;
+};
+
+static int dynamicbox_fault_handler(enum dynamicbox_fault_type fault, const char *pkgname, const char *filename, const char *funcname, void *data);
+static int dynamicbox_event_handler(struct dynamicbox *handle, enum dynamicbox_event_type event, void *data);
+
+static void dbox_created_cb(struct dynamicbox *handle, int ret, void *cbdata);
+static void dbox_overlay_loading(struct widget_data *data);
+static void dbox_overlay_faulted(struct widget_data *data);
+static void dbox_overlay_disable(struct widget_data *data, int no_timer);
+
+static void gbar_overlay_loading(struct widget_data *data);
+static void gbar_overlay_disable(struct widget_data *data);
+
+static void update_dbox_geometry(struct acquire_data *acquire_data);
+static void update_gbar_geometry(struct acquire_data *acquire_data);
+static void update_stage_geometry(struct acquire_data *acquire_data);
+static void animator_del_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info);
+
+static void remove_dbox_dirty_object_list(struct widget_data *data);
+static void remove_gbar_dirty_object_list(struct widget_data *data);
+static void append_dbox_dirty_object_list(struct widget_data *data);
+static void append_gbar_dirty_object_list(struct widget_data *data);
+static void dynamicbox_event_dbox_updated(struct widget_data *data);
+static void dynamicbox_event_gbar_updated(struct widget_data *data);
+
+static struct widget_data *get_smart_data(Evas_Object *dynamicbox)
+{
+       if (dynamicbox && evas_object_smart_type_check(dynamicbox, DBOX_CLASS_NAME)) {
+               struct widget_data *data;
+
+               data = evas_object_smart_data_get(dynamicbox);
+               if (data) {
+                       if (data->state == WIDGET_DATA_CREATED) {
+                               return data;
+                       }
+
+                       ErrPrint("smart data is not valid\n");
+               } else {
+                       ErrPrint("smart data is not exists\n");
+               }
+       }
+
+       return NULL;
+}
+
+static inline void reset_scroller(struct widget_data *data)
+{
+       Evas_Object *scroller;
+
+       if (!data->dbox_layout) {
+               return;
+       }
+
+       scroller = elm_object_part_content_get(data->dbox_layout, "scroller");
+       if (!scroller) {
+               return;
+       }
+
+       elm_scroller_region_show(scroller, 0, data->dbox_height >> 1, data->dbox_width, data->dbox_height);
+}
+
+static void invoke_raw_event_callback(enum dynamicbox_evas_raw_event_type type, const char *pkgname, Evas_Object *dynamicbox, int error)
+{
+       struct dynamicbox_evas_raw_event_info info;
+       struct raw_event_cbdata *cbdata;
+       Eina_List *l;
+       Eina_List *n;
+
+       info.pkgname = pkgname;
+       info.dynamicbox = dynamicbox;
+       info.error = error;
+       info.type = type;
+
+       switch (type) {
+       case DYNAMICBOX_EVAS_RAW_DELETE:
+               EINA_LIST_FOREACH_SAFE(s_info.raw_event.delete_list, l, n, cbdata) {
+                       if (cbdata->cb) {
+                               cbdata->cb(&info, cbdata->data);
+                       }
+               }
+               break;
+       case DYNAMICBOX_EVAS_RAW_CREATE:
+               EINA_LIST_FOREACH_SAFE(s_info.raw_event.create_list, l, n, cbdata) {
+                       if (cbdata->cb) {
+                               cbdata->cb(&info, cbdata->data);
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+}
+
+static int find_size_type(struct widget_data *data, int w, int h)
+{
+       int cnt = DBOX_NR_OF_SIZE_LIST;
+       int i;
+       int _w[DBOX_NR_OF_SIZE_LIST];
+       int _h[DBOX_NR_OF_SIZE_LIST];
+       int type = DBOX_SIZE_TYPE_UNKNOWN;
+       int find;
+       int ret_type = DBOX_SIZE_TYPE_UNKNOWN;
+       int delta;
+
+       if (dynamicbox_service_get_supported_sizes(data->dbox_id, &cnt, _w, _h) < 0) {
+               ErrPrint("No available sizes: %s\n", data->dbox_id);
+               return DBOX_SIZE_TYPE_UNKNOWN;
+       }
+
+       find = 0x7FFFFFFF;
+       for (i = 0; i < cnt; i++) {
+               type = dynamicbox_service_size_type(_w[i], _h[i]);
+
+               if (!s_info.conf.field.easy_mode) {
+                       switch (type) {
+                       case DBOX_SIZE_TYPE_EASY_1x1:
+                       case DBOX_SIZE_TYPE_EASY_3x1:
+                       case DBOX_SIZE_TYPE_EASY_3x3:
+                               continue;
+                       default:
+                               break;
+                       }
+               } else {
+                       switch (type) {
+                       case DBOX_SIZE_TYPE_EASY_1x1:
+                       case DBOX_SIZE_TYPE_EASY_3x1:
+                       case DBOX_SIZE_TYPE_EASY_3x3:
+                               break;
+                       default:
+                               continue;
+                       }
+               }
+
+               delta = abs(_w[i] - w) + abs(_h[i] - h);
+               if (delta < find) {
+                       find = delta;
+                       ret_type = type;
+               }
+       }
+
+       return ret_type;
+}
+
+static Eina_Bool effect_animator_cb(void *_data)
+{
+       struct animation_data *data = _data;
+       int w;
+       int h;
+       int x;
+       int y;
+       int move_x = 0;
+       int move_y = 0;
+
+       evas_object_geometry_get(data->obj, &x, &y, &w, &h);
+       if (data->w == w && data->h == h) {
+               evas_object_event_callback_del(data->obj, EVAS_CALLBACK_DEL, animator_del_cb);
+               evas_object_data_del(data->obj, "animation");
+               free(data);
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if (data->effect_mask & EFFECT_WIDTH) {
+               if (w < data->w) {
+                       if (data->w - w > 100) {
+                               w += 20;
+                               move_x = 20;
+                       } else if (data->w - w > 10) {
+                               w += 8;
+                               move_x = 8;
+                       } else {
+                               w++;
+                               move_x = 1;
+                       }
+               } else if (w > data->w) {
+                       if (w - data->w > 100) {
+                               w -= 20;
+                               move_x = -20;
+                       } else if (w - data->w > 10) {
+                               w -= 8;
+                               move_x = -8;
+                       } else {
+                               w--;
+                               move_x = -1;
+                       }
+               }
+       } else {
+               w = data->w;
+       }
+
+       if (data->effect_mask & EFFECT_HEIGHT) {
+               if (h < data->h) {
+                       if (data->h - h > 100) {
+                               h += 20;
+                               move_y = 20;
+                       } else if (data->h - h > 10) {
+                               h += 8;
+                               move_y = 8;
+                       } else {
+                               h++;
+                               move_y = 1;
+                       }
+               } else if (h > data->h) {
+                       if (h - data->h > 100) {
+                               h -= 20;
+                               move_y = -20;
+                       } else if (h - data->h > 10) {
+                               h -= 8;
+                               move_y = -8;
+                       } else {
+                               h--;
+                               move_y = -1;
+                       }
+               }
+       } else {
+               h = data->h;
+       }
+
+       if (data->effect_mask & EFFECT_MOVE) {
+               if (move_x) {
+                       x -= move_x;
+               }
+               if (move_y) {
+                       y -= move_y;
+               }
+               evas_object_move(data->obj, x, y);
+       }
+
+       evas_object_resize(data->obj, w, h);
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void animator_del_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct animation_data *data;
+
+       data = evas_object_data_del(obj, "animation");
+       if (data) {
+               ecore_timer_del(data->timer);
+               free(data);
+       }
+}
+
+static void effect_size_get(Evas_Object *obj, int *w, int *h)
+{
+       struct animation_data *data;
+
+       data = evas_object_data_get(obj, "animation");
+       if (data) {
+               *w = data->w;
+               *h = data->h;
+       } else {
+               evas_object_geometry_get(obj, NULL, NULL, w, h);
+       }
+}
+
+static void effect_resize(Evas_Object *obj, int w, int h, unsigned int effect_mask)
+{
+       struct animation_data *data;
+       int ow;
+       int oh;
+       int ox;
+       int oy;
+
+       evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
+
+       data = evas_object_data_get(obj, "animation");
+       if (data) {
+               if (ow == w && oh == h) {
+                       evas_object_event_callback_del(obj, EVAS_CALLBACK_DEL, animator_del_cb);
+                       evas_object_data_del(obj, "animation");
+                       free(data);
+                       return;
+               }
+               /*!
+                * \note
+                * Update to new size
+                */
+               data->w = w;
+               data->h = h;
+               return;
+       } else if (ow == w && oh == h) {
+               return;
+       }
+
+       data = malloc(sizeof(*data));
+       if (!data) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return;
+       }
+
+       data->obj = obj;
+       data->w = w;
+       data->h = h;
+       data->x = ox;
+       data->y = oy;
+       data->effect_mask = effect_mask;
+
+       data->timer = ecore_timer_add(1.0f/60.0f, effect_animator_cb, data);
+       if (!data->timer) {
+               free(data);
+               return;
+       }
+
+       evas_object_data_set(obj, "animation", data);
+       evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, animator_del_cb, data);
+}
+
+struct widget_data *widget_ref(struct widget_data *data)
+{
+       data->refcnt++;
+       return data;
+}
+
+static void dump_handle_list(void)
+{
+       Eina_List *l = NULL;
+       Eina_List *n;
+       Evas_Object *dynamicbox;
+       struct widget_data *data;
+
+       DbgPrint("============== DUMP ===============");
+       EINA_LIST_FOREACH_SAFE(s_info.list, l, n, dynamicbox) {
+               data = evas_object_smart_data_get(dynamicbox);
+               if (!data) {
+                       continue;
+               }
+
+               DbgPrint("data[%p] %s (%s)\n", data, data->dbox_id, data->is.field.faulted ? "faulted" : "loaded");
+       }
+       DbgPrint("===================================");
+}
+
+struct widget_data *widget_unref(struct widget_data *data)
+{
+       data->refcnt--;
+       DbgPrint("refcnt: %d (%s)\n", data->refcnt, data->dbox_id);
+       if (data->refcnt != 0) {
+               return data;
+       }
+
+       DbgPrint("Destroy widget data %p(%s)\n", data, data->dbox_id);
+       free(data->content);
+       free(data->dbox_id);
+       free(data->cluster);
+       free(data->category);
+
+       if (data->overlay_timer) {
+               ecore_timer_del(data->overlay_timer);
+               data->overlay_timer = NULL;
+       }
+
+       if (data->stage) {
+               DbgPrint("Remove Stage\n");
+               evas_object_del(data->stage);
+       }
+
+       if (data->dbox_layout) {
+               Evas_Object *content;
+
+               content = elm_object_part_content_unset(data->dbox_layout, "dynamicbox,content");
+               if (content) {
+                       Evas_Object *front;
+
+                       front = elm_object_part_content_unset(content, "front,content");
+                       if (front) {
+                               DbgPrint("Front image object is deleted\n");
+                               evas_object_del(front);
+                       }
+
+                       DbgPrint("Content object deleted\n");
+                       evas_object_del(content);
+               }
+
+               content = elm_object_part_content_unset(data->dbox_layout, "overlay,content");
+               if (content) {
+                       DbgPrint("Overlay is deleted\n");
+                       evas_object_del(content);
+               }
+
+
+               DbgPrint("Remove DBOX Layout\n");
+               evas_object_del(data->dbox_layout);
+       }
+
+       if (data->gbar_layout) {
+               Evas_Object *content;
+               content = elm_object_part_content_get(data->gbar_layout, "gbar,content");
+               if (content) {
+                       Evas_Object *overlay;
+                       overlay = elm_object_part_content_unset(content, "overlay,content");
+                       if (overlay) {
+                               DbgPrint("Overlay is deleted\n");
+                               evas_object_del(overlay);
+                       }
+               }
+               DbgPrint("Remove GBAR Layout\n");
+               evas_object_del(data->gbar_layout);
+       }
+
+       if (data->dbox_fb) {
+               dynamicbox_release_fb(data->dbox_fb);
+               data->dbox_fb = NULL;
+       }
+
+       if (data->gbar_fb) {
+               dynamicbox_release_fb(data->gbar_fb);
+               data->gbar_fb = NULL;
+       }
+
+       data->state = WIDGET_DATA_DELETED;
+       free(data);
+       dump_handle_list();
+       return NULL;
+}
+
+static void gbar_down_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *down = event_info;
+       struct widget_data *data = cbdata;
+       struct dynamicbox_mouse_event_info minfo;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_geometry_get(obj, &data->down.geo.x, &data->down.geo.y, &data->down.geo.w, &data->down.geo.h);
+
+       data->x = data->down.x = down->canvas.x;
+       data->y = data->down.y = down->canvas.y;
+       data->is.field.pressed = 1;
+       if (s_info.conf.field.auto_render_selector) {
+               DbgPrint("Change to direct render\n");
+               s_info.conf.field.render_animator = 0;
+       }
+
+       if (s_info.conf.field.auto_feed) {
+               minfo.x = (double)data->down.geo.x / (double)data->down.geo.w;
+               minfo.y = (double)data->down.geo.y / (double)data->down.geo.h;
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_SET, &minfo);
+       } else {
+               minfo.x = (double)(down->canvas.x - data->down.geo.x) / (double)data->down.geo.w;
+               minfo.y = (double)(down->canvas.y - data->down.geo.y) / (double)data->down.geo.h;
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_ENTER, &minfo);
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_DOWN, &minfo);
+       }
+}
+
+static void gbar_move_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Move *move = event_info;
+       struct widget_data *data = cbdata;
+       Evas_Coord x, y, w, h;
+       struct dynamicbox_mouse_event_info minfo;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (!data->is.field.pressed) {
+               return;
+       }
+
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+       data->x = move->cur.canvas.x;
+       data->y = move->cur.canvas.y;
+
+       if (data->is.field.cancel_click != CANCEL_DISABLED || !s_info.conf.field.auto_feed) {
+               minfo.x = (double)(move->cur.canvas.x - x) / (double)w;
+               minfo.y = (double)(move->cur.canvas.y - y) / (double)h;
+
+               if (data->is.field.cancel_click == CANCEL_USER) {
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_ON_HOLD, &minfo);
+                       data->is.field.cancel_click = CANCEL_PROCESSED;
+               }
+
+               if (!s_info.conf.field.auto_feed) {
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_MOVE, &minfo);
+               }
+
+               if (s_info.conf.field.auto_render_selector) {
+                       DbgPrint("Change to direct render\n");
+                       s_info.conf.field.render_animator = 0;
+               }
+       }
+
+}
+
+static void dbox_pixmap_del_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct widget_data *data = cbdata;
+
+       if (data->dbox_pixmap) {
+               dynamicbox_release_resource_id(data->handle, 0, data->dbox_pixmap);
+               data->dbox_pixmap = 0;
+       }
+}
+
+static void gbar_pixmap_del_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct widget_data *data = cbdata;
+
+       if (data->gbar_pixmap) {
+               dynamicbox_release_resource_id(data->handle, 1, data->gbar_pixmap);
+               data->gbar_pixmap = 0;
+       }
+}
+
+static void gbar_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Up *up = event_info;
+       struct widget_data *data = cbdata;
+       Evas_Coord x, y, w, h;
+       struct dynamicbox_mouse_event_info minfo;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (!data->is.field.pressed) {
+               return;
+       }
+
+       evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+       if (s_info.conf.field.auto_feed) {
+               minfo.x = (double)x / (double)w;
+               minfo.y = (double)y / (double)h;
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_UNSET, &minfo);
+       } else {
+               minfo.x = (double)(up->canvas.x - x) / (double)w;
+               minfo.y = (double)(up->canvas.y - y) / (double)h;
+
+               if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.cancel_click == CANCEL_USER) {
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_ON_HOLD, &minfo);
+                       data->is.field.cancel_click = CANCEL_PROCESSED;
+               }
+
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_UP, &minfo);
+               dynamicbox_feed_mouse_event(data->handle, DBOX_GBAR_MOUSE_LEAVE, &minfo);
+       }
+
+       data->is.field.cancel_click = CANCEL_DISABLED;
+}
+
+static void dbox_down_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *down = event_info;
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (s_info.conf.field.support_gbar && !data->is.field.gbar_created) {
+               data->is.field.flick_down = 1;
+       }
+
+       data->down.x = data->x = down->canvas.x;
+       data->down.y = data->y = down->canvas.y;
+       data->is.field.pressed = 1;
+       data->is.field.scroll_x = 0;
+       data->is.field.scroll_y = 0;
+       data->is.field.cancel_scroll_x = 0;
+       data->is.field.cancel_scroll_y = 0;
+
+       if (s_info.conf.field.auto_render_selector) {
+               DbgPrint("Change to direct render\n");
+               s_info.conf.field.render_animator = 0;
+       }
+
+       evas_object_geometry_get(obj, &data->down.geo.x, &data->down.geo.y, &data->down.geo.w, &data->down.geo.h);
+
+       if (s_info.conf.field.sensitive_move && (data->down.geo.x != data->view_port.x || data->down.geo.y != data->view_port.y)) {
+               data->is.field.pressed = 0;
+               if (s_info.conf.field.auto_render_selector) {
+                       DbgPrint("Change to render animator\n");
+                       s_info.conf.field.render_animator = 1;
+               }
+               return;
+       }
+
+       if (data->handle && !data->is.field.faulted) {
+               struct dynamicbox_mouse_event_info minfo;
+
+               if (s_info.conf.field.auto_feed && data->is.field.mouse_event) {
+                       minfo.x = (double)data->down.geo.x / (double)data->down.geo.w;
+                       minfo.y = (double)data->down.geo.y / (double)data->down.geo.h;
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_SET, &minfo);
+               } else {
+                       minfo.x = (double)(data->x - data->down.geo.x) / (double)data->down.geo.w;
+                       minfo.y = (double)(data->y - data->down.geo.y) / (double)data->down.geo.h;
+
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ENTER, &minfo);
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_DOWN, &minfo);
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_MOVE, &minfo);
+               }
+       }
+}
+
+static void smart_callback_call(struct widget_data *data, const char *signal, void *cbdata)
+{
+       if (data->is.field.deleted || !data->dynamicbox) {
+               DbgPrint("Dynamicbox is deleted, ignore smart callback call\n");
+               return;
+       }
+
+       evas_object_smart_callback_call(data->dynamicbox, signal, cbdata);
+}
+
+static void dbox_destroy_gbar_cb(struct dynamicbox *handle, int ret, void *cbdata)
+{
+       struct widget_data *data = cbdata;
+       Evas_Object *gbar_content;
+       struct dynamicbox_evas_event_info info;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       data->is.field.gbar_created = 0;
+
+       info.error = ret;
+       info.event = DBOX_EVENT_GBAR_DESTROYED;
+       info.pkgname = data->dbox_id;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_DESTROYED, &info);
+
+       DbgPrint("ret: %d\n", ret);
+       gbar_content = elm_object_part_content_unset(data->gbar_layout, "gbar,content");
+       if (gbar_content) {
+               Evas_Native_Surface *surface;
+               unsigned int pixmap;
+
+               switch (dynamicbox_type(data->handle, 1)) {
+               case DBOX_CONTENT_TYPE_RESOURCE_ID:
+                       if (!s_info.conf.field.force_to_buffer) {
+                               surface = evas_object_image_native_surface_get(gbar_content);
+                               if (!surface) {
+                                       ErrPrint("surface is NULL\n");
+                                       evas_object_del(gbar_content);
+                                       break;
+                               }
+
+                               pixmap = surface->data.x11.pixmap;
+                               evas_object_del(gbar_content);
+
+                               dynamicbox_release_resource_id(data->handle, 1, (int)pixmap);
+                               if (pixmap == data->gbar_pixmap) {
+                                       data->gbar_pixmap = 0;
+                               }
+                               break;
+                       }
+               case DBOX_CONTENT_TYPE_BUFFER:
+                       if (data->gbar_fb) {
+                               dynamicbox_release_fb(data->gbar_fb);
+                               data->gbar_fb = NULL;
+                       }
+                       evas_object_del(gbar_content);
+                       break;
+               case DBOX_CONTENT_TYPE_TEXT:
+                       break;
+               case DBOX_CONTENT_TYPE_UIFW:
+                       break;
+               case DBOX_CONTENT_TYPE_INVALID:
+               default:
+                       break;
+               }
+       }
+
+       if (data->gbar_layout) {
+               evas_object_del(data->gbar_layout);
+               data->gbar_layout = NULL;
+       }
+
+       remove_gbar_dirty_object_list(data);
+       widget_unref(data);
+}
+
+static void gbar_animation_done_cb(void *cbdata, Evas_Object *obj, const char *emission, const char *source)
+{
+       Evas_Object *rect;
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       rect = elm_object_part_content_unset(obj, "overlay,content");
+       if (rect) {
+               evas_object_del(rect);
+       }
+}
+
+static void gbar_create_buffer_object(struct widget_data *data)
+{
+       Evas_Object *gbar_content;
+
+       gbar_content = evas_object_image_filled_add(data->e);
+       if (!gbar_content) {
+               ErrPrint("Failed to create an image object\n");
+       } else {
+               evas_object_image_colorspace_set(gbar_content, EVAS_COLORSPACE_ARGB8888);
+               evas_object_image_alpha_set(gbar_content, EINA_TRUE);
+
+               elm_object_part_content_set(data->gbar_layout, "gbar,content", gbar_content);
+       }
+}
+
+static void gbar_create_text_object(struct widget_data *data)
+{
+       ErrPrint("Unsupported\n");
+       /*!
+        * \todo
+        */
+}
+
+static void gbar_create_pixmap_object(struct widget_data *data)
+{
+       Evas_Object *gbar_content;
+
+       gbar_content = evas_object_image_filled_add(data->e);
+       if (!gbar_content) {
+               ErrPrint("Failed to create an image object\n");
+               return;
+       }
+
+       evas_object_image_colorspace_set(gbar_content, EVAS_COLORSPACE_ARGB8888);
+       evas_object_image_alpha_set(gbar_content, EINA_TRUE);
+       elm_object_part_content_set(data->gbar_layout, "gbar,content", gbar_content);
+
+       evas_object_event_callback_add(gbar_content, EVAS_CALLBACK_MOUSE_DOWN, gbar_down_cb, data);
+       evas_object_event_callback_add(gbar_content, EVAS_CALLBACK_MOUSE_MOVE, gbar_move_cb, data);
+       evas_object_event_callback_add(gbar_content, EVAS_CALLBACK_MOUSE_UP, gbar_up_cb, data);
+       evas_object_event_callback_add(gbar_content, EVAS_CALLBACK_DEL, gbar_pixmap_del_cb, data);
+}
+
+static void dbox_create_gbar_cb(struct dynamicbox *handle, int ret, void *cbdata)
+{
+       struct widget_data *data = cbdata;
+       struct dynamicbox_evas_event_info info;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               DbgPrint("Create GBAR: 0x%X\n", ret);
+               info.error = ret;
+               info.event = DBOX_EVENT_GBAR_CREATED;
+               info.pkgname = data->dbox_id;
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_ABORTED, &info);
+               widget_unref(data);
+               return;
+       }
+
+       if (data->is.field.deleted) {
+               /**
+                * Evas Object is deleted.
+                * Do not proceed this process anymore and destroy GBAR too
+                */
+               dynamicbox_destroy_glance_bar(data->handle, NULL, NULL);
+               return;
+       }
+
+       DbgPrint("GBAR is created\n");
+
+       if (!data->gbar_layout) {
+               data->gbar_layout = elm_layout_add(data->parent);
+               if (!data->gbar_layout) {
+                       ErrPrint("Failed to add an edje\n");
+                       info.error = DBOX_STATUS_ERROR_FAULT;
+                       info.event = DBOX_EVENT_GBAR_CREATED;
+                       info.pkgname = data->dbox_id;
+                       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_ABORTED, &info);
+
+                       ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+                       if (ret < 0) {
+                               /*!
+                                * \note
+                                *       PREVENT detect this. but it is FALSE POSITIVE
+                                *
+                                * widget_ref will increase the refcnt of data.
+                                * and it is called when calling the dynamicbox_destroy_glance_bar function (via the last param)
+                                * So this function call will not release the data.
+                                */
+                               widget_unref(data);
+                       }
+
+                       widget_unref(data);
+                       return;
+               }
+
+               if (elm_layout_file_set(data->gbar_layout, DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_GBAR) == EINA_FALSE) {
+                       ErrPrint("Failed to load edje object: %s(%s)\n", DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_GBAR);
+                       evas_object_del(data->gbar_layout);
+                       data->gbar_layout = NULL;
+
+                       info.error = DBOX_STATUS_ERROR_IO_ERROR;
+                       info.event = DBOX_EVENT_GBAR_CREATED;
+                       info.pkgname = data->dbox_id;
+                       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_ABORTED, &info);
+
+                       ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+                       if (ret < 0) {
+                               /*!
+                                * \note
+                                *       PREVENT detect this. but it is FALSE POSITIVE
+                                *
+                                * widget_ref will increase the refcnt of data.
+                                * and it is called when calling the dynamicbox_destroy_glance_bar function (via the last param)
+                                * So this function call will not release the data.
+                                */
+                               widget_unref(data);
+                       }
+
+                       widget_unref(data);
+                       return;
+               }
+
+               evas_object_smart_member_add(data->gbar_layout, data->dynamicbox);
+               evas_object_clip_set(data->gbar_layout, data->stage);
+               elm_object_signal_callback_add(data->gbar_layout, "finished", "animation", gbar_animation_done_cb, data);
+               evas_object_show(data->gbar_layout);
+       }
+       gbar_overlay_loading(data);
+
+       switch (dynamicbox_type(data->handle, 1)) {
+       case DBOX_CONTENT_TYPE_RESOURCE_ID:
+               if (!s_info.conf.field.force_to_buffer) {
+                       gbar_create_pixmap_object(data);
+                       break;
+               }
+       case DBOX_CONTENT_TYPE_BUFFER:
+               gbar_create_buffer_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_TEXT:
+               gbar_create_text_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_UIFW:
+               break;
+       default:
+               info.error = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               info.event = DBOX_EVENT_GBAR_CREATED;
+               info.pkgname = data->dbox_id;
+               ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+               if (ret < 0) {
+                       /*!
+                        * \note
+                        *       PREVENT detect this. but it is FALSE POSITIVE
+                        *
+                        * widget_ref will increase the refcnt of data.
+                        * and it is called when calling the dynamicbox_destroy_glance_bar function (via the last param)
+                        * So this function call will not release the data.
+                        */
+                       widget_unref(data);
+               }
+               ErrPrint("Failed to create a GBAR, unknown type\n");
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_ABORTED, &info);
+               widget_unref(data);
+               return;
+       }
+
+       data->is.field.gbar_created = 1;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       info.event = DBOX_EVENT_GBAR_CREATED;
+       info.pkgname = data->dbox_id;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_GBAR_CREATED, &info);
+       widget_unref(data);
+}
+
+static void update_scroll_flag(struct widget_data *data, int x, int y)
+{
+       if (s_info.conf.field.is_scroll_x && !s_info.conf.field.is_scroll_y) {
+               if (!data->is.field.scroll_x && abs(y - data->down.y) > CLICK_REGION && (abs(x - data->down.x) <= CLICK_REGION)) {
+                       data->is.field.cancel_scroll_x = 1;
+               }
+       }
+
+       if (s_info.conf.field.is_scroll_y && !s_info.conf.field.is_scroll_x) {
+               if (!data->is.field.scroll_y && abs(x - data->down.x) > CLICK_REGION && (abs(y - data->down.y) <= CLICK_REGION)) {
+                       data->is.field.cancel_scroll_y = 1;
+               }
+       }
+
+       data->is.field.scroll_x = s_info.conf.field.is_scroll_x && (!!(data->is.field.scroll_x || (abs(x - data->down.x) > CLICK_REGION)));
+       data->is.field.scroll_y = s_info.conf.field.is_scroll_y && (!!(data->is.field.scroll_y || (abs(y - data->down.y) > CLICK_REGION)));
+       data->is.field.scroll_x = !data->is.field.cancel_scroll_x && data->is.field.scroll_x;
+       data->is.field.scroll_y = !data->is.field.cancel_scroll_y && data->is.field.scroll_y;
+}
+
+static void dbox_up_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Up *up = event_info;
+       struct dynamicbox_evas_event_info info;
+       struct widget_data *data = cbdata;
+       Evas_Coord x, y, w, h;
+       int ret = 0;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (!data->is.field.pressed) {
+               return;
+       }
+
+       update_scroll_flag(data, up->canvas.x, up->canvas.y);
+
+       data->x = up->canvas.x;
+       data->y = up->canvas.y;
+       data->is.field.pressed = 0;
+
+       if (s_info.conf.field.auto_render_selector) {
+               DbgPrint("Change to render animator\n");
+               s_info.conf.field.render_animator = 1;
+       }
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_GBAR_CREATED;
+
+       if (s_info.conf.field.support_gbar && data->is.field.flick_down && data->y - data->down.y < CLICK_REGION) {
+               DbgPrint("Flick down is canceled\n");
+               data->is.field.flick_down = 0;
+               info.error = DBOX_STATUS_ERROR_CANCEL;
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+       }
+
+       evas_object_geometry_get(data->dynamicbox, &x, &y, &w, &h);
+
+       if (data->is.field.flick_down) {
+               data->is.field.flick_down = 0;
+               if (!data->handle || data->is.field.faulted || !dynamicbox_has_glance_bar(data->handle)) {
+                       if (!data->is.field.gbar_created && s_info.conf.field.support_gbar) {
+                               elm_object_signal_emit(data->dbox_layout, "tilt", "content");
+                       }
+                       DbgPrint("Flick down is canceled\n");
+                       info.error = DBOX_STATUS_ERROR_CANCEL;
+                       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+               } else if (s_info.conf.field.support_gbar && !data->is.field.gbar_created) {
+                       double rx;
+                       double ry;
+                       int gbar_w;
+                       int gbar_h;
+
+                       if (dynamicbox_get_glance_bar_size(data->handle, &gbar_w, &gbar_h) != DBOX_STATUS_ERROR_NONE) {
+                               gbar_w = 0;
+                               gbar_h = 0;
+                       }
+
+                       elm_object_signal_emit(data->dbox_layout, "move,down", "content");
+
+                       rx = ((double)x + (double)w / 2.0f) / (double)s_info.screen_width;
+                       DbgPrint("x[%d], w[%d], rx[%lf]\n", x, w, rx);
+                       // 0.0    0.125    0.25    0.375   0.5   0.625   0.75    0.875   1.0
+                       switch (dynamicbox_size(data->handle)) {
+                       case DBOX_SIZE_TYPE_1x1:
+                               if (rx < 0.25f) {
+                                       rx = 0.125f;
+                               } else if (rx < 0.5f) {
+                                       rx = 0.375f;
+                               } else if (rx < 0.75f) {
+                                       rx = 0.625f;
+                               } else if (rx < 1.0f) {
+                                       rx = 0.875f;
+                               }
+                               break;
+                       case DBOX_SIZE_TYPE_2x1:
+                       case DBOX_SIZE_TYPE_2x2:
+                               if (rx < 0.5f) {
+                                       rx = 0.25f;
+                               } else if (rx < 0.625f) {
+                                       rx = 0.5f;
+                               } else {
+                                       rx = 0.75f;
+                               }
+                               break;
+                       default:
+                               rx = 0.5f;
+                               break;
+                       }
+
+                       if (y + h + gbar_h <= s_info.screen_height) {
+                               ry = 0.0f;
+                       } else {
+                               ry = 1.0f;
+                       }
+
+                       DbgPrint("converted rx[%lf], ry[%lf]\n", rx, ry);
+
+                       ret = dynamicbox_create_glance_bar(data->handle, rx, ry, dbox_create_gbar_cb, widget_ref(data));
+                       if (ret < 0) {
+                               widget_unref(data);
+                               DbgPrint("Flick down is canceled\n");
+                               info.error = DBOX_STATUS_ERROR_CANCEL;
+                               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+                       }
+                       DbgPrint("Create GBAR: %d (%lfx%lf)\n", ret, rx, ry);
+               }
+       }
+
+       if (data->handle && !data->is.field.faulted) {
+               struct dynamicbox_mouse_event_info minfo;
+
+               minfo.x = (double)(data->x - x) / (double)w;
+               minfo.y = (double)(data->y - y) / (double)h;
+
+               evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+
+               reset_scroller(data);
+
+               if (s_info.conf.field.auto_feed && data->is.field.mouse_event) {
+                       struct dynamicbox_mouse_event_info _minfo;
+
+                       if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER) {
+                               dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+                               data->is.field.cancel_click = CANCEL_PROCESSED;
+                       }
+
+                       _minfo.x = (double)data->down.geo.x / (double)data->down.geo.w;
+                       _minfo.y = (double)data->down.geo.y / (double)data->down.geo.h;
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_UNSET, &_minfo);
+               } else {
+                       if (!data->is.field.mouse_event) {
+                               /* We have to keep the first position of touch down */
+                               minfo.x = (double)(data->down.x - x) / (double)w;
+                               minfo.y = (double)(data->down.y - y) / (double)h;
+                               if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER || abs(data->x - data->down.x) > CLICK_REGION || abs(data->y - data->down.y) > CLICK_REGION) {
+                                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+                                       data->is.field.cancel_click = CANCEL_PROCESSED;
+                               }
+                       } else {
+                               if (data->down.geo.x != x || data->down.geo.y != y || data->is.field.scroll_x || data->is.field.scroll_y || data->is.field.cancel_click == CANCEL_USER) {
+                                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+                                       data->is.field.cancel_click = CANCEL_PROCESSED;
+                               }
+                       }
+
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_UP, &minfo);
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_LEAVE, &minfo);
+               }
+
+               if (!data->is.field.flick_down) {
+                       ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       if (data->is.field.gbar_created) {
+                               ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+                               if (ret < 0) {
+                                       widget_unref(data);
+                               }
+                       } else if (data->is.field.cancel_click == CANCEL_DISABLED) {
+                               ret = dynamicbox_click(data->handle, minfo.x, minfo.y);
+                       }
+               }
+
+               DbgPrint("Up: %lfx%lf [x:%d/%d/%d] [y:%d/%d/%d], ret: 0x%X, cancel: 0x%x\n",
+                       minfo.x, minfo.y,
+                       data->is.field.scroll_x, s_info.conf.field.is_scroll_x, data->is.field.cancel_scroll_x,
+                       data->is.field.scroll_y, s_info.conf.field.is_scroll_y, data->is.field.cancel_scroll_y,
+                       ret, data->is.field.cancel_click);
+               data->is.field.cancel_click = CANCEL_DISABLED;
+       }
+}
+
+static void dbox_move_cb(void *cbdata, Evas *e, Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Move *move = event_info;
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (!data->is.field.pressed) {
+               return;
+       }
+
+       if (s_info.conf.field.support_gbar && data->is.field.flick_down && data->y - move->cur.canvas.y > 0) {
+               struct dynamicbox_evas_event_info info;
+
+               DbgPrint("Flick down is canceled\n");
+               data->is.field.flick_down = 0;
+               info.pkgname = data->dbox_id;
+               info.event = DBOX_EVENT_GBAR_CREATED;
+               info.error = DBOX_STATUS_ERROR_CANCEL;
+
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+       }
+
+       update_scroll_flag(data, move->cur.canvas.x, move->cur.canvas.y);
+
+       data->x = move->cur.canvas.x;
+       data->y = move->cur.canvas.y;
+
+       if (data->handle && !data->is.field.faulted) {
+               if (data->is.field.cancel_click == CANCEL_USER) {
+                       struct dynamicbox_mouse_event_info minfo;
+                       Evas_Coord x, y, w, h;
+
+                       evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+                       minfo.x = (double)(data->x - x) / (double)w;
+                       minfo.y = (double)(data->y - y) / (double)h;
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+
+                       /*
+                        * Reset the clicked event
+                        */
+                       data->is.field.cancel_click = CANCEL_PROCESSED;
+
+                       if (s_info.conf.field.auto_render_selector) {
+                               DbgPrint("Change to render animator\n");
+                               s_info.conf.field.render_animator = 1;
+                       }
+
+               }
+
+               if (!s_info.conf.field.auto_feed) {
+                       struct dynamicbox_mouse_event_info minfo;
+                       Evas_Coord x, y, w, h;
+
+                       evas_object_geometry_get(obj, &x, &y, &w, &h);
+
+                       minfo.x = (double)(data->x - x) / (double)w;
+                       minfo.y = (double)(data->y - y) / (double)h;
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_MOVE, &minfo);
+               }
+
+               if (s_info.conf.field.support_gbar && data->is.field.flick_down && abs(data->y - data->down.y) > CLICK_REGION) {
+                       struct dynamicbox_evas_event_info info;
+                       data->is.field.flick_down = 0;
+                       info.pkgname = data->dbox_id;
+                       info.event = DBOX_EVENT_GBAR_CREATED;
+                       info.error = DBOX_STATUS_ERROR_CANCEL;
+                       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+                       DbgPrint("Flick down is canceled\n");
+               }
+
+       } else {
+               if (s_info.conf.field.auto_render_selector) {
+                       s_info.conf.field.render_animator = 1;
+               }
+       }
+}
+
+static char *get_package_icon(struct widget_data *data)
+{
+       char *icon;
+       char *uiapp;
+
+       if (data->size_type == DBOX_SIZE_TYPE_UNKNOWN) {
+               icon = dynamicbox_service_i18n_icon(data->dbox_id, NULL);
+       } else {
+               icon = dynamicbox_service_preview(data->dbox_id, data->size_type);
+       }
+
+       if (icon && access(icon, R_OK) == 0) {
+               return icon;
+       }
+
+       if (icon) {
+               ErrPrint("Failed to access an icon file: [%s]\n", icon);
+               free(icon);
+               icon = NULL;
+       }
+
+       uiapp = dynamicbox_service_mainappid(data->dbox_id);
+       if (uiapp) {
+               int ret;
+               ail_appinfo_h ai;
+
+               ret = ail_get_appinfo(uiapp, &ai);
+               free(uiapp);
+               if (ret == AIL_ERROR_OK) {
+                       char *uiapp_icon = NULL;
+
+                       ret = ail_appinfo_get_str(ai, AIL_PROP_ICON_STR, &uiapp_icon);
+                       if (ret != AIL_ERROR_OK || !uiapp_icon || access(uiapp_icon, R_OK) != 0) {
+                               ErrPrint("[%s] - %s\n", uiapp_icon, strerror(errno));
+                       } else {
+                               DbgPrint("UI-App icon: [%s]\n", uiapp_icon);
+                               icon = strdup(uiapp_icon);
+                               if (!icon) {
+                                       ErrPrint("Heap: %s\n", strerror(errno));
+                                       /*!
+                                        * \note
+                                        * icon will be specified to "unknown" icon file. (default)
+                                        */
+                               }
+                       }
+
+                       ail_destroy_appinfo(ai);
+               }
+       }
+
+       if (!icon) {
+               icon = strdup(DYNAMICBOX_EVAS_UNKNOWN);
+               if (!icon) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+               }
+       }
+
+       return icon;
+}
+
+static void activate_ret_cb(struct dynamicbox *handle, int ret, void *cbdata)
+{
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       data->overlay_update_counter = 0;
+       dbox_overlay_disable(data, 1);
+
+       DbgPrint("Activated (%s): %d\n", data->dbox_id, ret);
+       if (!data->is.field.deleted && (ret == DBOX_STATUS_ERROR_NONE || ret == DBOX_STATUS_ERROR_INVALID_PARAMETER)) {
+               int type;
+               Evas_Coord w, h;
+               struct acquire_data acquire_data = {
+                       .data = data,
+               };
+
+               evas_object_geometry_get(data->dbox_layout, NULL, NULL, &w, &h);
+
+               type = find_size_type(data, w, h);
+               if (type == DBOX_SIZE_TYPE_UNKNOWN) {
+                       ErrPrint("Failed to find a proper size type: %dx%d\n", w, h);
+                       type = DBOX_SIZE_TYPE_1x1;
+               }
+
+               data->is.field.faulted = 0;
+               data->is.field.created = 0;
+               data->is.field.send_delete = 1;
+               update_dbox_geometry(&acquire_data);
+               data->handle = dynamicbox_add(data->dbox_id, data->content,
+                                        data->cluster, data->category,
+                                        data->period, type,
+                                        dbox_created_cb, widget_ref(data));
+               if (!data->handle) {
+                       ErrPrint("Failed to send add request\n");
+                       widget_unref(data);
+                       return;
+               }
+
+               DbgPrint("Added Handle: (%p) %p\n", data->handle, data);
+               dynamicbox_set_data(data->handle, data->dynamicbox);
+               dbox_overlay_loading(data);
+       }
+
+       data->is.field.deleted = 0;
+       widget_unref(data);
+}
+
+static void dbox_animation_done_cb(void *cbdata, Evas_Object *obj, const char *emission, const char *source)
+{
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (dynamicbox_has_glance_bar(data->handle)) {
+       } else {
+               DbgPrint("Animation finished\n");
+       }
+}
+
+static void dbox_turn_done_cb(void *cbdata, Evas_Object *obj, const char *emission, const char *source)
+{
+       struct widget_data *data = cbdata;
+       Evas_Object *overlay;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       overlay = elm_object_part_content_unset(data->dbox_layout, "overlay,content");
+       if (overlay) {
+               evas_object_del(overlay);
+               data->is.field.dbox_overlay_loaded = 0;
+       }
+}
+
+static void dbox_overlay_clicked_cb(void *cbdata, Evas_Object *obj, const char *emission, const char *source)
+{
+       struct widget_data *data = cbdata;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       DbgPrint("Overlay is clicked: (%s) (%s)\n", emission, source);
+       if (!data->is.field.faulted) {
+               /*!
+                * \todo
+                * Reload
+                */
+               DbgPrint("Package [%s] is not faulted one\n", data->dbox_id);
+       } else {
+               DbgPrint("Activate: [%s]\n", data->dbox_id);
+               if (dynamicbox_activate(data->dbox_id, activate_ret_cb, widget_ref(data)) < 0) {
+                       widget_unref(data);
+                       ErrPrint("Failed to activate %s\n", data->dbox_id);
+               }
+       }
+}
+
+static void widget_data_setup(struct widget_data *data)
+{
+       data->e = evas_object_evas_get(data->dynamicbox);
+       if (!data->e) {
+               ErrPrint("Failed to get Evas object\n");
+               data->state = WIDGET_DATA_DELETED;
+               free(data);
+               return;
+       }
+
+       data->stage = evas_object_rectangle_add(data->e);
+       if (!data->stage) {
+               ErrPrint("Failed to add stage object\n");
+               data->state = WIDGET_DATA_DELETED;
+               free(data);
+               return;
+       }
+
+       evas_object_color_set(data->stage, 255, 255, 255, 255);
+
+       data->dbox_layout = elm_layout_add(data->parent);
+       if (!data->dbox_layout) {
+               ErrPrint("Failed to add edje object\n");
+               evas_object_del(data->stage);
+               data->state = WIDGET_DATA_DELETED;
+               free(data);
+               return;
+       }
+
+       if (elm_layout_file_set(data->dbox_layout, DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_LB) == EINA_FALSE) {
+               ErrPrint("Failed to load edje object: %s(%s)\n", DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_LB);
+               evas_object_del(data->dbox_layout);
+               evas_object_del(data->stage);
+               data->state = WIDGET_DATA_DELETED;
+               free(data);
+               return;
+       }
+
+       Evas_Object *scroller;
+       scroller = elm_scroller_add(data->parent);
+       if (scroller) {
+               Evas_Object *box;
+
+               elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE);
+               elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+               elm_scroller_single_direction_set(scroller, ELM_SCROLLER_SINGLE_DIRECTION_HARD);
+               //elm_object_scroll_lock_x_set(scroller, EINA_TRUE);
+
+               box = evas_object_rectangle_add(data->e);
+               if (box) {
+                       int height;
+
+                       height = s_info.screen_height << 1;
+
+                       evas_object_color_set(box, 0, 0, 0, 0);
+                       evas_object_resize(box, s_info.screen_width, height);
+                       evas_object_size_hint_min_set(box, s_info.screen_width, height);
+                       evas_object_show(box);
+               }
+
+               elm_object_content_set(scroller, box);
+               elm_object_part_content_set(data->dbox_layout, "scroller", scroller);
+       } else {
+               ErrPrint("Failed to create a scroller\n");
+       }
+
+       evas_object_show(data->dbox_layout);
+
+       elm_object_signal_callback_add(data->dbox_layout, "mouse,clicked,1", "overlay,content", dbox_overlay_clicked_cb, data);
+       elm_object_signal_callback_add(data->dbox_layout, "done", "turn", dbox_turn_done_cb, data);
+       elm_object_signal_callback_add(data->dbox_layout, "finished", "animation", dbox_animation_done_cb, data);
+
+       evas_object_event_callback_add(data->dbox_layout, EVAS_CALLBACK_MOUSE_DOWN, dbox_down_cb, data);
+       evas_object_event_callback_add(data->dbox_layout, EVAS_CALLBACK_MOUSE_MOVE, dbox_move_cb, data);
+       evas_object_event_callback_add(data->dbox_layout, EVAS_CALLBACK_MOUSE_UP, dbox_up_cb, data);
+
+       evas_object_smart_member_add(data->stage, data->dynamicbox);
+       evas_object_smart_member_add(data->dbox_layout, data->dynamicbox);
+       evas_object_clip_set(data->dbox_layout, data->stage);
+
+}
+
+static Eina_Bool renderer_cb(void *_data)
+{
+       struct widget_data *data;
+
+       EINA_LIST_FREE(s_info.dbox_dirty_objects, data) {
+               dynamicbox_event_dbox_updated(data);
+       }
+
+       EINA_LIST_FREE(s_info.gbar_dirty_objects, data) {
+               dynamicbox_event_gbar_updated(data);
+       }
+
+       s_info.renderer = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void remove_dbox_dirty_object_list(struct widget_data *data)
+{
+       s_info.dbox_dirty_objects = eina_list_remove(s_info.dbox_dirty_objects, data);
+}
+
+static void remove_gbar_dirty_object_list(struct widget_data *data)
+{
+       s_info.gbar_dirty_objects = eina_list_remove(s_info.gbar_dirty_objects, data);
+}
+
+static void append_dbox_dirty_object_list(struct widget_data *data)
+{
+       data->is.field.dbox_dirty = 1;
+
+       if (dynamicbox_visibility(data->handle) != DBOX_SHOW) {
+               return;
+       }
+
+       if (s_info.conf.field.render_animator) {
+               if (eina_list_data_find(s_info.dbox_dirty_objects, data)) {
+                       return;
+               }
+
+               if (!s_info.renderer) {
+                       s_info.renderer = ecore_animator_add(renderer_cb, NULL);
+                       if (!s_info.renderer) {
+                               ErrPrint("Failed to create a renderer\n");
+                       }
+               }
+
+               s_info.dbox_dirty_objects = eina_list_append(s_info.dbox_dirty_objects, data);
+       } else {
+               if (s_info.renderer) {
+                       ecore_animator_del(s_info.renderer);
+                       s_info.renderer = NULL;
+               }
+
+               /* Need a choice
+                * Do we have to discard these all changes? or just flush them?
+               struct widget_data *item;
+               EINA_LIST_FREE(s_info.dbox_dirty_objects, item) {
+                       dynamicbox_event_dbox_updated(item);
+               }
+                */
+               eina_list_free(s_info.dbox_dirty_objects);
+               s_info.dbox_dirty_objects = NULL;
+               dynamicbox_event_dbox_updated(data);
+       }
+}
+
+static void append_gbar_dirty_object_list(struct widget_data *data)
+{
+       data->is.field.gbar_dirty = 1;
+
+       if (dynamicbox_visibility(data->handle) != DBOX_SHOW) {
+               return;
+       }
+
+       if (s_info.conf.field.render_animator) {
+               if (eina_list_data_find(s_info.gbar_dirty_objects, data)) {
+                       return;
+               }
+
+               if (!s_info.renderer) {
+                       s_info.renderer = ecore_animator_add(renderer_cb, NULL);
+                       if (!s_info.renderer) {
+                               ErrPrint("Failed to create a renderer\n");
+                       }
+               }
+
+               s_info.gbar_dirty_objects = eina_list_append(s_info.gbar_dirty_objects, data);
+       } else {
+               if (s_info.renderer) {
+                       ecore_animator_del(s_info.renderer);
+                       s_info.renderer = NULL;
+               }
+
+               /* Need a choice
+                * Do we have to discard these all changes? or just flush them?
+               struct widget_data *item;
+               EINA_LIST_FREE(s_info.gbar_dirty_objects, item) {
+                       dynamicbox_event_gbar_updated(item);
+               }
+               */
+               eina_list_free(s_info.gbar_dirty_objects);
+               s_info.gbar_dirty_objects = NULL;
+               dynamicbox_event_gbar_updated(data);
+       }
+}
+
+static void widget_add(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = calloc(1, sizeof(*data));
+       if (!data) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return;
+       }
+
+       data->state = WIDGET_DATA_CREATED;
+       data->dynamicbox = dynamicbox;
+       data->is.field.permanent_delete = 0;
+       evas_object_smart_data_set(data->dynamicbox, data);
+       widget_ref(data);
+
+       s_info.list = eina_list_append(s_info.list, dynamicbox);
+       return;
+}
+
+static Evas_Object *create_image_object(struct widget_data *data)
+{
+       Evas_Object *img;
+
+       img = evas_object_image_filled_add(data->e);
+       if (!img) {
+               ErrPrint("Failed to create an image object\n");
+       } else {
+               evas_object_image_colorspace_set(img, EVAS_COLORSPACE_ARGB8888);
+               evas_object_image_alpha_set(img, EINA_TRUE);
+       }
+
+       return img;
+}
+
+static void replace_dbox_pixmap_with_image(struct widget_data *data)
+{
+       Evas_Object *img;
+       Evas_Object *dbox_content;
+
+       dbox_content = elm_object_part_content_unset(data->dbox_layout, "dynamicbox,content");
+       if (!dbox_content) {
+               ErrPrint("Failed to get content object\n");
+               return;
+       }
+
+       img = create_image_object(data);
+       if (img) {
+               Evas_Coord w;
+               Evas_Coord h;
+               void *content;
+
+               evas_object_image_size_get(dbox_content, &w, &h);
+               evas_object_image_size_set(img, w, h);
+
+               content = evas_object_image_data_get(dbox_content, 0);
+               if (content) {
+                       evas_object_image_data_copy_set(img, content);
+               }
+
+               evas_object_image_fill_set(img, 0, 0, w, h);
+               evas_object_image_pixels_dirty_set(img, EINA_TRUE);
+               evas_object_image_data_update_add(img, 0, 0, w, h);
+
+               elm_object_part_content_set(data->dbox_layout, "dynamicbox,content", img);
+       } else {
+               ErrPrint("Failed to create an image object\n");
+       }
+
+       evas_object_del(dbox_content);
+}
+
+static void replace_gbar_pixmap_with_image(struct widget_data *data)
+{
+       Evas_Object *img;
+       Evas_Object *gbar_content;
+
+       gbar_content = elm_object_part_content_unset(data->dbox_layout, "gbar,content");
+       if (!gbar_content) {
+               ErrPrint("Failed to get content object\n");
+               return;
+       }
+
+       img = create_image_object(data);
+       if (img) {
+               Evas_Coord w;
+               Evas_Coord h;
+               void *content;
+
+               evas_object_image_size_get(gbar_content, &w, &h);
+               evas_object_image_size_set(img, w, h);
+
+               content = evas_object_image_data_get(gbar_content, 0);
+               if (content) {
+                       evas_object_image_data_copy_set(img, content);
+               }
+
+               evas_object_image_fill_set(img, 0, 0, w, h);
+               evas_object_image_pixels_dirty_set(img, EINA_TRUE);
+               evas_object_image_data_update_add(img, 0, 0, w, h);
+
+               elm_object_part_content_set(data->dbox_layout, "gbar,content", img);
+       } else {
+               ErrPrint("Failed to create an image object\n");
+       }
+
+       evas_object_del(gbar_content);
+}
+
+static void dbox_destroy_dbox_cb(struct dynamicbox *handle, int ret, void *_data)
+{
+       struct widget_data *data = _data;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (data->dbox_pixmap) {
+               replace_dbox_pixmap_with_image(data);
+       }
+
+       if (data->gbar_pixmap) {
+               replace_gbar_pixmap_with_image(data);
+       }
+
+       data->is.field.send_delete = 0;
+       DbgPrint("Invoke raw delete %s\n", data->dbox_id);
+       invoke_raw_event_callback(DYNAMICBOX_EVAS_RAW_DELETE, data->dbox_id, NULL, ret);
+       remove_dbox_dirty_object_list(data);
+       remove_gbar_dirty_object_list(data); /* for the safety */
+       widget_unref(data);
+}
+
+static void widget_del(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (data->is.field.deleted == 1) {
+               DbgPrint("Already deleted: %s\n", data->dbox_id);
+               return;
+       }
+
+       data->is.field.deleted = 1;
+
+       s_info.list = eina_list_remove(s_info.list, dynamicbox);
+
+       if (data->handle) {
+               dynamicbox_set_data(data->handle, NULL);
+
+               if (data->is.field.send_delete) {
+                       int delete_type;
+
+                       if (data->is.field.permanent_delete) {
+                               delete_type = DBOX_DELETE_PERMANENTLY;
+                       } else {
+                               delete_type = DBOX_DELETE_TEMPORARY;
+                       }
+                       DbgPrint("Send delete request (0x%X)\n", delete_type);
+
+                       if (data->is.field.created) {
+                               if (dynamicbox_del(data->handle, delete_type, dbox_destroy_dbox_cb, widget_ref(data)) < 0) {
+                                       widget_unref(data);
+                               }
+                       } else {
+                               DbgPrint("Not created yet. this will be canceld by created callback, ignore delete callback\n");
+                               if (dynamicbox_del(data->handle, delete_type, NULL, NULL) < 0) {
+                                       DbgPrint("Unref %p\n", data);
+                               }
+                       }
+               } else {
+                       DbgPrint("Skip delete request\n");
+               }
+       } else {
+               DbgPrint("Handle is not created: %s\n", data->dbox_id);
+       }
+
+       /**
+        * From now, the dynamicbox object is not valid
+        */
+       data->dynamicbox = NULL;
+       widget_unref(data);
+}
+
+static void update_visibility(struct widget_data *data)
+{
+       int is_visible = 0;
+
+       if (!data->handle || !data->is.field.created) {
+               return;
+       }
+
+       if (data->is.field.freeze_visibility) {
+               DbgPrint("Freezed visibility: %X (%s)\n", data->freezed_visibility, dynamicbox_pkgname(data->handle));
+               (void)dynamicbox_set_visibility(data->handle, data->freezed_visibility);
+               return;
+       }
+
+       is_visible = evas_object_visible_get(data->stage);
+
+       if (is_visible) {
+               Evas_Coord x, y, w, h;
+
+               evas_object_geometry_get(data->dbox_layout, &x, &y, &w, &h);
+
+               if (!s_info.conf.field.user_view_port) {
+                       Ecore_Evas *ee;
+
+                       ee = ecore_evas_ecore_evas_get(data->e);
+                       if (ee) {
+                               ecore_evas_geometry_get(ee, &data->view_port.x, &data->view_port.y, &data->view_port.w, &data->view_port.h);
+                       } else {
+                               data->view_port.x = 0;
+                               data->view_port.y = 0;
+                               ecore_x_window_size_get(0, &data->view_port.w, &data->view_port.h);
+                               ErrPrint("Failed to get view port info (Fallback: %dx%d - %dx%d\n",
+                                       data->view_port.x, data->view_port.y, data->view_port.w, data->view_port.h);
+                       }
+               }
+
+               if (x + w <= data->view_port.x || x >= data->view_port.x + data->view_port.w || y + h <= data->view_port.y || y >= data->view_port.y + data->view_port.h) {
+                       is_visible = 0;
+               } else {
+                       is_visible = 1;
+               }
+       }
+
+       if (is_visible) {
+               (void)dynamicbox_set_visibility(data->handle, DBOX_SHOW);
+
+               if (data->is.field.dbox_dirty) {
+                       /**
+                        * If the object has dirty flag, pumping it up again
+                        * To updates its content
+                        */
+                       append_dbox_dirty_object_list(data);
+               }
+       } else {
+               (void)dynamicbox_set_visibility(data->handle, DBOX_HIDE_WITH_PAUSE);
+       }
+}
+
+static int do_force_mouse_up(struct widget_data *data)
+{
+       struct dynamicbox_mouse_event_info minfo;
+       Evas_Coord x, y, w, h;
+       struct dynamicbox_evas_event_info info;
+
+       if (s_info.conf.field.auto_render_selector && s_info.conf.field.render_animator == 0) {
+               DbgPrint("Change to render animator\n");
+               s_info.conf.field.render_animator = 1;
+       }
+
+       if (!data->is.field.pressed) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       evas_object_geometry_get(data->dynamicbox, &x, &y, &w, &h);
+
+       minfo.x = (double)(data->x - x) / (double)w;
+       minfo.y = (double)(data->y - y) / (double)h;
+
+       data->is.field.pressed = 0;
+
+       reset_scroller(data);
+
+       if (s_info.conf.field.auto_feed && data->is.field.mouse_event) {
+               DbgPrint("%x\n", data->is.field.cancel_click);
+               if (data->is.field.cancel_click != CANCEL_PROCESSED) {
+                       DbgPrint("ON_HOLD send\n");
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+                       data->is.field.cancel_click = CANCEL_PROCESSED;
+               }
+
+               minfo.x = (double)data->down.geo.x / (double)data->down.geo.w;
+               minfo.y = (double)data->down.geo.y / (double)data->down.geo.h;
+
+               dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_UNSET, &minfo);
+       } else {
+               if (!data->is.field.mouse_event) {
+                       /* We have to keep the first position of touch down */
+                       minfo.x = (double)(data->down.x - x) / (double)w;
+                       minfo.y = (double)(data->down.y - y) / (double)h;
+               }
+
+               DbgPrint("%x\n", data->is.field.cancel_click);
+               if (data->is.field.cancel_click != CANCEL_PROCESSED) {
+                       DbgPrint("ON_HOLD send\n");
+                       dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_ON_HOLD, &minfo);
+                       data->is.field.cancel_click = CANCEL_PROCESSED;
+               }
+
+               dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_UP, &minfo);
+               dynamicbox_feed_mouse_event(data->handle, DBOX_MOUSE_LEAVE, &minfo);
+       }
+
+       data->is.field.cancel_click = CANCEL_DISABLED;
+       data->is.field.flick_down = 0;
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_GBAR_CREATED;
+       info.error = DBOX_STATUS_ERROR_CANCEL;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_FLICKDOWN_CANCELLED, &info);
+       DbgPrint("Flick down is canceled\n");
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static void widget_move(Evas_Object *dynamicbox, Evas_Coord x, Evas_Coord y)
+{
+       struct widget_data *data;
+       Evas_Coord w, h;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (data->gbar_layout) {
+               Evas_Coord gbar_x, gbar_y, gbar_h;
+               Evas_Coord prev_x, prev_y;
+               Evas_Coord dbox_w, dbox_h;
+               double rx;
+               double ry;
+
+               evas_object_geometry_get(data->dbox_layout, &prev_x, &prev_y, &dbox_w, &dbox_h);
+               evas_object_geometry_get(data->gbar_layout, &gbar_x, &gbar_y, NULL, &gbar_h);
+
+               gbar_x += (x - prev_x);
+               gbar_y += (y - prev_y);
+
+               evas_object_move(data->gbar_layout, gbar_x, gbar_y);
+
+               rx = ((double)x + (double)dbox_w / 2.0f) / s_info.screen_width;
+               switch (find_size_type(data, dbox_w, dbox_h)) {
+               case DBOX_SIZE_TYPE_1x1:
+                       if (rx < 0.25f) {
+                               rx = 0.125f;
+                       } else if (rx < 0.5f) {
+                               rx = 0.375f;
+                       } else if (rx < 0.75f) {
+                               rx = 0.625f;
+                       } else if (rx < 1.0f) {
+                               rx = 0.875f;
+                       }
+                       break;
+               case DBOX_SIZE_TYPE_2x1:
+               case DBOX_SIZE_TYPE_2x2:
+                       if (rx < 0.5f) {
+                               rx = 0.25f;
+                       } else if (rx < 0.75f) {
+                               rx = 0.5f;
+                       } else {
+                               rx = 0.75f;
+                       }
+                       break;
+               default:
+                       rx = 0.5f;
+                       break;
+               }
+               if (prev_y + dbox_h + gbar_h > s_info.screen_height) {
+                       ry = 1.0f;
+               } else {
+                       ry = 0.0f;
+               }
+
+               if (data->is.field.gbar_created) {
+                       dynamicbox_move_glance_bar(data->handle, rx, ry);
+               }
+       }
+
+       evas_object_move(data->stage, x, y);
+       evas_object_move(data->dbox_layout, x, y);
+       evas_object_geometry_get(data->dbox_layout, NULL, NULL, &w, &h);
+
+       if (!s_info.conf.field.manual_pause_resume) {
+               update_visibility(data);
+       }
+
+       if (s_info.conf.field.sensitive_move) {
+               do_force_mouse_up(data);
+       }
+}
+
+static int dbox_create_plug_object(struct widget_data *data)
+{
+       struct acquire_data acquire_data = {
+               .w = 0,
+               .h = 0,
+               .content = NULL,
+               .data = data,
+       };
+
+       DbgPrint("Plug type created\n");
+
+       acquire_data.content = elm_object_part_content_unset(data->dbox_layout, "dynamicbox,content");
+       if (acquire_data.content) {
+               DbgPrint("Dynamicbox Content is already prepared: %s\n", dynamicbox_filename(data->handle));
+               evas_object_del(acquire_data.content);
+       }
+
+       acquire_data.content = elm_plug_add(s_info.win);
+       if (!acquire_data.content) {
+               ErrPrint("Failed to add a plug object\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       DbgPrint("Try to connect to %s\n", dynamicbox_filename(data->handle));
+       if (!elm_plug_connect(acquire_data.content, dynamicbox_filename(data->handle), 0, EINA_TRUE)) {
+               ErrPrint("Cannot connect plug[%s]", dynamicbox_filename(data->handle));
+               evas_object_del(acquire_data.content);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       elm_object_part_content_set(data->dbox_layout, "dynamicbox,content", acquire_data.content);
+
+       acquire_data.w = data->dbox_width;
+       acquire_data.h = data->dbox_height;
+       update_dbox_geometry(&acquire_data);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static int dbox_create_image_object(struct widget_data *data)
+{
+       Evas_Object *front_image;
+       struct acquire_data acquire_data = {
+               .w = 0,
+               .h = 0,
+               .content = NULL,
+               .data = data,
+       };
+
+       DbgPrint("Image type created\n");
+
+       acquire_data.content = elm_object_part_content_get(data->dbox_layout, "dynamicbox,content");
+       if (!acquire_data.content) {
+               acquire_data.content = elm_layout_add(data->parent);
+               if (!acquire_data.content) {
+                       ErrPrint("Failed to create an edje object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               if (elm_layout_file_set(acquire_data.content, DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_IMG) == EINA_FALSE) {
+                       ErrPrint("Failed to load edje object: %s(%s)\n", DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_IMG);
+                       evas_object_del(acquire_data.content);
+                       return DBOX_STATUS_ERROR_IO_ERROR;
+               }
+
+               front_image = elm_image_add(acquire_data.content);
+               if (!front_image) {
+                       ErrPrint("Failed to add front_image object\n");
+                       evas_object_del(acquire_data.content);
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               DbgPrint("Default size %dx%d\n", data->dbox_width, data->dbox_height);
+
+               elm_object_part_content_set(acquire_data.content, "front,content", front_image);
+               elm_object_part_content_set(data->dbox_layout, "dynamicbox,content", acquire_data.content);
+       } else {
+               front_image = elm_object_part_content_get(acquire_data.content, "front,content");
+               if (!front_image) {
+                       ErrPrint("Unable to get front,content object\n");
+                       front_image = elm_image_add(acquire_data.content);
+                       if (!front_image) {
+                               ErrPrint("Failed to add front_image object\n");
+                               return DBOX_STATUS_ERROR_FAULT;
+                       }
+
+                       elm_object_part_content_set(acquire_data.content, "front,content", front_image);
+               }
+       }
+
+       /*
+       evas_object_geometry_get(data->dynamicbox, NULL, NULL, &acquire_data.w, &acquire_data.h);
+       DbgPrint("Default size %dx%d\n", acquire_data.w, acquire_data.h);
+       DbgPrint("Image size: %dx%d\n", acquire_data.w, acquire_data.h);
+       */
+       acquire_data.w = data->dbox_width;
+       acquire_data.h = data->dbox_height;
+       update_dbox_geometry(&acquire_data);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static int dbox_create_buffer_object(struct widget_data *data)
+{
+       Evas_Object *dbox_content;
+
+       dbox_content = elm_object_part_content_get(data->dbox_layout, "dynamicbox,content");
+       if (!dbox_content) {
+               dbox_content = evas_object_image_filled_add(data->e);
+               if (!dbox_content) {
+                       ErrPrint("Failed to create an image object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_image_colorspace_set(dbox_content, EVAS_COLORSPACE_ARGB8888);
+               evas_object_image_alpha_set(dbox_content, EINA_TRUE);
+               elm_object_part_content_set(data->dbox_layout, "dynamicbox,content", dbox_content);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static int dbox_create_text_object(struct widget_data *data)
+{
+       ErrPrint("Unsupported\n");
+
+       /*!
+        * \todo
+        */
+
+       return DBOX_STATUS_ERROR_NOT_IMPLEMENTED;
+}
+
+static int dbox_create_pixmap_object(struct widget_data *data)
+{
+       Evas_Object *dbox_content;
+
+       dbox_content = elm_object_part_content_get(data->dbox_layout, "dynamicbox,content");
+       if (!dbox_content) {
+               dbox_content = evas_object_image_filled_add(data->e);
+               if (!dbox_content) {
+                       ErrPrint("Failed to create an image object\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               evas_object_image_colorspace_set(dbox_content, EVAS_COLORSPACE_ARGB8888);
+               evas_object_image_alpha_set(dbox_content, EINA_TRUE);
+               evas_object_event_callback_add(dbox_content, EVAS_CALLBACK_DEL, dbox_pixmap_del_cb, data);
+
+               elm_object_part_content_set(data->dbox_layout, "dynamicbox,content", dbox_content);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static void dbox_resize_pixmap_object(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox resize request is succssfully sent\n");
+}
+
+static void update_dbox_pixmap(Evas_Object *content, int w, int h)
+{
+       evas_object_image_pixels_dirty_set(content, EINA_TRUE);
+       evas_object_image_data_update_add(content, 0, 0, w, h);
+       evas_object_show(content);
+}
+
+static void acquire_dbox_pixmap_cb(struct dynamicbox *handle, int pixmap, void *cbdata)
+{
+       struct acquire_data *acquire_data = cbdata;
+       struct widget_data *data = acquire_data->data;
+       Evas_Native_Surface *old_surface;
+       Evas_Native_Surface surface;
+
+       data->is.field.dbox_pixmap_acquire_requested = 0;
+
+       if (pixmap == 0) {
+               DbgPrint("Pixmap gotten (0)\n");
+               free(acquire_data);
+               widget_unref(data);
+               return;
+       }
+
+       evas_object_image_size_set(acquire_data->content, acquire_data->w, acquire_data->h);
+       evas_object_image_fill_set(acquire_data->content, 0, 0, acquire_data->w, acquire_data->h);
+       DbgPrint("fillset: %dx%d\n", acquire_data->w, acquire_data->h);
+
+       surface.version = EVAS_NATIVE_SURFACE_VERSION;
+       surface.type = EVAS_NATIVE_SURFACE_X11;
+       surface.data.x11.pixmap = (unsigned int)pixmap;
+
+       old_surface = evas_object_image_native_surface_get(acquire_data->content);
+       if (!old_surface) {
+               surface.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
+
+               evas_object_image_native_surface_set(acquire_data->content, &surface);
+
+               DbgPrint("Created: %u\n", surface.data.x11.pixmap);
+       } else {
+               unsigned int old_pixmap;
+
+               old_pixmap = old_surface->data.x11.pixmap;
+
+               surface.data.x11.visual = old_surface->data.x11.visual;
+               evas_object_image_native_surface_set(acquire_data->content, &surface);
+
+               if (old_pixmap) {
+                       dynamicbox_release_resource_id(data->handle, 0, old_pixmap);
+               }
+       }
+
+       data->dbox_pixmap = pixmap;
+
+       append_dbox_dirty_object_list(data);
+       update_dbox_geometry(acquire_data);
+
+       widget_unref(data);
+       free(acquire_data);
+}
+
+static void dbox_update_pixmap_object(struct widget_data *data, Evas_Object *dbox_content, int w, int h)
+{
+       int ret;
+       struct acquire_data *acquire_data;
+
+       if (data->dbox_pixmap == dynamicbox_resource_id(data->handle, 0)) {
+               update_dbox_pixmap(dbox_content, w, h);
+               return;
+       }
+
+       if (data->is.field.dbox_pixmap_acquire_requested) {
+               return;
+       }
+
+       acquire_data = malloc(sizeof(*acquire_data));
+       if (!acquire_data) {
+               ErrPrint("malloc: %s\n", strerror(errno));
+               return;
+       }
+
+       acquire_data->data = widget_ref(data);
+       acquire_data->content = dbox_content;
+       acquire_data->w = w;
+       acquire_data->h = h;
+
+       ret = dynamicbox_acquire_resource_id(data->handle, 0, acquire_dbox_pixmap_cb, acquire_data);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               widget_unref(data);
+               free(acquire_data);
+       } else {
+               data->is.field.dbox_pixmap_acquire_requested = 1;
+       }
+}
+
+static void dbox_created_cb(struct dynamicbox *handle, int ret, void *cbdata)
+{
+       struct widget_data *data = cbdata;
+       struct dynamicbox_evas_event_info info;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p (%d), %s\n", data, ret, dynamicbox_pkgname(handle));
+               return;
+       }
+
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               DbgPrint("Failed to create: %X\n", ret);
+               data->handle = NULL;
+
+               if (!data->is.field.deleted) {
+                       struct dynamicbox_evas_event_info fault_event;
+
+                       fault_event.error = ret;
+                       fault_event.pkgname = data->dbox_id;
+                       fault_event.event = DBOX_EVENT_CREATED;
+
+                       if (!data->is.field.faulted) {
+                               data->is.field.faulted = 1;
+                               dbox_overlay_faulted(data);
+                       }
+
+                       DbgPrint("Display tap to load (%p) [%s]\n", data, data->dbox_id);
+                       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_CREATE_ABORTED, &fault_event);
+
+                       ret = DBOX_STATUS_ERROR_FAULT;
+               } else {
+                       ret = DBOX_STATUS_ERROR_CANCEL;
+               }
+
+               data->is.field.send_delete = 0;
+               DbgPrint("Invoke raw delete %s\n", data->dbox_id);
+               invoke_raw_event_callback(DYNAMICBOX_EVAS_RAW_DELETE, data->dbox_id, data->dynamicbox, ret);
+               widget_unref(data);
+               return;
+       }
+
+       switch (dynamicbox_type(handle, 0)) {
+       case DBOX_CONTENT_TYPE_IMAGE:
+               ret = dbox_create_image_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_RESOURCE_ID:
+               if (!s_info.conf.field.force_to_buffer) {
+                       ret = dbox_create_pixmap_object(data);
+                       break;
+               }
+       case DBOX_CONTENT_TYPE_BUFFER:
+               ret = dbox_create_buffer_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_TEXT:
+               ret = dbox_create_text_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_UIFW:
+               ret = dbox_create_plug_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_INVALID:
+       default:
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               break;
+       }
+
+       if (ret == DBOX_STATUS_ERROR_NONE) {
+               info.error = DBOX_STATUS_ERROR_NONE;
+               info.pkgname = data->dbox_id;
+               info.event = DBOX_EVENT_CREATED;
+
+               data->is.field.created = 1;
+
+               update_visibility(data);
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_CREATED, &info);
+               DbgPrint("Invoke raw create %s\n", data->dbox_id);
+               invoke_raw_event_callback(DYNAMICBOX_EVAS_RAW_CREATE, data->dbox_id, data->dynamicbox, ret);
+
+               /**
+                * In case of using the direct update path,
+                * sometimes the provider can send the updated event faster than created event.
+                * In that case, the viewer cannot recognize the updated content of a dbox.
+                * So for the safety, I added this to forcely update the dbox at the first time
+                * Right after creating its instance.
+                */
+               append_dbox_dirty_object_list(data);
+       } else {
+               info.error = ret;
+               info.pkgname = data->dbox_id;
+               info.event = DBOX_EVENT_CREATED;
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_CREATE_ABORTED, &info);
+               data->is.field.send_delete = 0;
+               DbgPrint("Invoke raw delete %s\n", data->dbox_id);
+               invoke_raw_event_callback(DYNAMICBOX_EVAS_RAW_DELETE, data->dbox_id, data->dynamicbox, ret);
+       }
+
+       widget_unref(data);
+}
+
+static void dbox_resize_image_object(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox resize request is succssfully sent\n");
+}
+
+static void dbox_resize_buffer_object(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox resize request is succssfully sent\n");
+}
+
+static void dbox_resize_text_object(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox resize request is succssfully sent\n");
+}
+
+static void dbox_resize_cb(struct dynamicbox *handle, int ret, void *cbdata)
+{
+       struct widget_data *data = cbdata;
+       struct dynamicbox_evas_event_info info;
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               info.error = ret;
+               info.event = DBOX_EVENT_DBOX_SIZE_CHANGED;
+               info.pkgname = data->dbox_id;
+               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_RESIZE_ABORTED, &info);
+               widget_unref(data);
+               return;
+       }
+
+       switch (dynamicbox_type(handle, 0)) {
+       case DBOX_CONTENT_TYPE_IMAGE:
+               dbox_resize_image_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_RESOURCE_ID:
+               if (!s_info.conf.field.force_to_buffer) {
+                       dbox_resize_pixmap_object(data);
+                       break;
+               }
+       case DBOX_CONTENT_TYPE_BUFFER:
+               dbox_resize_buffer_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_TEXT:
+               dbox_resize_text_object(data);
+               break;
+       case DBOX_CONTENT_TYPE_UIFW:
+               break;
+       case DBOX_CONTENT_TYPE_INVALID:
+               break;
+       default:
+               break;
+       }
+
+       info.error = ret;
+       info.event = DBOX_EVENT_DBOX_SIZE_CHANGED;
+       info.pkgname = data->dbox_id;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_RESIZED, &info);
+       widget_unref(data);
+}
+
+static void gbar_overlay_disable(struct widget_data *data)
+{
+       if (!data->gbar_layout) {
+               return;
+       }
+
+       if (!data->is.field.gbar_overlay_loaded) {
+               return;
+       }
+
+       elm_object_signal_emit(data->gbar_layout, "disable", "overlay");
+       data->is.field.gbar_overlay_loaded = 0;
+}
+
+static void gbar_overlay_loading(struct widget_data *data)
+{
+       Evas_Object *rect;
+
+       if (data->is.field.gbar_overlay_loaded) {
+               ErrPrint("Already loaded");
+               return;
+       }
+
+       rect = elm_object_part_content_unset(data->gbar_layout, "overlay,content");
+       if (rect) {
+               evas_object_del(rect);
+       }
+
+       rect = evas_object_rectangle_add(data->e);
+       evas_object_color_set(rect, 0, 0, 0, 0);
+       evas_object_show(rect);
+       /*!
+        * \todo
+        * Overlay for loading a GBAR
+        */
+
+       elm_object_part_content_set(data->gbar_layout, "overlay,content", rect);
+       elm_object_signal_emit(data->gbar_layout, "enable", "overlay");
+
+       data->is.field.gbar_overlay_loaded = 1;
+}
+
+static Evas_Object *dbox_load_overlay_edje(struct widget_data *data)
+{
+       Evas_Object *overlay;
+
+       overlay = elm_layout_add(data->parent);
+       if (!overlay) {
+               ErrPrint("Failed to create a overlay\n");
+               return NULL;
+       }
+
+       if (elm_layout_file_set(overlay, DYNAMICBOX_EVAS_RESOURCE_EDJ, DYNAMICBOX_EVAS_RESOURCE_OVERLAY_LOADING) == EINA_FALSE) {
+               ErrPrint("Failed to load overlay file\n");
+               evas_object_del(overlay);
+               return NULL;
+       }
+
+       elm_object_part_content_set(data->dbox_layout, "overlay,content", overlay);
+       return overlay;
+}
+
+static Eina_Bool delayed_overlay_disable_cb(void *_data)
+{
+       struct widget_data *data = _data;
+
+       elm_object_signal_emit(data->dbox_layout, "disable", "overlay");
+
+       data->is.field.dbox_overlay_loaded = 0;
+       data->overlay_update_counter = DEFAULT_OVERLAY_COUNTER;
+       data->overlay_timer = NULL;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void dbox_overlay_disable(struct widget_data *data, int no_timer)
+{
+       if (!data->dbox_layout) {
+               return;
+       }
+
+       if (!data->is.field.dbox_overlay_loaded) {
+               return;
+       }
+
+       data->overlay_update_counter--;
+       if (data->overlay_update_counter <= 0) {
+               if (no_timer) {
+                       if (data->overlay_timer) {
+                               ecore_timer_del(data->overlay_timer);
+                               data->overlay_timer = NULL;
+                       }
+                       delayed_overlay_disable_cb(data);
+               } else {
+                       if (data->overlay_timer) {
+                               ecore_timer_del(data->overlay_timer);
+                               data->overlay_timer = NULL;
+                               delayed_overlay_disable_cb(data);
+                       } else {
+                               return;
+                       }
+               }
+       }
+
+       if (!no_timer && !data->overlay_timer) {
+               data->overlay_timer = ecore_timer_add(DEFAULT_OVERLAY_WAIT_TIME, delayed_overlay_disable_cb, data);
+               if (!data->overlay_timer) {
+                       ErrPrint("Failed to create a timer\n");
+                       delayed_overlay_disable_cb(data);
+               }
+       }
+}
+
+static void dbox_overlay_loading(struct widget_data *data)
+{
+       struct acquire_data acquire_data;
+       Evas_Object *overlay;
+
+       if (data->is.field.disable_loading == 1) {
+               DbgPrint("Loading overlay is disabled");
+               return;
+       }
+
+       if (data->is.field.dbox_overlay_loaded == 1) {
+               DbgPrint("Overlay is already loaded");
+               return;
+       }
+
+       overlay = elm_object_part_content_get(data->dbox_layout, "overlay,content");
+       if (!overlay) {
+               overlay = dbox_load_overlay_edje(data);
+               if (!overlay) {
+                       return;
+               }
+       }
+
+       if (!data->is.field.disable_preview) {
+               char *icon;
+
+               icon = get_package_icon(data);
+               if (icon) {
+                       Evas_Object *preview;
+
+                       preview = elm_object_part_content_get(overlay, "preview");
+                       if (!preview) {
+                               preview = elm_image_add(overlay);
+                       }
+
+                       if (preview) {
+                               elm_image_file_set(preview, icon, NULL);
+                               elm_object_part_content_set(overlay, "preview", preview);
+                       }
+
+                       free(icon);
+               }
+
+               DbgPrint("Set overlay loading (%p) %s\n", data, data->dbox_id);
+       } else {
+               DbgPrint("Overlay is disabled (%s)\n", data->dbox_id);
+       }
+
+       elm_object_part_text_set(overlay, "text", _("IDS_IDLE_POP_LOADING_ING"));
+       if (data->is.field.disable_text) {
+               elm_object_signal_emit(overlay, "disable", "text");
+       }
+
+       elm_object_signal_emit(data->dbox_layout, "reset", "overlay");
+       elm_object_signal_emit(data->dbox_layout, "enable", "overlay");
+
+       evas_object_geometry_get(data->dynamicbox, NULL, NULL, &acquire_data.w, &acquire_data.h);
+       acquire_data.content = NULL;
+       acquire_data.data = data;
+       update_dbox_geometry(&acquire_data);
+
+       data->is.field.dbox_overlay_loaded = 1;
+       data->overlay_update_counter = DEFAULT_OVERLAY_COUNTER;
+}
+
+static void dbox_overlay_faulted(struct widget_data *data)
+{
+       struct acquire_data acquire_data;
+       Evas_Object *overlay;
+
+       if (data->is.field.dbox_overlay_loaded) {
+               data->overlay_update_counter = 0;
+               dbox_overlay_disable(data, 1);
+       }
+
+       overlay = elm_object_part_content_get(data->dbox_layout, "overlay,content");
+       if (!overlay) {
+               overlay = dbox_load_overlay_edje(data);
+               if (!overlay) {
+                       return;
+               }
+       }
+
+       if (dynamicbox_type(data->handle, 0) != DBOX_CONTENT_TYPE_IMAGE) {
+               Evas_Object *preview;
+
+               preview = elm_object_part_content_get(overlay, "preview");
+               if (!preview) {
+                       char *icon;
+
+                       icon = dynamicbox_service_preview(data->dbox_id, data->size_type);
+                       if (icon) {
+                               preview = elm_image_add(data->dbox_layout);
+                               if (preview) {
+                                       elm_image_file_set(preview, icon, NULL);
+                                       elm_object_part_content_set(overlay, "preview", preview);
+                               }
+
+                               free(icon);
+                       }
+               }
+       }
+
+       DbgPrint("Set overlay fault (%p) %s\n", data, data->dbox_id);
+       elm_object_part_text_set(overlay, "text", _("IDS_HS_BODY_UNABLE_TO_LOAD_DATA_TAP_TO_RETRY"));
+       elm_object_signal_emit(overlay, "enable", "text");
+       elm_object_signal_emit(data->dbox_layout, "reset", "overlay");
+       elm_object_signal_emit(data->dbox_layout, "enable", "overlay");
+
+       evas_object_geometry_get(data->dynamicbox, NULL, NULL, &acquire_data.w, &acquire_data.h);
+       acquire_data.content = NULL;
+       acquire_data.data = data;
+       update_dbox_geometry(&acquire_data);
+       data->is.field.dbox_overlay_loaded = 1;
+}
+
+static void widget_resize(Evas_Object *dynamicbox, Evas_Coord w, Evas_Coord h)
+{
+       struct widget_data *data;
+       int type;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       type = find_size_type(data, w, h);
+       if (type == DBOX_SIZE_TYPE_UNKNOWN) {
+               ErrPrint("Invalid size: %dx%d\n", w, h);
+               //return;
+       } else if (s_info.conf.field.use_fixed_size) {
+               if (dynamicbox_service_get_size(type, &w, &h) < 0) {
+                       ErrPrint("Failed to get box size\n");
+               }
+       }
+
+       data->dbox_width = w;
+       data->dbox_height = h;
+       data->size_type = type;
+
+       if (data->is.field.faulted) {
+               evas_object_resize(data->dbox_layout, data->dbox_width, data->dbox_height);
+               ErrPrint("Faulted DBox, skip resizing (%s)\n", data->dbox_id);
+               return;
+       }
+
+       if (!data->handle) {
+               struct acquire_data acquire_data = {
+                       .data = data,
+               };
+               DbgPrint("Create new handle: %dx%d, (%s, %s), %s/%s\n", data->dbox_width, data->dbox_height,
+                                               data->dbox_id, data->content,
+                                               data->cluster, data->category);
+               if (dynamicbox_activate(data->dbox_id, NULL, NULL) < 0) {
+                       ErrPrint("Activate: %s\n", data->dbox_id);
+               }
+               data->is.field.created = 0;
+               data->is.field.send_delete = 1;
+               update_dbox_geometry(&acquire_data);
+
+               data->handle = dynamicbox_add(data->dbox_id, data->content,
+                                        data->cluster, data->category,
+                                        data->period, type,
+                                        dbox_created_cb, widget_ref(data));
+               if (!data->handle) {
+                       ErrPrint("Failed to send add request\n");
+                       DbgPrint("Unref %p %s\n", data, data->dbox_id);
+                       widget_unref(data);
+                       return;
+               }
+
+               DbgPrint("Added handle: %p (%p)\n", data->handle, data);
+               dynamicbox_set_data(data->handle, dynamicbox);
+               dbox_overlay_loading(data);
+               data->is.field.touch_effect = dynamicbox_service_touch_effect(data->dbox_id, type);
+               data->is.field.mouse_event = dynamicbox_service_mouse_event(data->dbox_id, type);
+       } else {
+               int ret;
+
+               DbgPrint("Resize to %dx%d\n", w, h);
+
+               if (type > 0 && type != DBOX_SIZE_TYPE_UNKNOWN) {
+                       ret = dynamicbox_resize(data->handle, type, dbox_resize_cb, widget_ref(data));
+               } else {
+                       ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       /* This will be decreased soon ... */
+                       widget_ref(data);
+               }
+
+               evas_object_resize(data->dbox_layout, data->dbox_width, data->dbox_height);
+               if (ret == DBOX_STATUS_ERROR_ALREADY) {
+                       DbgPrint("Same size\n");
+                       widget_unref(data);
+               } else if (ret == DBOX_STATUS_ERROR_NONE) {
+                       DbgPrint("Resize request is successfully sent\n");
+                       data->is.field.touch_effect = dynamicbox_service_touch_effect(data->dbox_id, type);
+                       data->is.field.mouse_event = dynamicbox_service_mouse_event(data->dbox_id, type);
+               } else {
+                       widget_unref(data);
+               }
+       }
+}
+
+static void widget_show(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_show(data->stage);
+       evas_object_show(data->dbox_layout);
+
+       update_visibility(data);
+}
+
+static void widget_hide(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_hide(data->stage);
+       evas_object_hide(data->dbox_layout);
+
+       update_visibility(data);
+}
+
+static void widget_color_set(Evas_Object *dynamicbox, int r, int g, int b, int a)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_color_set(data->stage, r, g, b, a);
+}
+
+static void widget_clip_set(Evas_Object *dynamicbox, Evas_Object *clip)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_clip_set(data->stage, clip);
+}
+
+static void widget_clip_unset(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->state != WIDGET_DATA_CREATED) {
+               ErrPrint("Invalid widget data: %p\n", data);
+               return;
+       }
+
+       evas_object_clip_unset(data->stage);
+}
+
+/*!
+ * This must be called before update_gbar_geometry
+ */
+static void update_stage_geometry(struct acquire_data *acquire_data)
+{
+       Evas_Coord dbox_x, dbox_y, dbox_w, dbox_h;
+       Evas_Coord stage_w, stage_h;
+
+       evas_object_geometry_get(acquire_data->data->dbox_layout, &dbox_x, &dbox_y, &dbox_w, &dbox_h);
+
+       const int delta_y_top    = (acquire_data->h - dbox_y);
+       const int delta_y_bottom = (acquire_data->h - (s_info.screen_height - dbox_y - dbox_h));
+
+       stage_w = dbox_w > acquire_data->w ? dbox_w : acquire_data->w;
+       stage_h = dbox_h + acquire_data->h;// - delta_y_top;
+
+       if(delta_y_top >= delta_y_bottom)
+       {
+               evas_object_move(acquire_data->data->stage, 0, dbox_y);
+       }
+       else
+       {
+               evas_object_move(acquire_data->data->stage, 0, dbox_y - acquire_data->h);
+       }
+
+       evas_object_resize(acquire_data->data->stage, stage_w, stage_h);
+}
+
+static void update_gbar_geometry(struct acquire_data *acquire_data)
+{
+       Evas_Coord dbox_x, dbox_y, dbox_w, dbox_h;
+
+       evas_object_geometry_get(acquire_data->data->dbox_layout, &dbox_x, &dbox_y, &dbox_w, &dbox_h);
+
+       //How much of the GBAR is outside the screen
+       const int delta_y_top    = (acquire_data->h - dbox_y) < 0 ? 0 : acquire_data->h - dbox_y;
+       const int delta_y_bottom = (acquire_data->h - (s_info.screen_height - dbox_y - dbox_h)) < 0 ? 0 : (acquire_data->h - (s_info.screen_height - dbox_y - dbox_h));
+
+       //If more of the GBAR is outside the top side draw at the bottom, otherwise draw at the top
+       if(delta_y_top >= delta_y_bottom)
+       {
+               evas_object_move(acquire_data->data->gbar_layout, 0, dbox_y + dbox_h - delta_y_bottom);
+               effect_resize(acquire_data->data->gbar_layout, acquire_data->w, acquire_data->h, EFFECT_HEIGHT);
+       }
+       else
+       {
+               evas_object_move(acquire_data->data->gbar_layout, 0, dbox_y + delta_y_top);
+               effect_resize(acquire_data->data->gbar_layout, acquire_data->w, acquire_data->h, EFFECT_HEIGHT|EFFECT_MOVE);
+       }
+}
+
+static void update_dbox_geometry(struct acquire_data *acquire_data)
+{
+       Evas_Coord dbox_x, dbox_y, dbox_w, dbox_h;
+       Evas_Coord stage_w, stage_h;
+       struct widget_data *data = acquire_data->data;
+
+       evas_object_resize(data->dbox_layout, data->dbox_width, data->dbox_height);
+       evas_object_geometry_get(data->dbox_layout, &dbox_x, &dbox_y, &dbox_w, &dbox_h);
+
+       if (data->gbar_layout) {
+               Evas_Coord gbar_x, gbar_y, gbar_w, gbar_h;
+
+               evas_object_geometry_get(data->gbar_layout, &gbar_x, &gbar_y, &gbar_w, &gbar_h);
+               if (dbox_y + dbox_h + gbar_h > s_info.screen_height) {
+                       evas_object_move(data->gbar_layout, 0, dbox_y - gbar_h);
+                       evas_object_move(data->stage, 0, dbox_y - gbar_h);
+               } else {
+                       evas_object_move(data->gbar_layout, 0, dbox_y + dbox_h);
+                       evas_object_move(data->stage, 0, dbox_y);
+               }
+
+               stage_w = gbar_w > dbox_w ? gbar_w : dbox_w;
+               stage_h = dbox_h + gbar_h;
+       } else {
+               stage_w = dbox_w;
+               if (s_info.conf.field.support_gbar) {
+                       stage_h = dbox_h + 100; /* Reserve 100 px for effect */
+               } else {
+                       stage_h = dbox_h;
+               }
+
+               evas_object_move(data->stage, dbox_x, dbox_y);
+       }
+
+       evas_object_resize(data->stage, stage_w, stage_h);
+}
+
+static void dbox_update_image_object(struct widget_data *data, Evas_Object *dbox_content, int w, int h)
+{
+       Evas_Object *front_image;
+
+       front_image = elm_object_part_content_get(dbox_content, "front,content");
+       if (front_image) {
+               elm_image_file_set(front_image, dynamicbox_filename(data->handle), NULL);
+       } else {
+               ErrPrint("Image object not found\n");
+       }
+}
+
+static void dbox_update_buffer_object(struct widget_data *data, Evas_Object *dbox_content, int w, int h)
+{
+       struct acquire_data acquire_data = {
+               .w = w,
+               .h = h,
+               .content = dbox_content,
+               .data = data,
+       };
+
+       if (data->dbox_fb) {
+               dynamicbox_release_fb(data->dbox_fb);
+               data->dbox_fb = NULL;
+       }
+
+       data->dbox_fb = dynamicbox_acquire_fb(data->handle, 0);
+       if (!data->dbox_fb) {
+               ErrPrint("Failed to get fb\n");
+               return;
+       }
+
+       evas_object_image_size_set(dbox_content, w, h);
+
+       if (dynamicbox_acquire_fb_lock(data->handle, 0) < 0) {
+               ErrPrint("Failed to acquire lock\n");
+       }
+       evas_object_image_data_copy_set(dbox_content, data->dbox_fb);
+       if (dynamicbox_release_fb_lock(data->handle, 0) < 0) {
+               ErrPrint("Failed to release lock\n");
+       }
+
+       evas_object_image_fill_set(dbox_content, 0, 0, w, h);
+       evas_object_image_pixels_dirty_set(dbox_content, EINA_TRUE);
+       evas_object_image_data_update_add(dbox_content, 0, 0, w, h);
+       update_dbox_geometry(&acquire_data);
+}
+
+static void dbox_update_text_object(struct widget_data *data, Evas_Object *dbox_content, int w, int h)
+{
+       struct acquire_data acquire_data = {
+               .w = w,
+               .h = h,
+               .content = dbox_content,
+               .data = data,
+       };
+
+       update_dbox_geometry(&acquire_data);
+}
+
+static void dynamicbox_event_extra_info_updated(struct widget_data *data)
+{
+       struct dynamicbox_evas_event_info info;
+       const char *content_info;
+       char *tmp;
+
+       if (data->is.field.deleted) {
+               DbgPrint("Box is %s, ignore update\n", data->is.field.deleted ? "deleted" : "faulted");
+               return;
+       }
+
+       content_info = dynamicbox_content(data->handle);
+       if (content_info && data->content) {
+               if (!strcmp(content_info, data->content)) {
+                       /* Nothing chnaged */
+               } else {
+                       tmp = strdup(content_info);
+                       if (!tmp) {
+                               ErrPrint("Heap: %s\n", strerror(errno));
+                               return;
+                       }
+
+                       free(data->content);
+                       data->content = tmp;
+               }
+       } else if (content_info) {
+               tmp = strdup(content_info);
+               if (!tmp) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return;
+               }
+               data->content = tmp;
+       } else if (data->content) {
+               free(data->content);
+               data->content = NULL;
+       } else {
+               /* Nothing changed */
+       }
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_EXTRA_INFO_UPDATED;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_EXTRA_INFO_UPDATED, &info);
+}
+
+/*!
+ * Event handlers
+ */
+static void dynamicbox_event_dbox_updated(struct widget_data *data)
+{
+       Evas_Object *dbox_content;
+       int type;
+       int w, h;
+       struct dynamicbox_evas_event_info info;
+
+       data->is.field.dbox_dirty = 0;
+
+       if (data->is.field.deleted) {
+               DbgPrint("Box is %s, ignore update\n", data->is.field.deleted ? "deleted" : "faulted");
+               return;
+       }
+
+       dbox_content = elm_object_part_content_get(data->dbox_layout, "dynamicbox,content");
+       if (!dbox_content) {
+               ErrPrint("Failed to get content object\n");
+               return;
+       }
+
+       type = dynamicbox_size(data->handle);
+       if (type < 0 || type == DBOX_SIZE_TYPE_UNKNOWN) {
+               ErrPrint("Size is not valid %X\n", type);
+               return;
+       }
+
+       w = data->dbox_width;
+       h = data->dbox_height;
+
+       switch (dynamicbox_type(data->handle, 0)) {
+       case DBOX_CONTENT_TYPE_IMAGE:
+               dbox_update_image_object(data, dbox_content, w, h);
+               break;
+       case DBOX_CONTENT_TYPE_RESOURCE_ID:
+               if (!s_info.conf.field.force_to_buffer) {
+                       dbox_update_pixmap_object(data, dbox_content, w, h);
+                       break;
+               }
+       case DBOX_CONTENT_TYPE_BUFFER:
+               dbox_update_buffer_object(data, dbox_content, w, h);
+               break;
+       case DBOX_CONTENT_TYPE_TEXT:
+               dbox_update_text_object(data, dbox_content, w, h);
+               break;
+       case DBOX_CONTENT_TYPE_UIFW:
+               break;
+       case DBOX_CONTENT_TYPE_INVALID:
+       default:
+               break;
+       }
+
+       dbox_overlay_disable(data, 0);
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_DBOX_UPDATED;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_UPDATED, &info);
+}
+
+static void gbar_update_buffer_object(struct widget_data *data, Evas_Object *gbar_content, int w, int h)
+{
+       struct acquire_data acquire_data = {
+               .data = data,
+               .content = gbar_content,
+               .w = w,
+               .h = h,
+       };
+
+       if (data->gbar_fb) {
+               dynamicbox_release_fb(data->gbar_fb);
+               data->gbar_fb = NULL;
+       } else {
+               // This is first time
+               gbar_overlay_disable(data);
+       }
+
+       data->gbar_fb = dynamicbox_acquire_fb(data->handle, 1);
+       if (!data->gbar_fb) {
+               ErrPrint("Failed to get fb\n");
+               return;
+       }
+
+       evas_object_image_size_set(gbar_content, w, h);
+
+       if (dynamicbox_acquire_fb_lock(data->handle, 1) < 0) {
+               ErrPrint("Failed to acquire lock\n");
+       }
+       evas_object_image_data_copy_set(gbar_content, data->gbar_fb);
+       if (dynamicbox_release_fb_lock(data->handle, 1) < 0) {
+               ErrPrint("Failed to release lock\n");
+       }
+
+       evas_object_image_fill_set(gbar_content, 0, 0, w, h);
+       evas_object_image_pixels_dirty_set(gbar_content, EINA_TRUE);
+       evas_object_image_data_update_add(gbar_content, 0, 0, w, h);
+
+       update_stage_geometry(&acquire_data);
+       update_gbar_geometry(&acquire_data);
+}
+
+static void gbar_update_text_object(struct widget_data *data, Evas_Object *gbar_content, int w, int h)
+{
+       struct acquire_data acquire_data = {
+               .data = data,
+               .content = gbar_content,
+               .w = w,
+               .h = h,
+       };
+
+       ErrPrint("Text type is updated\n");
+       gbar_overlay_disable(data);
+
+       update_stage_geometry(&acquire_data);
+       update_gbar_geometry(&acquire_data);
+}
+
+static void update_gbar_pixmap(Evas_Object *content, int w, int h)
+{
+       evas_object_image_pixels_dirty_set(content, EINA_TRUE);
+       evas_object_image_data_update_add(content, 0, 0, w, h);
+       evas_object_show(content);
+}
+
+static void acquire_gbar_pixmap_cb(struct dynamicbox *handle, int pixmap, void *cbdata)
+{
+       struct acquire_data *acquire_data = cbdata;
+       struct widget_data *data = acquire_data->data;
+       Evas_Native_Surface *old_surface;
+       Evas_Native_Surface surface;
+
+       data->is.field.gbar_pixmap_acquire_requested = 0;
+
+       if (pixmap == 0) {
+               ErrPrint("Failed to acquire pixmap\n");
+               DbgPrint("Unref %p %s\n", data, data->dbox_id);
+               widget_unref(data);
+               free(acquire_data);
+               return;
+       }
+
+       evas_object_image_size_set(acquire_data->content, acquire_data->w, acquire_data->h);
+       evas_object_image_fill_set(acquire_data->content, 0, 0, acquire_data->w, acquire_data->h);
+
+       surface.version = EVAS_NATIVE_SURFACE_VERSION;
+       surface.type = EVAS_NATIVE_SURFACE_X11;
+       surface.data.x11.pixmap = (unsigned int)pixmap;
+
+       old_surface = evas_object_image_native_surface_get(acquire_data->content);
+       if (!old_surface) {
+               gbar_overlay_disable(data);
+               surface.data.x11.visual = ecore_x_default_visual_get(ecore_x_display_get(), ecore_x_default_screen_get());
+               evas_object_image_native_surface_set(acquire_data->content, &surface);
+       } else {
+               unsigned int old_pixmap = 0u;
+               old_pixmap = old_surface->data.x11.pixmap;
+               surface.data.x11.visual = old_surface->data.x11.visual;
+               evas_object_image_native_surface_set(acquire_data->content, &surface);
+
+               if (old_pixmap) {
+                       dynamicbox_release_resource_id(data->handle, 1, old_pixmap);
+               }
+       }
+
+       data->gbar_pixmap = (unsigned int)pixmap;
+
+       append_gbar_dirty_object_list(data);
+       update_stage_geometry(acquire_data);
+       update_gbar_geometry(acquire_data);
+
+       free(acquire_data);
+       DbgPrint("Unref %p %s\n", data, data->dbox_id);
+       widget_unref(data);
+}
+
+static void gbar_update_pixmap_object(struct widget_data *data, Evas_Object *gbar_content, int w, int h)
+{
+       struct acquire_data *acquire_data;
+       int ret;
+
+       if (data->gbar_pixmap == dynamicbox_resource_id(data->handle, 1)) {
+               int ow;
+               int oh;
+
+               effect_size_get(gbar_content, &ow, &oh);
+
+               update_gbar_pixmap(gbar_content, w, h);
+
+               if (ow != w || oh != h) {
+                       struct acquire_data adata = {
+                               .data = data,
+                               .content = gbar_content,
+                               .w = w,
+                               .h = h,
+                       };
+
+                       update_stage_geometry(&adata);
+               }
+               return;
+       }
+
+       if (data->is.field.gbar_pixmap_acquire_requested) {
+               return;
+       }
+
+       acquire_data = malloc(sizeof(*acquire_data));
+       if (!acquire_data) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return;
+       }
+
+       acquire_data->content = gbar_content;
+       acquire_data->w = w;
+       acquire_data->h = h;
+       acquire_data->data = widget_ref(data);
+
+       ret = dynamicbox_acquire_resource_id(data->handle, 1, acquire_gbar_pixmap_cb, acquire_data);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               ErrPrint("Failed to acquire gbar resource id\n");
+               free(acquire_data);
+               DbgPrint("Unref %p %s\n", data, data->dbox_id);
+               widget_unref(data);
+       } else {
+               data->is.field.gbar_pixmap_acquire_requested = 1;
+       }
+}
+
+static void dynamicbox_event_gbar_updated(struct widget_data *data)
+{
+       Evas_Object *gbar_content;
+       int w, h;
+
+       data->is.field.gbar_dirty = 0;
+
+       if (data->is.field.deleted) {
+               DbgPrint("Box is deleted, ignore update\n");
+               return;
+       }
+
+       gbar_content = elm_object_part_content_get(data->gbar_layout, "gbar,content");
+       if (!gbar_content) {
+               ErrPrint("Failed to get content object\n");
+               return;
+       }
+
+       if (dynamicbox_get_glance_bar_size(data->handle, &w, &h) != DBOX_STATUS_ERROR_NONE) {
+               ErrPrint("Failed to get gbar_size\n");
+               w = 0;
+               h = 0;
+       }
+
+       switch (dynamicbox_type(data->handle, 1)) {
+       case DBOX_CONTENT_TYPE_RESOURCE_ID:
+               if (!s_info.conf.field.force_to_buffer) {
+                       gbar_update_pixmap_object(data, gbar_content, w, h);
+                       break;
+               }
+       case DBOX_CONTENT_TYPE_BUFFER:
+               gbar_update_buffer_object(data, gbar_content, w, h);
+               break;
+       case DBOX_CONTENT_TYPE_TEXT:
+               gbar_update_text_object(data, gbar_content, w, h);
+               break;
+       case DBOX_CONTENT_TYPE_UIFW:
+               break;
+       case DBOX_CONTENT_TYPE_INVALID:
+       default:
+               ErrPrint("Invalid pd type\n");
+               break;
+       }
+}
+
+static void dynamicbox_event_deleted(struct widget_data *data)
+{
+       struct dynamicbox_evas_event_info info;
+
+       if (data->dbox_fb) {
+               dynamicbox_release_fb(data->dbox_fb);
+               data->dbox_fb = NULL;
+       }
+
+       if (data->gbar_fb) {
+               dynamicbox_release_fb(data->gbar_fb);
+               data->gbar_fb = NULL;
+       }
+
+       if (data->dbox_pixmap) {
+               replace_dbox_pixmap_with_image(data);
+       }
+
+       if (data->gbar_pixmap) {
+               replace_gbar_pixmap_with_image(data);
+       }
+
+       DbgPrint("Dynamicbox is deleted: %p (emit signal)\n", data);
+       data->is.field.send_delete = 0;
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_DELETED;
+       info.error = data->is.field.faulted ? DBOX_STATUS_ERROR_FAULT : DBOX_STATUS_ERROR_NONE;
+
+       /**
+        * Even if the dynamicbox object tries to be deleted from DBOX_DELETED event callback,
+        * widget data should not be released while processing RAW_DELETE event handling
+        */
+       widget_ref(data);
+
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_DELETED, &info);
+       DbgPrint("Invoke raw delete %s\n", data->dbox_id);
+       invoke_raw_event_callback(DYNAMICBOX_EVAS_RAW_DELETE, data->dbox_id, data->dynamicbox, info.error);
+
+       remove_dbox_dirty_object_list(data);
+       remove_gbar_dirty_object_list(data); /* For the safety */
+
+       data->handle = NULL;
+
+       /**
+        * All event handler is handled correctly,
+        * Then decrease the refcnt of it.
+        */
+       widget_unref(data);
+}
+
+static void dynamicbox_event_request_close_gbar(struct widget_data *data)
+{
+       int ret;
+
+       ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+       if (ret < 0) {
+               ErrPrint("Failed to close a GBAR: %x\n", ret);
+               DbgPrint("Unref %p %s\n", data, data->dbox_id);
+               widget_unref(data);
+       }
+}
+
+static void dynamicbox_event_group_changed(struct widget_data *data)
+{
+       DbgPrint("Group is changed\n");
+}
+
+static void dynamicbox_event_pinup_changed(struct widget_data *data)
+{
+       DbgPrint("Pinup is changed\n");
+}
+
+static void dynamicbox_event_period_changed(struct widget_data *data)
+{
+       struct dynamicbox_evas_event_info info;
+
+       data->period = dynamicbox_period(data->handle);
+       DbgPrint("Update period is changed to (%lf)\n", data->period);
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_PERIOD_CHANGED;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_PERIOD_CHANGED, &info);
+}
+
+static void dynamicbox_event_dbox_size_changed(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox LB size is changed\n");
+}
+
+static void dynamicbox_event_gbar_size_changed(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox GBAR size is changed\n");
+}
+
+static void dynamicbox_event_gbar_created(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox GBAR is created\n");
+}
+
+static void dynamicbox_event_gbar_destroyed(struct widget_data *data)
+{
+       DbgPrint("Dynamicbox GBAR is destroyed\n");
+       remove_gbar_dirty_object_list(data);
+}
+
+static void dynamicbox_event_hold_scroll(struct widget_data *data)
+{
+       struct dynamicbox_evas_event_info info;
+       DbgPrint("Dynamicbox hold scroll\n");
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_HOLD_SCROLL;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_CONTROL_SCROLLER, &info);
+}
+
+static void dynamicbox_event_release_scroll(struct widget_data *data)
+{
+       struct dynamicbox_evas_event_info info;
+       DbgPrint("Dynamicbox release scroll\n");
+
+       info.pkgname = data->dbox_id;
+       info.event = DBOX_EVENT_RELEASE_SCROLL;
+       info.error = DBOX_STATUS_ERROR_NONE;
+       smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_CONTROL_SCROLLER, &info);
+}
+
+static void dynamicbox_event_dbox_update_begin(struct widget_data *data)
+{
+       DbgPrint("DBOX Update Begin\n");
+}
+
+static void dynamicbox_event_dbox_update_end(struct widget_data *data)
+{
+       DbgPrint("DBOX Update End\n");
+}
+
+static void dynamicbox_event_gbar_update_begin(struct widget_data *data)
+{
+       DbgPrint("GBAR Update Begin\n");
+}
+
+static void dynamicbox_event_gbar_update_end(struct widget_data *data)
+{
+       DbgPrint("GBAR Update End\n");
+}
+
+static void dynamicbox_event_update_mode_changed(struct widget_data *data)
+{
+       DbgPrint("Update mode changed\n");
+}
+
+static void dynamicbox_event_ignored(struct widget_data *data)
+{
+       DbgPrint("Request is ignored\n");
+}
+
+static int dynamicbox_event_handler(struct dynamicbox *handle, enum dynamicbox_event_type event, void *cbdata)
+{
+       Evas_Object *dynamicbox;
+       struct widget_data *data;
+
+       dynamicbox = dynamicbox_data(handle);
+       if (!dynamicbox) {
+               ErrPrint("dynamicbox object is not exists\n");
+               return 0;
+       }
+
+       data = get_smart_data(dynamicbox);
+       if (!data || data->is.field.deleted) {
+               ErrPrint("Failed to get smart data\n");
+               dynamicbox_set_data(handle, NULL);
+               if (event == DBOX_EVENT_CREATED) {
+                       DbgPrint("System created dynamicbox is not supported\n");
+                       (void)dynamicbox_del(handle, DBOX_DELETE_PERMANENTLY, NULL, NULL);
+               }
+               return 0;
+       }
+
+       switch (event) {
+       case DBOX_EVENT_DBOX_UPDATED:
+               append_dbox_dirty_object_list(data);
+               break;
+       case DBOX_EVENT_GBAR_UPDATED:
+               append_gbar_dirty_object_list(data);
+               break;
+       case DBOX_EVENT_EXTRA_INFO_UPDATED:
+               dynamicbox_event_extra_info_updated(data);
+               break;
+
+       case DBOX_EVENT_DELETED:
+               dynamicbox_event_deleted(data);
+               break;
+
+       case DBOX_EVENT_GROUP_CHANGED:
+               dynamicbox_event_group_changed(data);
+               break;
+       case DBOX_EVENT_PINUP_CHANGED:
+               dynamicbox_event_pinup_changed(data);
+               break;
+       case DBOX_EVENT_PERIOD_CHANGED:
+               dynamicbox_event_period_changed(data);
+               break;
+
+       case DBOX_EVENT_DBOX_SIZE_CHANGED:
+               dynamicbox_event_dbox_size_changed(data);
+               break;
+       case DBOX_EVENT_GBAR_SIZE_CHANGED:
+               dynamicbox_event_gbar_size_changed(data);
+               break;
+
+       case DBOX_EVENT_GBAR_CREATED:
+               dynamicbox_event_gbar_created(data);
+               break;
+       case DBOX_EVENT_GBAR_DESTROYED:
+               dynamicbox_event_gbar_destroyed(data);
+               break;
+
+       case DBOX_EVENT_HOLD_SCROLL:
+               dynamicbox_event_hold_scroll(data);
+               break;
+       case DBOX_EVENT_RELEASE_SCROLL:
+               dynamicbox_event_release_scroll(data);
+               break;
+
+       case DBOX_EVENT_DBOX_UPDATE_BEGIN:
+               dynamicbox_event_dbox_update_begin(data);
+               break;
+       case DBOX_EVENT_DBOX_UPDATE_END:
+               dynamicbox_event_dbox_update_end(data);
+               break;
+
+       case DBOX_EVENT_GBAR_UPDATE_BEGIN:
+               dynamicbox_event_gbar_update_begin(data);
+               break;
+       case DBOX_EVENT_GBAR_UPDATE_END:
+               dynamicbox_event_gbar_update_end(data);
+               break;
+
+       case DBOX_EVENT_UPDATE_MODE_CHANGED:
+               dynamicbox_event_update_mode_changed(data);
+               break;
+
+       case DBOX_EVENT_REQUEST_CLOSE_GBAR:
+               dynamicbox_event_request_close_gbar(data);
+               break;
+
+       case DBOX_EVENT_IGNORED:
+               dynamicbox_event_ignored(data);
+               break;
+       default:
+               break;
+       }
+
+       return 0;
+}
+
+static int dynamicbox_fault_handler(enum dynamicbox_fault_type fault, const char *pkgname, const char *filename, const char *funcname, void *cbdata)
+{
+       Eina_List *l = NULL;
+       Evas_Object *dynamicbox;
+       struct widget_data *data;
+       struct dynamicbox_evas_event_info info;
+
+       switch (fault) {
+       case DBOX_FAULT_DEACTIVATED:
+               EINA_LIST_FOREACH(s_info.list, l, dynamicbox) {
+                       data = get_smart_data(dynamicbox);
+                       if (!data) {
+                               continue;
+                       }
+
+                       if (!strcmp(data->dbox_id, pkgname)) {
+                               DbgPrint("Faulted: %s (%p)\n", pkgname, data);
+                               data->is.field.faulted = 1;
+                               dbox_overlay_faulted(data);
+                               info.error = DBOX_STATUS_ERROR_FAULT;
+                               info.pkgname = data->dbox_id;
+                               info.event = DBOX_FAULT_DEACTIVATED;
+                               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_DBOX_FAULTED, &info);
+                       }
+               }
+               break;
+       case DBOX_FAULT_PROVIDER_DISCONNECTED:
+               EINA_LIST_FOREACH(s_info.list, l, dynamicbox) {
+                       data = get_smart_data(dynamicbox);
+                       if (!data) {
+                               continue;
+                       }
+
+                       if (!strcmp(data->dbox_id, pkgname)) {
+                               DbgPrint("Disconnected: %s (%p)\n", pkgname, data);
+                               data->is.field.faulted = 1;
+                               dbox_overlay_faulted(data);
+                               info.error = DBOX_STATUS_ERROR_FAULT;
+                               info.pkgname = data->dbox_id;
+                               info.event = DBOX_FAULT_PROVIDER_DISCONNECTED;
+                               smart_callback_call(data, DYNAMICBOX_SMART_SIGNAL_PROVIDER_DISCONNECTED, &info);
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+       return 0;
+}
+
+EAPI int evas_object_dynamicbox_init(Evas_Object *win, int force_to_buffer)
+{
+       int ret;
+
+       ecore_x_window_size_get(0, &s_info.screen_width, &s_info.screen_height);
+
+       dynamicbox_set_option(DBOX_OPTION_DIRECT_UPDATE, 1);
+       s_info.conf.field.render_animator = 1;  // By default, use render animator for updating
+
+       ret = dynamicbox_init(ecore_x_display_get(), 1, 0.001f, 1);
+       if (ret < 0) {
+               return ret;
+       }
+
+       ret = dynamicbox_set_event_handler(dynamicbox_event_handler, NULL);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               ErrPrint("Failed to set handler\n");
+               dynamicbox_fini();
+       } else {
+               DbgPrint("Event handler registered\n");
+               ret = dynamicbox_set_fault_handler(dynamicbox_fault_handler, NULL);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       ErrPrint("Failed to set fault handler\n");
+                       dynamicbox_unset_event_handler(dynamicbox_event_handler);
+                       dynamicbox_fini();
+               } else {
+                       DbgPrint("Fault handler is registered\n");
+               }
+       }
+
+       s_info.conf.field.force_to_buffer = force_to_buffer;
+       s_info.win = win;
+
+       return ret;
+}
+
+EAPI int evas_object_dynamicbox_fini(void)
+{
+       dynamicbox_unset_event_handler(dynamicbox_event_handler);
+       dynamicbox_unset_fault_handler(dynamicbox_fault_handler);
+       dynamicbox_fini();
+       return 0;
+}
+
+EAPI int evas_object_dynamicbox_resumed(void)
+{
+       return dynamicbox_viewer_set_resumed();
+}
+
+EAPI int evas_object_dynamicbox_paused(void)
+{
+       return dynamicbox_viewer_set_paused();
+}
+
+EAPI Evas_Object *evas_object_dynamicbox_add(Evas_Object *parent, const char *dbox_id, const char *content_info, const char *cluster, const char *category, double period)
+{
+       struct widget_data *data;
+       Evas_Object *dynamicbox;
+       char *_dbox_id;
+       char *_content_info;
+       char *_cluster;
+       char *_category;
+
+       if (!parent || !dbox_id) {
+               return NULL;
+       }
+
+       if (!cluster) {
+               cluster = "user,created";
+       }
+
+       if (!category) {
+               category = "default";
+       }
+
+       _cluster = strdup(cluster);
+       if (!_cluster) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return NULL;
+       }
+
+       _category = strdup(category);
+       if (!_category) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               free(_cluster);
+               return NULL;
+       }
+
+       _dbox_id = strdup(dbox_id);
+       if (!_dbox_id) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               free(_category);
+               free(_cluster);
+               return NULL;
+       }
+
+       if (content_info) {
+               _content_info = strdup(content_info);
+               if (!_content_info) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       free(_dbox_id);
+                       free(_category);
+                       free(_cluster);
+                       return NULL;
+               }
+       } else {
+               _content_info = NULL;
+       }
+
+       if (!s_info.smart) {
+               s_info.sc.add = widget_add;
+               s_info.sc.del = widget_del;
+               s_info.sc.move = widget_move;
+               s_info.sc.resize = widget_resize;
+               s_info.sc.show = widget_show;
+               s_info.sc.hide = widget_hide;
+               s_info.sc.color_set = widget_color_set;
+               s_info.sc.clip_set = widget_clip_set;
+               s_info.sc.clip_unset = widget_clip_unset;
+
+               s_info.smart = evas_smart_class_new(&s_info.sc);
+       }
+
+       dynamicbox = evas_object_smart_add(evas_object_evas_get(parent), s_info.smart);
+
+       data = evas_object_smart_data_get(dynamicbox);
+       if (data) {
+               data->parent = parent;
+               data->dbox_id = _dbox_id;
+               data->content = _content_info;
+               data->cluster = _cluster;
+               data->category = _category;
+               data->is.field.mouse_event = 0;
+               data->period = period;
+
+               widget_data_setup(data);
+       } else {
+               ErrPrint("Failed to get smart data\n");
+               free(_dbox_id);
+               free(_content_info);
+               free(_cluster);
+               free(_category);
+       }
+
+       return dynamicbox;
+}
+
+EAPI int evas_object_dynamicbox_view_port_set(Evas_Object *dynamicbox, int x, int y, int w, int h)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       data->view_port.x = x;
+       data->view_port.y = y;
+       data->view_port.w = w;
+       data->view_port.h = h;
+       s_info.conf.field.user_view_port = 1;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_view_port_get(Evas_Object *dynamicbox, int *x, int *y, int *w, int *h)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (x) {
+               *x = data->view_port.x;
+       }
+
+       if (y) {
+               *y = data->view_port.y;
+       }
+
+       if (w) {
+               *w = data->view_port.w;
+       }
+
+       if (h) {
+               *h = data->view_port.h;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_conf_set(enum dynamicbox_evas_conf type, int value)
+{
+       switch (type) {
+       case DYNAMICBOX_EVAS_SENSITIVE_MOVE:
+               s_info.conf.field.sensitive_move = value;
+               break;
+       case DYNAMICBOX_EVAS_EVENT_AUTO_FEED:
+               s_info.conf.field.auto_feed = value;
+               break;
+       case DYNAMICBOX_EVAS_EASY_MODE:
+               s_info.conf.field.easy_mode = value;
+               break;
+       case DYNAMICBOX_EVAS_USE_FIXED_SIZE:
+               s_info.conf.field.use_fixed_size = value;
+               break;
+       case DYNAMICBOX_EVAS_MANUAL_PAUSE_RESUME:
+               s_info.conf.field.manual_pause_resume = value;
+               break;
+       case DYNAMICBOX_EVAS_SHARED_CONTENT:
+               (void)dynamicbox_set_option(DBOX_OPTION_SHARED_CONTENT, value);
+               break;
+       case DYNAMICBOX_EVAS_SUPPORT_GBAR:
+               s_info.conf.field.support_gbar = value;
+               break;
+       case DYNAMICBOX_EVAS_SCROLL_X:
+               s_info.conf.field.is_scroll_x = value;
+               break;
+       case DYNAMICBOX_EVAS_SCROLL_Y:
+               s_info.conf.field.is_scroll_y = value;
+               break;
+       case DYNAMICBOX_EVAS_DELAYED_PAUSE_RESUME:
+               s_info.conf.field.delayed_pause_resume = value;
+               break;
+       case DYNAMICBOX_EVAS_AUTO_RENDER_SELECTION:
+               s_info.conf.field.auto_render_selector = value;
+               break;
+       default:
+               break;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_pause(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return dynamicbox_set_visibility(data->handle, DBOX_HIDE_WITH_PAUSE);
+}
+
+EAPI int evas_object_dynamicbox_resume(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return dynamicbox_set_visibility(data->handle, DBOX_SHOW);
+}
+
+EAPI int evas_object_dynamicbox_destroy_gbar(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+       int ret;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || data->state != WIDGET_DATA_CREATED || !data->is.field.created || !data->handle || !data->is.field.gbar_created) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       ret = dynamicbox_destroy_glance_bar(data->handle, dbox_destroy_gbar_cb, widget_ref(data));
+       if (ret < 0) {
+               widget_unref(data);
+       }
+
+       return ret;
+}
+
+EAPI const char *evas_object_dynamicbox_content(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return NULL;
+       }
+
+       return dynamicbox_content(data->handle);
+}
+
+EAPI const char *evas_object_dynamicbox_title(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return NULL;
+       }
+
+       return dynamicbox_title(data->handle);
+}
+
+EAPI const char *evas_object_dynamicbox_dbox_id(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || data->state != WIDGET_DATA_CREATED) {
+               return NULL;
+       }
+
+       return data->dbox_id;
+}
+
+EAPI double evas_object_dynamicbox_period(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return 0.0f;
+       }
+
+       return data->period;
+}
+
+EAPI void evas_object_dynamicbox_cancel_click(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return;
+       }
+
+       if (data->is.field.cancel_click == CANCEL_DISABLED) {
+               data->is.field.cancel_click = CANCEL_USER;
+       }
+}
+
+static void access_ret_cb(struct dynamicbox *handle, int ret, void *data)
+{
+       struct access_ret_cb_data *cb_data = data;
+
+       switch (ret) {
+       case DBOX_ACCESS_STATUS_ERROR:
+               ret = DYNAMICBOX_ACCESS_ERROR;
+               break;
+       case DBOX_ACCESS_STATUS_DONE:
+               ret = DYNAMICBOX_ACCESS_DONE;
+               break;
+       case DBOX_ACCESS_STATUS_FIRST:
+               ret = DYNAMICBOX_ACCESS_FIRST;
+               break;
+       case DBOX_ACCESS_STATUS_LAST:
+               ret = DYNAMICBOX_ACCESS_LAST;
+               break;
+       case DBOX_ACCESS_STATUS_READ:
+               ret = DYNAMICBOX_ACCESS_READ;
+               break;
+       default:
+               ret = DYNAMICBOX_ACCESS_UNKNOWN;
+               break;
+       }
+
+       if (cb_data->ret_cb) {
+               cb_data->ret_cb(cb_data->obj, ret, cb_data->data);
+       }
+
+       free(cb_data);
+}
+
+EAPI int evas_object_dynamicbox_force_mouse_up(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return do_force_mouse_up(data);
+}
+
+EAPI int evas_object_dynamicbox_access_action(Evas_Object *dynamicbox, int type, void *_info, void (*ret_cb)(Evas_Object *obj, int ret, void *data), void *cbdata)
+{
+       struct widget_data *data;
+       Elm_Access_Action_Info *info = _info;
+       int w;
+       int h;
+       struct access_ret_cb_data *cb_data;
+       int ret;
+       struct dynamicbox_access_event_info ainfo;
+
+       data = get_smart_data(dynamicbox);
+       if (!data || !data->is.field.created || !data->handle) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       evas_object_geometry_get(data->dbox_layout, NULL, NULL, &w, &h);
+       ainfo.x = (double)info->x / (double)w;
+       ainfo.y = (double)info->y / (double)h;
+       ainfo.info = 0;
+
+       switch (type) {
+       case ELM_ACCESS_ACTION_HIGHLIGHT: /* highlight an object */
+               DbgPrint("Highlight %dx%d ignored\n", info->x, info->y);
+               break;
+       case ELM_ACCESS_ACTION_READ:
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_HIGHLIGHT;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_HIGHLIGHT, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_UNHIGHLIGHT: /* unhighlight an object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_UNHIGHLIGHT;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_HIGHLIGHT, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_HIGHLIGHT_NEXT: /* set highlight to next object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_HIGHLIGHT_NEXT;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_HIGHLIGHT, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_HIGHLIGHT_PREV: /* set highlight to previous object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_HIGHLIGHT_NEXT;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_HIGHLIGHT, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_ACTIVATE: /* activate a highlight object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_NONE; /* meaningless */
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_ACTIVATE, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_SCROLL: /* scroll if one of highlight object parents * is scrollable */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               switch (info->mouse_type) {
+               case 0:
+                       ainfo.type = DBOX_ACCESS_TYPE_DOWN;
+                       ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_SCROLL, &ainfo, access_ret_cb, cb_data);
+                       if (ret != DBOX_STATUS_ERROR_NONE) {
+                               free(cb_data);
+                       }
+                       break;
+               case 1:
+                       ainfo.type = DBOX_ACCESS_TYPE_MOVE;
+                       ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_SCROLL, &ainfo, access_ret_cb, cb_data);
+                       if (ret != DBOX_STATUS_ERROR_NONE) {
+                               free(cb_data);
+                       }
+                       break;
+               case 2:
+                       ainfo.type = DBOX_ACCESS_TYPE_UP;
+                       ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_SCROLL, &ainfo, access_ret_cb, cb_data);
+                       if (ret != DBOX_STATUS_ERROR_NONE) {
+                               free(cb_data);
+                       }
+                       break;
+               default:
+                       ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       free(cb_data);
+                       break;
+               }
+               break;
+       case ELM_ACCESS_ACTION_MOUSE: /* give mouse event to highlight object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+               ainfo.type = DBOX_ACCESS_TYPE_NONE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_MOUSE, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_UP: /* change value up of highlight object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+               ainfo.type = DBOX_ACCESS_TYPE_UP;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_ACTION, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_DOWN: /* change value down of highlight object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_DOWN;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_ACTION, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_VALUE_CHANGE: /* TODO: deprecate this */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_NONE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_VALUE_CHANGE, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_BACK: /* go back to a previous view ex: pop naviframe item */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_NONE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_BACK, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_OVER: /* mouse over an object */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_NONE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_OVER, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_ENABLE: /* enable highlight and read ability */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_ENABLE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_ENABLE, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       case ELM_ACCESS_ACTION_DISABLE: /* disable highlight and read ability */
+               cb_data = calloc(1, sizeof(*cb_data));
+               if (!cb_data) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               cb_data->ret_cb = ret_cb;
+               cb_data->data = cbdata;
+               cb_data->obj = dynamicbox;
+
+               ainfo.type = DBOX_ACCESS_TYPE_DISABLE;
+               ret = dynamicbox_feed_access_event(data->handle, DBOX_ACCESS_ENABLE, &ainfo, access_ret_cb, cb_data);
+               if (ret != DBOX_STATUS_ERROR_NONE) {
+                       free(cb_data);
+               }
+               break;
+       default:
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               break;
+       }
+
+       return ret;
+}
+
+EAPI void evas_object_dynamicbox_disable_preview(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       data->is.field.disable_preview = 1;
+}
+
+EAPI void evas_object_dynamicbox_disable_overlay_text(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       data->is.field.disable_text = 1;
+}
+
+EAPI void evas_object_dynamicbox_disable_loading(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       data->is.field.disable_loading = 1;
+}
+
+EAPI void evas_object_dynamicbox_activate(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       if (data->is.field.faulted) {
+               elm_object_signal_emit(data->dbox_layout, "mouse,clicked,1", "overlay,content");
+       } else {
+               DbgPrint("Dynamicbox is not faulted\n");
+       }
+}
+
+EAPI int evas_object_dynamicbox_is_faulted(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return 0;
+       }
+
+       return data->is.field.faulted;
+}
+
+EAPI int evas_object_dynamicbox_set_raw_event_callback(enum dynamicbox_evas_raw_event_type type, void (*cb)(struct dynamicbox_evas_raw_event_info *info, void *data), void *data)
+{
+       struct raw_event_cbdata *cbdata;
+
+       cbdata = calloc(1, sizeof(*cbdata));
+       if (!cbdata) {
+               ErrPrint("calloc: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       cbdata->cb = cb;
+       cbdata->data = data;
+
+       switch (type) {
+       case DYNAMICBOX_EVAS_RAW_DELETE:
+               s_info.raw_event.delete_list = eina_list_append(s_info.raw_event.delete_list, cbdata);
+               break;
+       case DYNAMICBOX_EVAS_RAW_CREATE:
+               s_info.raw_event.create_list = eina_list_append(s_info.raw_event.create_list, cbdata);
+               break;
+       default:
+               break;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_unset_raw_event_callback(enum dynamicbox_evas_raw_event_type type, void (*cb)(struct dynamicbox_evas_raw_event_info *info, void *data), void *data)
+{
+       Eina_List *l;
+       Eina_List *n;
+       struct raw_event_cbdata *cbdata;
+
+       switch (type) {
+       case DYNAMICBOX_EVAS_RAW_DELETE:
+               EINA_LIST_FOREACH_SAFE(s_info.raw_event.delete_list, l, n, cbdata) {
+                       if (cbdata->cb == cb && cbdata->data == data) {
+                               s_info.raw_event.delete_list = eina_list_remove(s_info.raw_event.delete_list, cbdata);
+                               break;
+                       }
+               }
+               break;
+       case DYNAMICBOX_EVAS_RAW_CREATE:
+               EINA_LIST_FOREACH_SAFE(s_info.raw_event.create_list, l, n, cbdata) {
+                       if (cbdata->cb == cb && cbdata->data == data) {
+                               s_info.raw_event.create_list = eina_list_remove(s_info.raw_event.create_list, cbdata);
+                               break;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_freeze_visibility(Evas_Object *dynamicbox, int status)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       data->is.field.freeze_visibility = 1;
+       data->freezed_visibility = status;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_thaw_visibility(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       data->is.field.freeze_visibility = 0;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int evas_object_dynamicbox_visibility_is_freezed(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return 0;
+       }
+
+       return data->is.field.freeze_visibility;
+}
+
+EAPI int evas_object_dynamicbox_dump(Evas_Object *dynamicbox, const char *filename)
+{
+       struct widget_data *data;
+       FILE *fp;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       fp = fopen(filename, "w+");
+       if (fp) {
+               Evas_Object *image;
+               image = elm_object_part_content_get(data->dbox_layout, "dynamicbox,content");
+               if (image) {
+                       void *data;
+                       Evas_Coord w, h;
+                       evas_object_geometry_get(image, NULL, NULL, &w, &h);
+
+                       data = evas_object_image_data_get(image, 0);
+                       if (data) {
+                               fwrite(data, w * h, sizeof(int), fp);
+                       }
+               }
+               fclose(fp);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int evas_object_dynamicbox_is_dynamicbox(Evas_Object *dynamicbox)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return 0;
+       }
+
+       return 1;
+}
+
+void evas_object_dynamicbox_use_render_animator(int flag)
+{
+       if (s_info.conf.field.auto_render_selector) {
+               DbgPrint("Auto selector enabled, this flag will be changed automatically\n");
+       }
+
+       s_info.conf.field.render_animator = !!flag;
+       DbgPrint("Turn %s render animator\n", s_info.conf.field.render_animator ? "on" : "off");
+}
+
+void evas_object_dynamicbox_set_permanent_delete(Evas_Object *dynamicbox, int flag)
+{
+       struct widget_data *data;
+
+       data = get_smart_data(dynamicbox);
+       if (!data) {
+               ErrPrint("Invalid object\n");
+               return;
+       }
+
+       data->is.field.permanent_delete = !!flag;
+}
+
+/* End of a file */
diff --git a/live.viewer/viewer/src/main.c b/live.viewer/viewer/src/main.c
new file mode 100644 (file)
index 0000000..7f3e2b1
--- /dev/null
@@ -0,0 +1,486 @@
+/*
+ * 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.
+ */
+
+#if defined(LOG_TAG)
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG "ADD_VIEWER"
+
+#include <Elementary.h>
+//#include <appcore-efl.h>
+#include <app.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dynamicbox.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+#include <vconf.h>
+#include <bundle.h>
+#include <dlog.h>
+#include <string.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+
+int errno;
+
+#include "main.h"
+#include "dynamicbox_evas.h"
+
+#define HOME_SERVICE_KEY "home_op"
+#define HOME_SERVICE_VALUE_POWERKEY "powerkey"
+#define PREVIEW_DEFAULT RESDIR"/images/unknown.png"
+#define VCONF_KEY_VIEWER_AUTO_FEED "memory/dbox-viewer/auto_feed"
+#define LAYOUT_EDJ RESDIR"/edje/w_add_viewer.edj"
+
+static struct info {
+       int resize_test;
+       Ecore_Timer *resize_timer;
+       int w;
+       int h;
+} s_info = {
+       .resize_test = 0,
+       .resize_timer = NULL,
+       .w = 0,
+       .h = 0,
+};
+
+struct item {
+       struct appdata *ad;
+       char *dbox_id;
+       int size;
+       struct {
+               int pressed;
+               int x;
+               int y;
+       } down;
+};
+
+static void move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct item *item = data;
+       Evas_Event_Mouse_Move *move = event_info;
+
+       if (abs(item->down.x - move->cur.canvas.x) > 7 || abs(item->down.y - move->cur.canvas.y) > 7) {
+               item->down.pressed = 0;
+       }
+}
+
+static void down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct item *item = data;
+       Evas_Event_Mouse_Down *down = event_info;
+
+       item->down.pressed = 1;
+       item->down.x = down->canvas.x;
+       item->down.y = down->canvas.y;
+       LOGD("Down\n");
+}
+
+static Eina_Bool resize_test_cb(void *data)
+{
+       struct item *item = data;
+       Evas_Coord w, h;
+       Evas_Coord x, y;
+
+       evas_object_geometry_get(item->ad->layout, &x, &y, &w, &h);
+       if (w < 10 || h < 10) {
+               s_info.resize_timer = NULL;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       evas_object_move(item->ad->layout, x + 10, y + 10);
+       evas_object_resize(item->ad->layout, w - 10, h - 10);
+       LOGD("%dx%d - %dx%d\n", x, y, w, h);
+       return ECORE_CALLBACK_RENEW;
+}
+
+static Eina_Bool resize_test_fire_cb(void *data)
+{
+       s_info.resize_timer = ecore_timer_add(0.5f, resize_test_cb, data);
+       if (!s_info.resize_timer) {
+               LOGE("Failed to add a test timer\n");
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct item *item = data;
+       Evas_Object *box;
+       Evas_Object *bg;
+       int w, h;
+
+       if (!item->down.pressed) {
+               return;
+       }
+
+       box = elm_object_part_content_unset(item->ad->layout, "dynamicbox");
+       if (box) {
+               evas_object_del(box);
+               elm_object_signal_emit(item->ad->layout, "hide", "dynamicbox");
+               item->ad->box_created = 0;
+       }
+
+       box = evas_object_dynamicbox_add(item->ad->win, item->dbox_id, NULL, NULL, NULL, DYNAMICBOX_EVAS_DEFAULT_PERIOD);
+       if (!box) {
+               return;
+       }
+
+       bg = elm_object_part_content_get(item->ad->layout, "bg");
+       if (!bg) {
+               bg = elm_bg_add(item->ad->layout);
+               elm_bg_color_set(bg, 0, 0, 0);
+               evas_object_show(bg);
+               elm_object_part_content_set(item->ad->layout, "bg", bg);
+       }
+
+       dynamicbox_service_get_size(item->size, &w, &h);
+       evas_object_size_hint_min_set(bg, w, h);
+       evas_object_size_hint_max_set(bg, w, h);
+       evas_object_resize(bg, w, h);
+
+       elm_object_part_content_set(item->ad->layout, "dynamicbox", box);
+       item->down.pressed = 0;
+       LOGD("Box loaded: %s %x (%dx%d)\n", item->dbox_id, item->size, w, h);
+       elm_object_signal_emit(item->ad->layout, "show", "dynamicbox");
+       item->ad->box_created = 1;
+
+       if (s_info.resize_test) {
+               if (s_info.resize_timer) {
+                       ecore_timer_del(s_info.resize_timer);
+                       s_info.resize_timer = NULL;
+               }
+
+               s_info.resize_timer = ecore_timer_add(3.0f, resize_test_fire_cb, item);
+               if (!s_info.resize_timer) {
+                       LOGE("Failed to add a timer\n");
+               }
+       }
+}
+
+Evas_Object *preview_load_image(Evas_Object *parent, const char *filename)
+{
+       Evas_Object *preview;
+       int w;
+       int h;
+
+       preview = evas_object_image_filled_add(evas_object_evas_get(parent));
+       if (!preview) {
+               LOGD("Failed to create an icon\n");
+               return NULL;
+       }
+
+       evas_object_image_file_set(preview, filename, NULL);
+       if (evas_object_image_load_error_get(preview) != EVAS_LOAD_ERROR_NONE) {
+               int ret;
+               evas_object_image_file_set(preview, PREVIEW_DEFAULT, NULL);
+               ret = evas_object_image_load_error_get(preview);
+               if (ret != EVAS_LOAD_ERROR_NONE) {
+                       LOGE("Failed to load an image file [%d]\n", ret);
+               }
+       }
+
+       evas_object_image_size_get(preview, &w, &h);
+       evas_object_image_fill_set(preview, 0, 0, w, h);
+       evas_object_resize(preview, w, h);
+       evas_object_show(preview);
+       LOGD("Image size: %dx%d\n", w, h);
+
+       return preview;
+}
+
+Evas_Object *preview_create_layout(struct appdata *ad, Evas_Object *parent, const char *filename, const char *name, int type)
+{
+       Evas_Object *layout;
+       Evas_Object *preview;
+       Evas_Object *box;
+       Evas_Coord w, h;
+
+       layout = elm_layout_add(parent);
+       if (!layout) {
+               return NULL;
+       }
+
+       preview = preview_load_image(layout, filename);
+       if (!preview) {
+               evas_object_del(layout);
+               return NULL;
+       }
+
+       if (elm_layout_file_set(layout, LAYOUT_EDJ, "preview") != EINA_TRUE) {
+               LOGE("Failed to load EDJE\n");
+       }
+
+       dynamicbox_service_get_size(type, &w, &h);
+       evas_object_size_hint_min_set(preview, w, h);
+
+       elm_object_part_content_set(layout, "preview", preview);
+       elm_object_part_text_set(layout, "name", name);
+
+       box = elm_box_add(ad->scroller_box);
+       evas_object_show(layout);
+       evas_object_size_hint_min_set(box, s_info.w, 0);
+       elm_object_part_content_set(layout, "bg", box);
+
+       evas_object_size_hint_min_set(layout, s_info.w, h);
+       evas_object_show(layout);
+
+       LOGD("PREVIEW: %s name(%s) %X (%dx%d)\n", filename, name, type, w, h);
+
+       elm_object_signal_emit(layout, "show", "preview");
+
+       return layout;
+}
+
+static int pkglist_cb(const char *pkgid, const char *dbox_id, int is_prime, void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *preview;
+       struct item *item;
+       char *filename;
+       int cnt = DBOX_NR_OF_SIZE_LIST;
+       int type[DBOX_NR_OF_SIZE_LIST];
+       int i;
+
+       if (dynamicbox_service_nodisplay(dbox_id)) {
+               LOGD("NODISPLAY: %s\n", dbox_id);
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       dynamicbox_service_get_supported_size_types(dbox_id, &cnt, type);
+       for (i = 0; i < cnt; i++) {
+               filename = dynamicbox_service_preview(dbox_id, type[i]);
+               if (!filename || access(filename, F_OK) != 0) {
+                       filename = strdup(PREVIEW_DEFAULT);
+                       if (!filename) {
+                               LOGE("Heap: %s\n", strerror(errno));
+                               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+                       }
+               }
+               preview = preview_create_layout(ad, ad->win, filename, dbox_id, type[i]);
+               if (!preview) {
+                       free(filename);
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+               LOGD("preview: %p\n", preview);
+
+               item = calloc(1, sizeof(*item));
+               if (!item) {
+                       free(filename);
+                       evas_object_del(preview);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+               item->ad = ad;
+               item->size = type[i];
+               item->dbox_id = strdup(dbox_id);
+               if (!item->dbox_id) {
+                       free(filename);
+                       free(item);
+                       evas_object_del(preview);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+
+               elm_box_pack_end(ad->scroller_box, preview);
+
+               evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_DOWN, down_cb, item);
+               evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_MOVE, move_cb, item);
+               evas_object_event_callback_add(preview, EVAS_CALLBACK_MOUSE_UP, up_cb, item);
+
+               free(filename);
+       }
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+static void load_widgets(struct appdata *ad)
+{
+       int cnt;
+       cnt = dynamicbox_service_get_pkglist(pkglist_cb, ad);
+       LOGD("Package list: %d\n", cnt);
+       if (cnt == 0) {
+               elm_object_signal_emit(ad->layout, "empty", "content");
+       }
+}
+
+Eina_Bool key_up_event_cb(void *data, int type, void *event_info)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Ecore_Event_Key *ev = event_info;
+
+       if(!strcmp(ev->keyname, KEY_BACK)) {
+               if (ad->box_created) {
+                       Evas_Object *box;
+                       box = elm_object_part_content_unset(ad->layout, "dynamicbox");
+                       if (box) {
+                               evas_object_del(box);
+                               elm_object_signal_emit(ad->layout, "hide", "dynamicbox");
+                               ad->box_created = 0;
+                       }
+               } else {
+                       elm_exit();
+               }
+       }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+static bool app_create(void *data)
+{
+       struct appdata *ad = data;
+       Evas_Object *bg;
+       Evas_Object *scroller;
+       int auto_feed;
+
+       ad->win = elm_win_add(NULL, "DBoxViewer", ELM_WIN_BASIC);
+       if (!ad->win) {
+               LOGD("Failed to create a window\n");
+               return false;
+       }
+
+       evas_object_show(ad->win);
+
+       bg = elm_bg_add(ad->win);
+       elm_win_resize_object_add(ad->win, bg);
+       elm_bg_color_set(bg, 0, 0, 0);
+       evas_object_show(bg);
+
+       ad->layout = elm_layout_add(ad->win);
+       if (!ad->layout) {
+               evas_object_del(bg);
+               evas_object_del(ad->win);
+               return false;
+       }
+       elm_win_resize_object_add(ad->win, ad->layout);
+       if (elm_layout_file_set(ad->layout, LAYOUT_EDJ, "layout") != EINA_TRUE) {
+               LOGE("Failed to load an edje\n");
+               evas_object_del(bg);
+               evas_object_del(ad->layout);
+               evas_object_del(ad->win);
+               return false;
+       }
+       evas_object_show(ad->layout);
+
+       scroller = elm_scroller_add(ad->win);
+       if (!scroller) {
+               evas_object_del(ad->win);
+               ad->win = NULL;
+               LOGD("Failed to create a scroller\n");
+               return false;
+       }
+       evas_object_geometry_get(ad->win, NULL, NULL, &s_info.w, &s_info.h);
+       LOGD("Window: %dx%d\n", s_info.w, s_info.h);
+
+       ecore_x_window_size_get(0, &s_info.w, &s_info.h);
+       LOGD("Window: %dx%d\n", s_info.w, s_info.h);
+
+       elm_scroller_page_size_set(scroller, s_info.w, s_info.h);
+       elm_object_part_content_set(ad->layout, "scroller", scroller);
+       elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_FALSE);
+
+       ad->scroller_box = elm_box_add(scroller);
+       if (!ad->scroller_box) {
+               evas_object_del(scroller);
+               evas_object_del(ad->win);
+
+               ad->win = NULL;
+               LOGD("Failed to create a box\n");
+               return false;
+       }
+       elm_box_homogeneous_set(ad->scroller_box, EINA_TRUE);
+       elm_box_horizontal_set(ad->scroller_box, EINA_TRUE);
+       evas_object_size_hint_weight_set(ad->scroller_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(ad->scroller_box);
+
+       elm_object_content_set(scroller, ad->scroller_box);
+
+       /* DYNAMICBOX init */
+       evas_object_dynamicbox_init(ad->win, 0);
+
+       /* DYNAMICBOX init */
+       evas_object_dynamicbox_conf_set(DYNAMICBOX_EVAS_EVENT_AUTO_FEED, 1);
+       if (vconf_get_int(VCONF_KEY_VIEWER_AUTO_FEED, &auto_feed) >= 0) {
+               LOGD("========> Enable autofeed? %d\n", auto_feed);
+       }
+
+       load_widgets(ad);
+
+       ad->handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, (Ecore_Event_Handler_Cb)key_up_event_cb, ad);
+       return true;
+}
+
+static void app_terminate(void *data)
+{
+       struct appdata *ad = data;
+
+       /* DYNAMICBOX fini */
+       evas_object_dynamicbox_fini();
+
+       if (ad->win) {
+               evas_object_del(ad->win);
+               ad->win = NULL;
+       }
+}
+
+static void app_pause(void *data)
+{
+       /* DYNAMICBOX pause */
+       evas_object_dynamicbox_paused();
+}
+
+static void app_resume(void *data)
+{
+       /* DYNAMICBOX resume */
+       evas_object_dynamicbox_resumed();
+}
+
+static void _app_control(app_control_h service, void *data)
+{
+       struct appdata *ad = data;
+       evas_object_dynamicbox_resumed();
+       elm_win_activate(ad->win);
+}
+
+int main(int argc, char *argv[])
+{
+       struct appdata ad;
+
+       app_event_callback_s event_callback;
+
+       setenv("ELM_ENGINE", "gl", 0);
+
+       event_callback.create = app_create;
+       event_callback.terminate = app_terminate;
+       event_callback.pause = app_pause;
+       event_callback.resume = app_resume;
+       event_callback.app_control = _app_control;
+       event_callback.low_memory = NULL;
+       event_callback.low_battery = NULL;
+       event_callback.device_orientation = NULL;
+       event_callback.language_changed = NULL;
+       event_callback.region_format_changed = NULL;
+
+       memset(&ad, 0x0, sizeof(struct appdata));
+
+       if (setenv("BUFMGR_LOCK_TYPE", "once", 0) < 0) {
+               LOGE("setenv(BUFMGR_LOCK_TYPE) is failed: %s", strerror(errno));
+       }
+
+       if (setenv("BUFMGR_MAP_CACHE", "true", 0) < 0) {
+               LOGE("setenv(BUFMGR_MAP_CACHE) is failed: %s", strerror(errno));
+       }
+
+       return app_efl_main(&argc, &argv, &event_callback, &ad);
+}
diff --git a/livebox-viewer.pc.in b/livebox-viewer.pc.in
deleted file mode 100644 (file)
index 06f4891..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-prefix=@PREFIX@
-exec_prefix=@EXEC_PREFIX@
-libdir=@LIBDIR@
-includedir=@INCLUDEDIR@
-
-Name: livebox-viewer
-Description: livebox supporting library
-Version: @VERSION@
-Libs: -L${libdir} -llivebox-viewer
-Cflags: -I${includedir}
-cppflags: -I${includedir}
similarity index 78%
rename from packaging/liblivebox-viewer.spec
rename to packaging/libdynamicbox_viewer.spec
index b6ab7bf..ff2e87d 100644 (file)
@@ -1,10 +1,10 @@
 %bcond_with wayland
 
-Name: liblivebox-viewer
+Name: libdynamicbox_viewer
 Summary: Library for developing the application
-Version: 0.32.1
+Version: 1.0.0
 Release: 1
-Group: HomeTF/Livebox
+Group: HomeTF/DynamicBox
 License: Flora
 Source0: %{name}-%{version}.tar.gz
 Source1001: %{name}.manifest
@@ -16,7 +16,7 @@ BuildRequires: pkgconfig(gio-2.0)
 BuildRequires: pkgconfig(com-core)
 BuildRequires: pkgconfig(sqlite3)
 BuildRequires: pkgconfig(db-util)
-BuildRequires: pkgconfig(livebox-service)
+BuildRequires: pkgconfig(dynamicbox_service)
 BuildRequires: pkgconfig(vconf)
 
 %if %{with wayland}
@@ -30,15 +30,15 @@ ExclusiveArch:
 %endif
 
 %description
-API for creating a new instance of the livebox and managing its life-cycle.
+API for creating a new instance of the dynamicbox and managing its life-cycle.
 
 %package devel
-Summary: Livebox viewer development library (dev)
+Summary: Development Library for Dynamic Box Viewer Application (dev)
 Group: Development/Libraries
 Requires: %{name} = %{version}-%{release}
 
 %description devel
-Header and package configuration files for the livebox viewer development
+Header and package configuration files for the dynamicbox viewer development
 
 %prep
 %setup -q
@@ -65,17 +65,17 @@ export WAYLAND_SUPPORT=Off
 export X11_SUPPORT=On
 %endif
 
-%cmake . -DWAYLAND_SUPPORT=${WAYLAND_SUPPORT} -DX11_SUPPORT=${X11_SUPPORT}
+%cmake . -DWAYLAND_SUPPORT=${WAYLAND_SUPPORT} -DX11_SUPPORT=${X11_SUPPORT} -DDYNAMICBOX_ENABLED=On
 make %{?jobs:-j%jobs}
 
 %install
 rm -rf %{buildroot}
 %make_install
 
-%post -n liblivebox-viewer -p /sbin/ldconfig
-%postun -n liblivebox-viewer -p /sbin/ldconfig
+%post -n %{name} -p /sbin/ldconfig
+%postun -n %{name} -p /sbin/ldconfig
 
-%files -n liblivebox-viewer
+%files -n %{name}
 %manifest %{name}.manifest
 %defattr(-,root,root,-)
 %{_libdir}/*.so*
@@ -84,7 +84,6 @@ rm -rf %{buildroot}
 %files devel
 %manifest %{name}.manifest
 %defattr(-,root,root,-)
-%{_includedir}/livebox-viewer/livebox.h
 %{_includedir}/dynamicbox_viewer/dynamicbox.h
 %{_libdir}/pkgconfig/*.pc
 
index e615e1f..a6e4ae8 100644 (file)
 #include <packet.h>
 #include <com-core.h>
 #include <com-core_packet.h>
-#include <livebox-errno.h>
-#include <livebox-service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_cmd_list.h>
+#include <dynamicbox_buffer.h>
 #include <secure_socket.h>
 
 #include "debug.h"
 #include "client.h"
-#include "livebox.h"
-#include "livebox_internal.h"
+#include "dynamicbox.h"
+#include "dynamicbox_internal.h"
 #include "desc_parser.h"
 #include "fb.h"
 #include "util.h"
@@ -46,7 +48,6 @@
 #include "conf.h"
 #include "file_service.h"
 #include "dlist.h"
-#include "provider_cmd_list.h"
 
 int errno;
 
@@ -79,14 +80,14 @@ static struct packet *master_fault_package(pid_t pid, int handle, const struct p
 
        DbgPrint("[%s]\n", pkgname);
        master_rpc_clear_fault_package(pkgname);
-       lb_invoke_fault_handler(LB_FAULT_DEACTIVATED, pkgname, id, function);
+       dbox_invoke_fault_handler(DBOX_FAULT_DEACTIVATED, pkgname, id, function);
        return NULL;
 }
 
 static struct packet *master_hold_scroll(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox_common *common;
-       struct livebox *livebox;
+       struct dynamicbox_common *common;
+       dynamicbox_h dynamicbox;
        const char *pkgname;
        const char *id;
        int seize;
@@ -99,16 +100,16 @@ static struct packet *master_hold_scroll(pid_t pid, int handle, const struct pac
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance(%s) is not exists\n", id);
                goto out;
        }
 
        DbgPrint("HOLD: [%s] seize(%d)\n", id, seize);
-       seize = seize ? LB_EVENT_HOLD_SCROLL : LB_EVENT_RELEASE_SCROLL;
-       dlist_foreach(common->livebox_list, l, livebox) {
-               lb_invoke_event_handler(livebox, seize);
+       seize = seize ? DBOX_EVENT_HOLD_SCROLL : DBOX_EVENT_RELEASE_SCROLL;
+       dlist_foreach(common->dynamicbox_list, l, dynamicbox) {
+               dbox_invoke_event_handler(dynamicbox, seize);
        }
 
 out:
@@ -120,10 +121,10 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
        const char *pkgname;
        const char *id;
        const char *content;
-       struct livebox *handler;
+       dynamicbox_h handler;
        struct dlist *l;
        struct dlist *n;
-       struct livebox_common *common;
+       struct dynamicbox_common *common;
        char *new_content;
        int ret;
        int status;
@@ -135,13 +136,13 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance (%s) is not exists\n", id);
                goto out;
        }
 
-       if (status == (int)LB_STATUS_SUCCESS) {
+       if (status == (int)DBOX_STATUS_ERROR_NONE) {
                new_content = strdup(content);
                if (new_content) {
                        free(common->content);
@@ -149,15 +150,15 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
                        common->is_pinned_up = pinup;
                } else {
                        ErrPrint("Heap: %s\n", strerror(errno));
-                       status = LB_STATUS_ERROR_MEMORY;
+                       status = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                }
        }
 
        common->request.pinup = 0;
 
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                if (handler->cbs.pinup.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        /* Make sure that user can call pinup API in its result callback */
@@ -168,8 +169,8 @@ static struct packet *master_pinup(pid_t pid, int handle, const struct packet *p
                        handler->cbs.pinup.data = NULL;
 
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_PINUP_CHANGED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_PINUP_CHANGED);
                }
        }
 
@@ -182,8 +183,8 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
        const char *pkgname;
        const char *id;
        double timestamp;
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        struct dlist *n;
        int reason;
@@ -194,19 +195,19 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
        }
 
        DbgPrint("[%s]\n", pkgname);
-       common = lb_find_common_handle_by_timestamp(timestamp);
+       common = dbox_find_common_handle_by_timestamp(timestamp);
        if (!common) {
                /*!
                 * \note
-                * This can be happens only if the user delete a livebox
+                * This can be happens only if the user delete a dynamicbox
                 * right after create it before receive created event.
                 */
                goto out;
        }
 
        /*!< Check validity of this "handler" */
-       if (common->state != CREATE) {
-               if (common->state != DELETE) {
+       if (common->state != DBOX_STATE_CREATE) {
+               if (common->state != DBOX_STATE_DELETE) {
                        /*!
                         * \note
                         * This is not possible
@@ -224,11 +225,11 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
         * Then we will get panic.
         * To prevent it, we should change its state first.
         */
-       common->state = DELETE;
+       common->state = DBOX_STATE_DELETE;
 
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                if (handler->cbs.created.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
                        /*!
                         * \note
@@ -257,14 +258,14 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
                        handler->cbs.created.cb = NULL;
                        handler->cbs.created.data = NULL;
 
-                       if (reason == (int)LB_STATUS_SUCCESS) {
-                               reason = LB_STATUS_ERROR_CANCEL;
+                       if (reason == (int)DBOX_STATUS_ERROR_NONE) {
+                               reason = DBOX_STATUS_ERROR_CANCEL;
                        }
 
                        cb(handler, reason, cbdata);
                } else if (common->id) {
                        if (handler->cbs.deleted.cb) {
-                               ret_cb_t cb;
+                               dynamicbox_ret_cb cb;
                                void *cbdata;
 
                                cb = handler->cbs.deleted.cb;
@@ -275,22 +276,22 @@ static struct packet *master_deleted(pid_t pid, int handle, const struct packet
 
                                cb(handler, reason, cbdata);
                        } else {
-                               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
                        }
                }
 
                /* Just try to delete it, if a user didn't remove it from the live box list */
-               lb_unref(handler, 1);
+               dbox_unref(handler, 1);
        }
 
 out:
        return NULL;
 }
 
-static struct packet *master_lb_update_begin(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_dbox_update_begin(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        const char *content;
@@ -305,20 +306,20 @@ static struct packet *master_lb_update_begin(pid_t pid, int handle, const struct
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("(%s) is not created\n", id);
                goto out;
        }
 
-       lb_set_priority(common, priority);
-       lb_set_content(common, content);
-       lb_set_title(common, title);
+       dbox_set_priority(common, priority);
+       dbox_set_content(common, content);
+       dbox_set_title(common, title);
 
        /*!
         * \NOTE
@@ -327,17 +328,17 @@ static struct packet *master_lb_update_begin(pid_t pid, int handle, const struct
         * And if the size is changed, the provider should finish the updating first.
         * And then begin updating again after change its size.
         */
-       if (lb_get_lb_fb(common)) {
-               (void)lb_set_lb_fb(common, fbfile);
+       if (dbox_get_dbox_fb(common)) {
+               (void)dbox_set_dbox_fb(common, fbfile);
 
-               ret = lb_sync_lb_fb(common);
+               ret = dbox_sync_dbox_fb(common);
 
-               if (ret != (int)LB_STATUS_SUCCESS) {
+               if (ret != (int)DBOX_STATUS_ERROR_NONE) {
                        ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, fbfile, ret);
                } else {
                        struct dlist *l;
-                       dlist_foreach(common->livebox_list, l, handler) {
-                               lb_invoke_event_handler(handler, LB_EVENT_LB_UPDATE_BEGIN);
+                       dlist_foreach(common->dynamicbox_list, l, handler) {
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_DBOX_UPDATE_BEGIN);
                        }
                }
        } else {
@@ -348,10 +349,10 @@ out:
        return NULL;
 }
 
-static struct packet *master_pd_update_begin(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_gbar_update_begin(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        const char *fbfile;
@@ -363,27 +364,27 @@ static struct packet *master_pd_update_begin(pid_t pid, int handle, const struct
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
-       if (lb_get_pd_fb(common)) {
-               (void)lb_set_pd_fb(common, fbfile);
+       if (dbox_get_gbar_fb(common)) {
+               (void)dbox_set_gbar_fb(common, fbfile);
 
-               ret = lb_sync_pd_fb(common);
-               if (ret != (int)LB_STATUS_SUCCESS) {
+               ret = dbox_sync_gbar_fb(common);
+               if (ret != (int)DBOX_STATUS_ERROR_NONE) {
                        ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, fbfile, ret);
                } else {
                        struct dlist *l;
-                       dlist_foreach(common->livebox_list, l, handler) {
-                               lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATE_BEGIN);
+                       dlist_foreach(common->dynamicbox_list, l, handler) {
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_UPDATE_BEGIN);
                        }
                }
        } else {
@@ -394,10 +395,10 @@ out:
        return NULL;
 }
 
-static struct packet *master_lb_update_end(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_dbox_update_end(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        int ret;
@@ -408,21 +409,21 @@ static struct packet *master_lb_update_end(pid_t pid, int handle, const struct p
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
-       if (lb_get_lb_fb(common)) {
+       if (dbox_get_dbox_fb(common)) {
                struct dlist *l;
-               dlist_foreach(common->livebox_list, l, handler) {
-                       lb_invoke_event_handler(handler, LB_EVENT_LB_UPDATE_END);
+               dlist_foreach(common->dynamicbox_list, l, handler) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_DBOX_UPDATE_END);
                }
        } else {
                ErrPrint("Invalid request[%s]\n", id);
@@ -434,8 +435,8 @@ out:
 
 static struct packet *master_key_status(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        const char *pkgname;
        const char *id;
@@ -448,21 +449,21 @@ static struct packet *master_key_status(pid_t pid, int handle, const struct pack
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
        common->request.key_event = 0;
-       dlist_foreach(common->livebox_list, l, handler) {
+       dlist_foreach(common->dynamicbox_list, l, handler) {
                if (handler->cbs.key_event.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        cb = handler->cbs.key_event.cb;
@@ -481,10 +482,10 @@ out:
        return NULL;
 }
 
-static struct packet *master_request_close_pd(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_request_close_gbar(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        const char *pkgname;
        const char *id;
@@ -497,26 +498,26 @@ static struct packet *master_request_close_pd(pid_t pid, int handle, const struc
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
-       if (!common->is_pd_created) {
-               DbgPrint("PD is not created, closing what?(%s)\n", id);
+       if (!common->is_gbar_created) {
+               DbgPrint("GBAR is not created, closing what?(%s)\n", id);
                goto out;
        }
 
        DbgPrint("Reason: %d\n", reason);
 
-       dlist_foreach(common->livebox_list, l, handler) {
-               lb_invoke_event_handler(handler, LB_EVENT_REQUEST_CLOSE_PD);
+       dlist_foreach(common->dynamicbox_list, l, handler) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_REQUEST_CLOSE_GBAR);
        }
 out:
        return NULL;
@@ -524,8 +525,8 @@ out:
 
 static struct packet *master_access_status(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        const char *pkgname;
        const char *id;
@@ -538,21 +539,21 @@ static struct packet *master_access_status(pid_t pid, int handle, const struct p
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
        common->request.access_event = 0;
-       dlist_foreach(common->livebox_list, l, handler) {
+       dlist_foreach(common->dynamicbox_list, l, handler) {
                if (handler->cbs.access_event.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        cb = handler->cbs.access_event.cb;
@@ -568,10 +569,10 @@ out:
        return NULL;
 }
 
-static struct packet *master_pd_update_end(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_gbar_update_end(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        int ret;
@@ -582,22 +583,22 @@ static struct packet *master_pd_update_end(pid_t pid, int handle, const struct p
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance[%s] is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("[%s] is not created\n", id);
                goto out;
        }
 
-       if (lb_get_lb_fb(common)) {
+       if (dbox_get_dbox_fb(common)) {
                struct dlist *l;
 
-               dlist_foreach(common->livebox_list, l, handler) {
-                       lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATE_END);
+               dlist_foreach(common->dynamicbox_list, l, handler) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_UPDATE_END);
                }
        } else {
                ErrPrint("Invalid request[%s]", id);
@@ -617,8 +618,8 @@ static struct packet *master_extra_info(pid_t pid, int handle, const struct pack
        const char *name;
        double priority;
        int ret;
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        struct dlist *n;
 
@@ -631,13 +632,13 @@ static struct packet *master_extra_info(pid_t pid, int handle, const struct pack
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("instance(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                /*!
                 * \note
                 * Already deleted by the user.
@@ -648,44 +649,53 @@ static struct packet *master_extra_info(pid_t pid, int handle, const struct pack
                goto out;
        }
 
-       lb_set_priority(common, priority);
-       lb_set_content(common, content);
-       lb_set_title(common, title);
-       lb_set_alt_icon(common, icon);
-       lb_set_alt_name(common, name);
+       dbox_set_priority(common, priority);
+       dbox_set_content(common, content);
+       dbox_set_title(common, title);
+       dbox_set_alt_icon(common, icon);
+       dbox_set_alt_name(common, name);
 
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
-               lb_invoke_event_handler(handler, LB_EVENT_EXTRA_INFO_UPDATED);
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_EXTRA_INFO_UPDATED);
        }
 out:
        return NULL;
 }
 
-static struct packet *master_lb_updated(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_dbox_updated(pid_t pid, int handle, const struct packet *packet)
 {
        const char *pkgname;
        const char *id;
        const char *fbfile;
        const char *safe_file;
-       struct livebox *handler;
-       struct livebox_common *common;
-       int lb_w;
-       int lb_h;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        int ret;
+       int x;
+       int y;
+       int w;
+       int h;
 
-       ret = packet_get(packet, "ssssii", &pkgname, &id, &fbfile, &safe_file, &lb_w, &lb_h);
-       if (ret != 6) {
+       DbgPrint("Updated: %X (%d)\n", *((unsigned int *)packet_command(packet)), pid);
+
+       ret = packet_get(packet, "ssssiiii", &pkgname, &id, &fbfile, &safe_file, &x, &y, &w, &h);
+       if (ret != 8) {
                ErrPrint("Invalid argument\n");
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("instance(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       common->dbox.last_damage.x = x;
+       common->dbox.last_damage.y = y;
+       common->dbox.last_damage.w = w;
+       common->dbox.last_damage.h = h;
+
+       if (common->state != DBOX_STATE_CREATE) {
                /*!
                 * \note
                 * Already deleted by the user.
@@ -696,10 +706,9 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
                goto out;
        }
 
-       lb_set_size(common, lb_w, lb_h);
-       lb_set_filename(common, safe_file);
+       dbox_set_filename(common, safe_file);
 
-       if (lb_text_lb(common)) {
+       if (dbox_text_dbox(common)) {
                const char *common_filename;
 
                common_filename = common->filename ? common->filename : util_uri_to_path(common->id); 
@@ -711,7 +720,7 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
                 * Don't need to call global event callback in this case.
                 */
                goto out;
-       } else if (lb_get_lb_fb(common)) {
+       } else if (dbox_get_dbox_fb(common)) {
                /*!
                 * \todo
                 * replace this with "flag" instead of "callback address"
@@ -719,29 +728,29 @@ static struct packet *master_lb_updated(pid_t pid, int handle, const struct pack
                if (conf_frame_drop_for_resizing() && common->request.size_changed) {
                        /* Just for skipping the update event callback call, After request to resize buffer, update event will be discarded */
                        DbgPrint("Discards obsoloted update event\n");
-                       ret = LB_STATUS_ERROR_BUSY;
+                       ret = DBOX_STATUS_ERROR_BUSY;
                } else {
-                       (void)lb_set_lb_fb(common, fbfile);
+                       (void)dbox_set_dbox_fb(common, fbfile);
 
                        if (!conf_manual_sync()) {
-                               ret = lb_sync_lb_fb(common);
-                               if (ret != (int)LB_STATUS_SUCCESS) {
+                               ret = dbox_sync_dbox_fb(common);
+                               if (ret != (int)DBOX_STATUS_ERROR_NONE) {
                                        ErrPrint("Failed to do sync FB (%s - %s) (%d)\n", pkgname, util_basename(util_uri_to_path(id)), ret);
                                }
                        } else {
-                               ret = LB_STATUS_SUCCESS;
+                               ret = DBOX_STATUS_ERROR_NONE;
                        }
                }
        } else {
-               ret = LB_STATUS_SUCCESS;
+               ret = DBOX_STATUS_ERROR_NONE;
        }
 
-       if (ret == (int)LB_STATUS_SUCCESS) {
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
                struct dlist *l;
                struct dlist *n;
 
-               dlist_foreach_safe(common->livebox_list, l, n, handler) {
-                       lb_invoke_event_handler(handler, LB_EVENT_LB_UPDATED);
+               dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_DBOX_UPDATED);
                }
        }
 
@@ -749,10 +758,10 @@ out:
        return NULL;
 }
 
-static struct packet *master_pd_created(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_gbar_created(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        const char *buf_id;
@@ -770,53 +779,53 @@ static struct packet *master_pd_created(pid_t pid, int handle, const struct pack
        }
 
        DbgPrint("[%s]\n", pkgname);
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("Instance(%s) is not created\n", id);
                goto out;
        }
 
-       if (!common->request.pd_created) {
-               ErrPrint("PD create request is canceled\n");
+       if (!common->request.gbar_created) {
+               ErrPrint("GBAR create request is canceled\n");
                goto out;
        }
 
-       common->is_pd_created = (status == (int)LB_STATUS_SUCCESS);
-       common->request.pd_created = 0;
+       common->is_gbar_created = (status == (int)DBOX_STATUS_ERROR_NONE);
+       common->request.gbar_created = 0;
 
-       if (common->is_pd_created) {
-               lb_set_pdsize(common, width, height);
-               if (lb_text_pd(common)) {
+       if (common->is_gbar_created) {
+               dbox_set_gbarsize(common, width, height);
+               if (dbox_text_gbar(common)) {
                        DbgPrint("Text TYPE does not need to handle this\n");
                } else {
-                       (void)lb_set_pd_fb(common, buf_id);
-
-                       switch (common->pd.type) {
-                       case _PD_TYPE_SCRIPT:
-                       case _PD_TYPE_BUFFER:
-                               switch (fb_type(lb_get_pd_fb(common))) {
-                               case BUFFER_TYPE_FILE:
-                               case BUFFER_TYPE_SHM:
-                                       lb_create_lock_file(common, 1);
+                       (void)dbox_set_gbar_fb(common, buf_id);
+
+                       switch (common->gbar.type) {
+                       case GBAR_TYPE_SCRIPT:
+                       case GBAR_TYPE_BUFFER:
+                               switch (fb_type(dbox_get_gbar_fb(common))) {
+                               case DBOX_FB_TYPE_FILE:
+                               case DBOX_FB_TYPE_SHM:
+                                       dbox_create_lock_file(common, 1);
                                        break;
-                               case BUFFER_TYPE_PIXMAP:
-                               case BUFFER_TYPE_ERROR:
+                               case DBOX_FB_TYPE_PIXMAP:
+                               case DBOX_FB_TYPE_ERROR:
                                default:
                                        break;
                                }
                                break;
-                       case _PD_TYPE_ELEMENTARY:
-                       case _PD_TYPE_TEXT:
+                       case GBAR_TYPE_UIFW:
+                       case GBAR_TYPE_TEXT:
                        default:
                                break;
                        }
 
-                       ret = lb_sync_pd_fb(common);
+                       ret = dbox_sync_gbar_fb(common);
                        if (ret < 0) {
                                ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
                        }
@@ -824,25 +833,25 @@ static struct packet *master_pd_created(pid_t pid, int handle, const struct pack
        }
 
        DbgPrint("PERF_DBOX\n");
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
-               if (handler->cbs.pd_created.cb) {
-                       ret_cb_t cb;
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
+               if (handler->cbs.gbar_created.cb) {
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
-                       cb = handler->cbs.pd_created.cb;
-                       cbdata = handler->cbs.pd_created.data;
+                       cb = handler->cbs.gbar_created.cb;
+                       cbdata = handler->cbs.gbar_created.data;
 
-                       handler->cbs.pd_created.cb = NULL;
-                       handler->cbs.pd_created.data = NULL;
+                       handler->cbs.gbar_created.cb = NULL;
+                       handler->cbs.gbar_created.data = NULL;
 
                        /*!
                         * Before call the Callback function,
-                        * pd_create_cb must be reset.
-                        * Because, in the create callback, user can call create_pd function again.
+                        * gbar_create_cb must be reset.
+                        * Because, in the create callback, user can call create_gbar function again.
                         */
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_PD_CREATED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_CREATED);
                } 
        }
 
@@ -850,11 +859,11 @@ out:
        return NULL;
 }
 
-static struct packet *master_pd_destroyed(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_gbar_destroyed(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
+       dynamicbox_h handler;
        struct dlist *l;
-       struct livebox_common *common;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        int ret;
@@ -867,44 +876,44 @@ static struct packet *master_pd_destroyed(pid_t pid, int handle, const struct pa
        }
 
        DbgPrint("[%s]\n", pkgname);
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("Instance(%s) is not created\n", id);
                goto out;
        }
 
-       if (common->is_pd_created == 0) {
-               ErrPrint("PD is not created, event is ignored\n");
+       if (common->is_gbar_created == 0) {
+               ErrPrint("GBAR is not created, event is ignored\n");
                goto out;
        }
 
-       common->is_pd_created = 0;
-       common->request.pd_destroyed = 0;
+       common->is_gbar_created = 0;
+       common->request.gbar_destroyed = 0;
 
-       dlist_foreach(common->livebox_list, l, handler) {
-               if (handler->cbs.pd_destroyed.cb) {
-                       ret_cb_t cb;
+       dlist_foreach(common->dynamicbox_list, l, handler) {
+               if (handler->cbs.gbar_destroyed.cb) {
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
-                       cb = handler->cbs.pd_destroyed.cb;
-                       cbdata = handler->cbs.pd_destroyed.data;
+                       cb = handler->cbs.gbar_destroyed.cb;
+                       cbdata = handler->cbs.gbar_destroyed.data;
 
-                       handler->cbs.pd_destroyed.cb = NULL;
-                       handler->cbs.pd_destroyed.data = NULL;
+                       handler->cbs.gbar_destroyed.cb = NULL;
+                       handler->cbs.gbar_destroyed.data = NULL;
 
                        /*!
                         * Before call the Callback function,
-                        * pd_destroyed_cb must be reset.
-                        * Because, in the create callback, user can call destroy_pd function again.
+                        * gbar_destroyed_cb must be reset.
+                        * Because, in the create callback, user can call destroy_gbar function again.
                         */
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_PD_DESTROYED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_DESTROYED);
                }
        }
 
@@ -912,22 +921,22 @@ static struct packet *master_pd_destroyed(pid_t pid, int handle, const struct pa
         * \note
         * Lock file should be deleted after all callbacks are processed.
         */
-       switch (common->pd.type) {
-       case _PD_TYPE_SCRIPT:
-       case _PD_TYPE_BUFFER:
-               switch (fb_type(lb_get_pd_fb(common))) {
-               case BUFFER_TYPE_FILE:
-               case BUFFER_TYPE_SHM:
-                       lb_destroy_lock_file(common, 1);
+       switch (common->gbar.type) {
+       case GBAR_TYPE_SCRIPT:
+       case GBAR_TYPE_BUFFER:
+               switch (fb_type(dbox_get_gbar_fb(common))) {
+               case DBOX_FB_TYPE_FILE:
+               case DBOX_FB_TYPE_SHM:
+                       dbox_destroy_lock_file(common, 1);
                        break;
-               case BUFFER_TYPE_PIXMAP:
-               case BUFFER_TYPE_ERROR:
+               case DBOX_FB_TYPE_PIXMAP:
+               case DBOX_FB_TYPE_ERROR:
                default:
                        break;
                }
                break;
-       case _PD_TYPE_ELEMENTARY:
-       case _PD_TYPE_TEXT:
+       case GBAR_TYPE_UIFW:
+       case GBAR_TYPE_TEXT:
        default:
                break;
        }
@@ -936,36 +945,43 @@ out:
        return NULL;
 }
 
-static struct packet *master_pd_updated(pid_t pid, int handle, const struct packet *packet)
+static struct packet *master_gbar_updated(pid_t pid, int handle, const struct packet *packet)
 {
        const char *pkgname;
        const char *id;
        const char *descfile;
        const char *fbfile;
        int ret;
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
-       int pd_w;
-       int pd_h;
+       int x;
+       int y;
+       int w;
+       int h;
 
-       ret = packet_get(packet, "ssssii",
+       ret = packet_get(packet, "ssssiiii",
                                &pkgname, &id,
                                &descfile, &fbfile,
-                               &pd_w, &pd_h);
-       if (ret != 6) {
+                               &x, &y,
+                               &w, &h);
+       if (ret != 8) {
                ErrPrint("Invalid argument\n");
                goto out;
        }
 
-       DbgPrint("[%s]\n", pkgname);
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Instance(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       common->gbar.last_damage.x = x;
+       common->gbar.last_damage.y = y;
+       common->gbar.last_damage.w = w;
+       common->gbar.last_damage.h = h;
+
+       if (common->state != DBOX_STATE_CREATE) {
                /*!
                 * \note
                 * This handler is already deleted by the user.
@@ -976,29 +992,27 @@ static struct packet *master_pd_updated(pid_t pid, int handle, const struct pack
                goto out;
        }
 
-       lb_set_pdsize(common, pd_w, pd_h);
-
-       if (lb_text_pd(common)) {
+       if (dbox_text_gbar(common)) {
                (void)parse_desc(common, descfile, 1);
        } else {
                if (conf_frame_drop_for_resizing() && common->request.size_changed) {
                        /* Just for skipping the update event callback call, After request to resize buffer, update event will be discarded */
                        DbgPrint("Discards obsoloted update event\n");
                } else {
-                       (void)lb_set_pd_fb(common, fbfile);
+                       (void)dbox_set_gbar_fb(common, fbfile);
 
                         if (!conf_manual_sync()) {
-                               ret = lb_sync_pd_fb(common);
+                               ret = dbox_sync_gbar_fb(common);
                                if (ret < 0) {
                                        ErrPrint("Failed to do sync FB (%s - %s), %d\n", pkgname, util_basename(util_uri_to_path(id)), ret);
                                } else {
-                                       dlist_foreach(common->livebox_list, l, handler) {
-                                               lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATED);
+                                       dlist_foreach(common->dynamicbox_list, l, handler) {
+                                               dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_UPDATED);
                                        }
                                }
                        } else {
-                               dlist_foreach(common->livebox_list, l, handler) {
-                                       lb_invoke_event_handler(handler, LB_EVENT_PD_UPDATED);
+                               dlist_foreach(common->dynamicbox_list, l, handler) {
+                                       dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_UPDATED);
                                }
                        }
                }
@@ -1010,8 +1024,8 @@ out:
 
 static struct packet *master_update_mode(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        struct dlist *n;
        const char *pkgname;
@@ -1031,25 +1045,25 @@ static struct packet *master_update_mode(pid_t pid, int handle, const struct pac
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Livebox(%s) is not found\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("Livebox(%s) is not created yet\n", id);
                goto out;
        }
 
-       if (status == (int)LB_STATUS_SUCCESS) {
-               lb_set_update_mode(common, active_mode);
+       if (status == (int)DBOX_STATUS_ERROR_NONE) {
+               dbox_set_update_mode(common, active_mode);
        }
 
        common->request.update_mode = 0;
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                if (handler->cbs.update_mode.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        cb = handler->cbs.update_mode.cb;
@@ -1059,8 +1073,8 @@ static struct packet *master_update_mode(pid_t pid, int handle, const struct pac
                        handler->cbs.update_mode.data = NULL;
 
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_UPDATE_MODE_CHANGED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_UPDATE_MODE_CHANGED);
                }
        }
 
@@ -1070,8 +1084,8 @@ out:
 
 static struct packet *master_size_changed(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        const char *pkgname;
        const char *id;
        const char *fbfile;
@@ -1079,65 +1093,65 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
        int ret;
        int w;
        int h;
-       int is_pd;
+       int is_gbar;
 
        if (!packet) {
                ErrPrint("Invalid packet\n");
                goto out;
        }
 
-       ret = packet_get(packet, "sssiiii", &pkgname, &id, &fbfile, &is_pd, &w, &h, &status);
+       ret = packet_get(packet, "sssiiii", &pkgname, &id, &fbfile, &is_gbar, &w, &h, &status);
        if (ret != 7) {
                ErrPrint("Invalid argument\n");
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Livebox(%s) is not found\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("Livebox(%s) is not created yet\n", id);
                goto out;
        }
 
        common->request.size_changed = 0;
-       if (is_pd) {
+       if (is_gbar) {
                /*!
                 * \NOTE
-                * PD is not able to resized by the client.
-                * PD is only can be managed by the provider.
-                * So the PD has no private resized event handler.
+                * GBAR is not able to resized by the client.
+                * GBAR is only can be managed by the provider.
+                * So the GBAR has no private resized event handler.
                 * Notify it via global event handler only.
                 */
-               if (status == (int)LB_STATUS_SUCCESS) {
+               if (status == (int)DBOX_STATUS_ERROR_NONE) {
                        struct dlist *l;
 
-                       lb_set_pdsize(common, w, h);
-                       dlist_foreach(common->livebox_list, l, handler) {
-                               lb_invoke_event_handler(handler, LB_EVENT_PD_SIZE_CHANGED);
+                       dbox_set_gbarsize(common, w, h);
+                       dlist_foreach(common->dynamicbox_list, l, handler) {
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_GBAR_SIZE_CHANGED);
                        }
                } else {
-                       ErrPrint("This is not possible. PD Size is changed but the return value is not ZERO (%d)\n", status);
+                       ErrPrint("This is not possible. GBAR Size is changed but the return value is not ZERO (%d)\n", status);
                }
        } else {
                struct dlist *l;
                struct dlist *n;
 
-               if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_set_size(common, w, h);
+               if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_set_size(common, w, h);
 
                        /*!
                         * \NOTE
-                        * If there is a created LB FB, 
+                        * If there is a created DBOX FB, 
                         * Update it too.
                         */
-                       if (lb_get_lb_fb(common)) {
-                               (void)lb_set_lb_fb(common, fbfile);
+                       if (dbox_get_dbox_fb(common)) {
+                               (void)dbox_set_dbox_fb(common, fbfile);
 
-                               ret = lb_sync_lb_fb(common);
+                               ret = dbox_sync_dbox_fb(common);
                                if (ret < 0) {
                                        ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
                                }
@@ -1151,9 +1165,9 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                 * I cannot believe client.
                 * So I added some log before & after call the user callback.
                 */
-               dlist_foreach_safe(common->livebox_list, l, n, handler) {
+               dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                        if (handler->cbs.size_changed.cb) {
-                               ret_cb_t cb;
+                               dynamicbox_ret_cb cb;
                                void *cbdata;
 
                                cb = handler->cbs.size_changed.cb;
@@ -1163,8 +1177,8 @@ static struct packet *master_size_changed(pid_t pid, int handle, const struct pa
                                handler->cbs.size_changed.data = NULL;
 
                                cb(handler, status, cbdata);
-                       } else if (status == (int)LB_STATUS_SUCCESS) {
-                               lb_invoke_event_handler(handler, LB_EVENT_LB_SIZE_CHANGED);
+                       } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_DBOX_SIZE_CHANGED);
                        }
                }
        }
@@ -1175,8 +1189,8 @@ out:
 
 static struct packet *master_period_changed(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        struct dlist *n;
        const char *pkgname;
@@ -1191,26 +1205,26 @@ static struct packet *master_period_changed(pid_t pid, int handle, const struct
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Livebox(%s) is not found\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                ErrPrint("Livebox(%s) is not created\n", id);
                goto out;
        }
 
-       if (status == (int)LB_STATUS_SUCCESS) {
-               lb_set_period(common, period);
+       if (status == (int)DBOX_STATUS_ERROR_NONE) {
+               dbox_set_period(common, period);
        }
 
        common->request.period_changed = 0;
 
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                if (handler->cbs.period_changed.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        cb = handler->cbs.period_changed.cb;
@@ -1220,8 +1234,8 @@ static struct packet *master_period_changed(pid_t pid, int handle, const struct
                        handler->cbs.period_changed.data = NULL;
 
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_PERIOD_CHANGED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_PERIOD_CHANGED);
                }
        }
 
@@ -1231,8 +1245,8 @@ out:
 
 static struct packet *master_group_changed(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
        struct dlist *n;
        const char *pkgname;
@@ -1248,13 +1262,13 @@ static struct packet *master_group_changed(pid_t pid, int handle, const struct p
                goto out;
        }
 
-       common = lb_find_common_handle(pkgname, id);
+       common = dbox_find_common_handle(pkgname, id);
        if (!common) {
                ErrPrint("Livebox(%s) is not exists\n", id);
                goto out;
        }
 
-       if (common->state != CREATE) {
+       if (common->state != DBOX_STATE_CREATE) {
                /*!
                 * \note
                 * Do no access this handler,
@@ -1264,15 +1278,15 @@ static struct packet *master_group_changed(pid_t pid, int handle, const struct p
                goto out;
        }
 
-       if (status == (int)LB_STATUS_SUCCESS) {
-               (void)lb_set_group(common, cluster, category);
+       if (status == (int)DBOX_STATUS_ERROR_NONE) {
+               (void)dbox_set_group(common, cluster, category);
        }
 
        common->request.group_changed = 0;
 
-       dlist_foreach_safe(common->livebox_list, l, n, handler) {
+       dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                if (handler->cbs.group_changed.cb) {
-                       ret_cb_t cb;
+                       dynamicbox_ret_cb cb;
                        void *cbdata;
 
                        cb = handler->cbs.group_changed.cb;
@@ -1282,8 +1296,8 @@ static struct packet *master_group_changed(pid_t pid, int handle, const struct p
                        handler->cbs.group_changed.data = NULL;
 
                        cb(handler, status, cbdata);
-               } else if (status == (int)LB_STATUS_SUCCESS) {
-                       lb_invoke_event_handler(handler, LB_EVENT_GROUP_CHANGED);
+               } else if (status == (int)DBOX_STATUS_ERROR_NONE) {
+                       dbox_invoke_event_handler(handler, DBOX_EVENT_GROUP_CHANGED);
                }
        }
 
@@ -1293,22 +1307,22 @@ out:
 
 static struct packet *master_created(pid_t pid, int handle, const struct packet *packet)
 {
-       struct livebox *handler;
-       struct livebox_common *common;
+       dynamicbox_h handler;
+       struct dynamicbox_common *common;
        struct dlist *l;
 
-       int lb_w;
-       int lb_h;
-       int pd_w;
-       int pd_h;
+       int dbox_w;
+       int dbox_h;
+       int gbar_w;
+       int gbar_h;
        const char *pkgname;
        const char *id;
 
        const char *content;
        const char *cluster;
        const char *category;
-       const char *lb_fname;
-       const char *pd_fname;
+       const char *dbox_fname;
+       const char *gbar_fname;
        const char *title;
 
        double timestamp;
@@ -1317,58 +1331,58 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
        int size_list;
        int user;
        int pinup_supported;
-       enum lb_type lb_type;
-       enum pd_type pd_type;
+       enum dynamicbox_dbox_type dbox_type;
+       enum dynamicbox_gbar_type gbar_type;
        double period;
        int is_pinned_up;
 
-       int old_state = DESTROYED;
+       int old_state = DBOX_STATE_DESTROYED;
 
        int ret;
 
        ret = packet_get(packet, "dsssiiiisssssdiiiiidsi",
                        &timestamp,
                        &pkgname, &id, &content,
-                       &lb_w, &lb_h, &pd_w, &pd_h,
-                       &cluster, &category, &lb_fname, &pd_fname,
+                       &dbox_w, &dbox_h, &gbar_w, &gbar_h,
+                       &cluster, &category, &dbox_fname, &gbar_fname,
                        &auto_launch, &priority, &size_list, &user, &pinup_supported,
-                       &lb_type, &pd_type, &period, &title, &is_pinned_up);
+                       &dbox_type, &gbar_type, &period, &title, &is_pinned_up);
        if (ret != 22) {
                ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                goto out;
        }
 
        ErrPrint("[%lf] pkgname: %s, id: %s, content: %s, "
-               "pd_w: %d, pd_h: %d, lb_w: %d, lb_h: %d, "
-               "cluster: %s, category: %s, lb_fname: \"%s\", pd_fname: \"%s\", "
+               "gbar_w: %d, gbar_h: %d, dbox_w: %d, dbox_h: %d, "
+               "cluster: %s, category: %s, dbox_fname: \"%s\", gbar_fname: \"%s\", "
                "auto_launch: %s, priority: %lf, size_list: %d, user: %d, pinup: %d, "
-               "lb_type: %d, pd_type: %d, period: %lf, title: [%s], is_pinned_up: %d\n",
+               "dbox_type: %d, gbar_type: %d, period: %lf, title: [%s], is_pinned_up: %d\n",
                timestamp, pkgname, id, content,
-               pd_w, pd_h, lb_w, lb_h,
-               cluster, category, lb_fname, pd_fname,
+               gbar_w, gbar_h, dbox_w, dbox_h,
+               cluster, category, dbox_fname, gbar_fname,
                auto_launch, priority, size_list, user, pinup_supported,
-               lb_type, pd_type, period, title, is_pinned_up);
+               dbox_type, gbar_type, period, title, is_pinned_up);
 
-       common = lb_find_common_handle_by_timestamp(timestamp);
+       common = dbox_find_common_handle_by_timestamp(timestamp);
        if (!common) {
-               handler = lb_new_livebox(pkgname, id, timestamp, cluster, category);
+               handler = dbox_new_dynamicbox(pkgname, id, timestamp, cluster, category);
                if (!handler) {
-                       ErrPrint("Failed to create a new livebox\n");
-                       ret = LB_STATUS_ERROR_FAULT;
+                       ErrPrint("Failed to create a new dynamicbox\n");
+                       ret = DBOX_STATUS_ERROR_FAULT;
                        goto out;
                }
                common = handler->common;
                old_state = common->state;
        } else {
-               if (common->state != CREATE) {
-                       if (common->state != DELETE) {
+               if (common->state != DBOX_STATE_CREATE) {
+                       if (common->state != DBOX_STATE_DELETE) {
                                /*!
                                 * \note
                                 * This is not possible!!!
                                 */
                                ErrPrint("Invalid handler\n");
-                               ret = LB_STATUS_ERROR_INVALID;
+                               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                                goto out;
                        }
 
@@ -1384,114 +1398,114 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
                if (common->id) {
                        ErrPrint("Already created: timestamp[%lf] "
                                "pkgname[%s], id[%s] content[%s] "
-                               "cluster[%s] category[%s] lb_fname[%s] pd_fname[%s]\n",
+                               "cluster[%s] category[%s] dbox_fname[%s] gbar_fname[%s]\n",
                                        timestamp, pkgname, id,
                                        content, cluster, category,
-                                       lb_fname, pd_fname);
+                                       dbox_fname, gbar_fname);
 
-                       ret = LB_STATUS_ERROR_ALREADY;
+                       ret = DBOX_STATUS_ERROR_ALREADY;
                        goto out;
                }
 
-               lb_set_id(common, id);
+               dbox_set_id(common, id);
        }
 
        common->request.created = 0;
-       lb_set_size(common, lb_w, lb_h);
-       common->lb.type = lb_type;
+       dbox_set_size(common, dbox_w, dbox_h);
+       common->dbox.type = dbox_type;
        common->is_pinned_up = is_pinned_up;
 
-       switch (lb_type) {
-       case _LB_TYPE_ELEMENTARY:
-       case _LB_TYPE_FILE:
+       switch (dbox_type) {
+       case DBOX_TYPE_UIFW:
+       case DBOX_TYPE_FILE:
                break;
-       case _LB_TYPE_SCRIPT:
-       case _LB_TYPE_BUFFER:
-               if (!strlen(lb_fname)) {
+       case DBOX_TYPE_SCRIPT:
+       case DBOX_TYPE_BUFFER:
+               if (!strlen(dbox_fname)) {
                        break;
                }
-               (void)lb_set_lb_fb(common, lb_fname);
+               (void)dbox_set_dbox_fb(common, dbox_fname);
 
                /*!
                 * \note
                 * Livebox should create the lock file from here.
-                * Even if the old_state == DELETE,
+                * Even if the old_state == DBOX_STATE_DELETE,
                 * the lock file will be deleted from deleted event callback.
                 */
-               switch (fb_type(lb_get_lb_fb(common))) {
-               case BUFFER_TYPE_FILE:
-               case BUFFER_TYPE_SHM:
-                       lb_create_lock_file(common, 0);
+               switch (fb_type(dbox_get_dbox_fb(common))) {
+               case DBOX_FB_TYPE_FILE:
+               case DBOX_FB_TYPE_SHM:
+                       dbox_create_lock_file(common, 0);
                        break;
-               case BUFFER_TYPE_PIXMAP:
-               case BUFFER_TYPE_ERROR:
+               case DBOX_FB_TYPE_PIXMAP:
+               case DBOX_FB_TYPE_ERROR:
                default:
                        break;
                }
 
-               ret = lb_sync_lb_fb(common);
+               ret = dbox_sync_dbox_fb(common);
                if (ret < 0) {
                        ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
                }
                break;
-       case _LB_TYPE_TEXT:
-               lb_set_text_lb(common);
+       case DBOX_TYPE_TEXT:
+               dbox_set_text_dbox(common);
                break;
        default:
                break;
        }
 
-       common->pd.type = pd_type;
-       lb_set_pdsize(common, pd_w, pd_h);
-       lb_set_default_pdsize(common, pd_w, pd_h);
-       switch (pd_type) {
-       case _PD_TYPE_SCRIPT:
-       case _PD_TYPE_BUFFER:
-               if (!strlen(pd_fname)) {
+       common->gbar.type = gbar_type;
+       dbox_set_gbarsize(common, gbar_w, gbar_h);
+       dbox_set_default_gbarsize(common, gbar_w, gbar_h);
+       switch (gbar_type) {
+       case GBAR_TYPE_SCRIPT:
+       case GBAR_TYPE_BUFFER:
+               if (!strlen(gbar_fname)) {
                        break;
                }
 
-               lb_set_pd_fb(common, pd_fname);
+               dbox_set_gbar_fb(common, gbar_fname);
 
-               ret = lb_sync_pd_fb(common);
+               ret = dbox_sync_gbar_fb(common);
                if (ret < 0) {
                        ErrPrint("Failed to do sync FB (%s - %s)\n", pkgname, util_basename(util_uri_to_path(id)));
                }
 
                /*!
                 * \brief
-                * PD doesn't need to create the lock file from here.
-                * Just create it from PD_CREATED event.
+                * GBAR doesn't need to create the lock file from here.
+                * Just create it from GBAR_CREATED event.
                 */
 
                break;
-       case _PD_TYPE_TEXT:
-               lb_set_text_pd(common);
+       case GBAR_TYPE_TEXT:
+               dbox_set_text_gbar(common);
                break;
-       case _PD_TYPE_ELEMENTARY:
+       case GBAR_TYPE_UIFW:
        default:
                break;
        }
 
-       lb_set_priority(common, priority);
+       dbox_set_priority(common, priority);
 
-       lb_set_size_list(common, size_list);
-       lb_set_group(common, cluster, category);
+       dbox_set_size_list(common, size_list);
+       dbox_set_group(common, cluster, category);
 
-       lb_set_content(common, content);
-       lb_set_title(common, title);
+       dbox_set_content(common, content);
+       dbox_set_title(common, title);
 
-       lb_set_user(common, user);
+       dbox_set_user(common, user);
 
-       lb_set_auto_launch(common, auto_launch);
-       lb_set_pinup(common, pinup_supported);
+       dbox_set_auto_launch(common, auto_launch);
+       dbox_set_pinup(common, pinup_supported);
 
-       lb_set_period(common, period);
+       dbox_set_period(common, period);
 
        ret = 0;
 
-       if (common->state == CREATE) {
-               dlist_foreach(common->livebox_list, l, handler) {
+       if (common->state == DBOX_STATE_CREATE) {
+               dlist_foreach(common->dynamicbox_list, l, handler) {
                        /*!
                         * \note
                         * These callback can change the handler->state.
@@ -1499,7 +1513,7 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
                         */
 
                        if (handler->cbs.created.cb) {
-                               ret_cb_t cb;
+                               dynamicbox_ret_cb cb;
                                void *cbdata;
 
                                cb = handler->cbs.created.cb;
@@ -1510,33 +1524,33 @@ static struct packet *master_created(pid_t pid, int handle, const struct packet
 
                                cb(handler, ret, cbdata);
                        } else {
-                               lb_invoke_event_handler(handler, LB_EVENT_CREATED);
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_CREATED);
                        }
                }
        }
 
 out:
-       if (ret == 0 && old_state == DELETE) {
+       if (ret == 0 && old_state == DBOX_STATE_DELETE) {
                struct dlist *n;
 
                DbgPrint("Take place an unexpected case [%d]\n", common->refcnt);
-               dlist_foreach_safe(common->livebox_list, l, n, handler) {
+               dlist_foreach_safe(common->dynamicbox_list, l, n, handler) {
                        if (handler->cbs.created.cb) {
                                if (!handler->common->request.deleted) {
-                                       if (lb_send_delete(handler, common->delete_type, handler->cbs.created.cb, handler->cbs.created.data) < 0) {
+                                       if (dbox_send_delete(handler, common->delete_type, handler->cbs.created.cb, handler->cbs.created.data) < 0) {
                                                /*!
                                                 * \note
                                                 * Already sent or something else happens.
                                                 * Callback will be called in any cases
                                                 */
                                        }
-                               } else if (handler->state != DELETE) {
-                                       handler->cbs.created.cb(handler, LB_STATUS_ERROR_CANCEL, handler->cbs.created.data);
-                                       lb_unref(handler, 1);
+                               } else if (handler->state != DBOX_STATE_DELETE) {
+                                       handler->cbs.created.cb(handler, DBOX_STATUS_ERROR_CANCEL, handler->cbs.created.data);
+                                       dbox_unref(handler, 1);
                                }
                        } else {
-                               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-                               lb_unref(handler, 1);
+                               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+                               dbox_unref(handler, 1);
                        }
                }
 
@@ -1548,7 +1562,7 @@ out:
                 * Do not clear this to use this from the deleted event callback.
                 * if this value is not cleared when the deleted event callback check it,
                 * it means that the created function is not called yet.
-                * Then the call the deleted event callback with LB_STATUS_ERROR_CANCEL errno.
+                * Then the call the deleted event callback with DBOX_STATUS_ERROR_CANCEL errno.
                 */
        }
 
@@ -1557,100 +1571,97 @@ out:
 
 static struct method s_table[] = {
        {
-               .cmd = "lb_updated", /* pkgname, id, lb_w, lb_h, priority, ret */
-               .handler = master_lb_updated,
+               .cmd = CMD_STR_DBOX_UPDATED, /* pkgname, id, dbox_w, dbox_h, priority, ret */
+               .handler = master_dbox_updated,
        },
        {
-               .cmd = "pd_updated", /* pkgname, id, descfile, pd_w, pd_h, ret */
-               .handler = master_pd_updated,
+               .cmd = CMD_STR_GBAR_UPDATED, /* pkgname, id, descfile, pd_w, pd_h, ret */
+               .handler = master_gbar_updated,
        },
        {
-               .cmd = "extra_info",
+               .cmd = CMD_STR_EXTRA_INFO,
                .handler = master_extra_info,
        },
        {
-               .cmd = "deleted", /* pkgname, id, timestamp, ret */
+               .cmd = CMD_STR_DELETED, /* pkgname, id, timestamp, ret */
                .handler = master_deleted,
        },
        {
-               .cmd = "fault_package", /* pkgname, id, function, ret */
+               .cmd = CMD_STR_FAULT_PACKAGE, /* pkgname, id, function, ret */
                .handler = master_fault_package,
        },
        {
-               .cmd = "scroll",
+               .cmd = CMD_STR_SCROLL,
                .handler = master_hold_scroll,
        },
        {
-               .cmd = "lb_update_begin",
-               .handler = master_lb_update_begin,
+               .cmd = CMD_STR_DBOX_UPDATE_BEGIN,
+               .handler = master_dbox_update_begin,
        },
        {
-               .cmd = "lb_update_end",
-               .handler = master_lb_update_end,
+               .cmd = CMD_STR_DBOX_UPDATE_END,
+               .handler = master_dbox_update_end,
        },
-
        {
-               .cmd = "pd_update_begin",
-               .handler = master_pd_update_begin,
+               .cmd = CMD_STR_GBAR_UPDATE_BEGIN,
+               .handler = master_gbar_update_begin,
        },
        {
-               .cmd = "pd_update_end",
-               .handler = master_pd_update_end,
+               .cmd = CMD_STR_GBAR_UPDATE_END,
+               .handler = master_gbar_update_end,
        },
        {
-               .cmd = "access_status",
+               .cmd = CMD_STR_ACCESS_STATUS,
                .handler = master_access_status,
        },
        {
-               .cmd = "key_status",
+               .cmd = CMD_STR_KEY_STATUS,
                .handler = master_key_status,
        },
        {
-               .cmd = "close_pd",
-               .handler = master_request_close_pd,
+               .cmd = CMD_STR_CLOSE_GBAR,
+               .handler = master_request_close_gbar,
        },
-
        {
-               .cmd = "pd_created",
-               .handler = master_pd_created,
+               .cmd = CMD_STR_GBAR_CREATED,
+               .handler = master_gbar_created,
        },
        {
-               .cmd = "pd_destroyed",
-               .handler = master_pd_destroyed,
+               .cmd = CMD_STR_GBAR_DESTROYED,
+               .handler = master_gbar_destroyed,
        },
        {
-               .cmd = "created", /* timestamp, pkgname, id, content, lb_w, lb_h, pd_w, pd_h, cluster, category, lb_file, pd_file, auto_launch, priority, size_list, is_user, pinup_supported, text_lb, text_pd, period, ret */
+               .cmd = CMD_STR_CREATED, /* timestamp, pkgname, id, content, dbox_w, dbox_h, gbar_w, gbar_h, cluster, category, dbox_file, gbar_file, auto_launch, priority, size_list, is_user, pinup_supported, text_dbox, text_gbar, period, ret */
                .handler = master_created,
        },
        {
-               .cmd = "group_changed",
+               .cmd = CMD_STR_GROUP_CHANGED,
                .handler = master_group_changed,
        },
        {
-               .cmd = "period_changed",
+               .cmd = CMD_STR_PERIOD_CHANGED,
                .handler = master_period_changed,
        },
        {
-               .cmd = "size_changed",
+               .cmd = CMD_STR_SIZE_CHANGED,
                .handler = master_size_changed,
        },
        {
-               .cmd = "pinup",
+               .cmd = CMD_STR_PINUP,
                .handler = master_pinup,
        },
 
        {
-               .cmd = "update_mode",
+               .cmd = CMD_STR_UPDATE_MODE,
                .handler = master_update_mode,
        },
-
        {
                .cmd = NULL,
                .handler = NULL,
        },
 };
 
-static void acquire_cb(struct livebox *handler, const struct packet *result, void *data)
+static void acquire_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
        if (!result) {
                DbgPrint("Result packet is not valid\n");
@@ -1670,22 +1681,22 @@ static void acquire_cb(struct livebox *handler, const struct packet *result, voi
 static inline int make_connection(void)
 {
        struct packet *packet;
-       int ret;
        unsigned int cmd = CMD_ACQUIRE;
+       int ret;
 
        DbgPrint("Let's making connection!\n");
 
        s_info.fd = com_core_packet_client_init(client_addr(), 0, s_table);
        if (s_info.fd < 0) {
                ErrPrint("Try this again later\n");
-               return LB_STATUS_ERROR_IO;
+               return DBOX_STATUS_ERROR_IO_ERROR;
        }
 
        packet = packet_create((const char *)&cmd, "ds", util_timestamp(), client_direct_addr());
        if (!packet) {
                com_core_packet_client_fini(s_info.fd);
                s_info.fd = -1;
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        ret = master_rpc_async_request(NULL, packet, 1, acquire_cb, NULL);
@@ -1693,10 +1704,10 @@ static inline int make_connection(void)
                ErrPrint("Master RPC returns %d\n", ret);
                com_core_packet_client_fini(s_info.fd);
                s_info.fd = -1;
-               return LB_STATUS_ERROR_IO;
+               return DBOX_STATUS_ERROR_IO_ERROR;
        }
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 static int connected_cb(int handle, void *data)
@@ -1714,7 +1725,7 @@ static void master_started_cb(keynode_t *node, void *data)
        }
 
        DbgPrint("Master state: %d\n", state);
-       if (state == 1 && make_connection() == (int)LB_STATUS_SUCCESS) {
+       if (state == 1 && make_connection() == (int)DBOX_STATUS_ERROR_NONE) {
                int ret;
                ret = vconf_ignore_key_changed(VCONFKEY_MASTER_STARTED, master_started_cb);
                if (ret < 0) {
@@ -1747,9 +1758,9 @@ static int disconnected_cb(int handle, void *data)
        s_info.fd = -1; /*!< Disconnected */
 
        master_rpc_clear_all_request();
-       lb_invoke_fault_handler(LB_FAULT_PROVIDER_DISCONNECTED, MASTER_PKGNAME, "default", "disconnected");
+       dbox_invoke_fault_handler(DBOX_FAULT_PROVIDER_DISCONNECTED, MASTER_PKGNAME, "default", "disconnected");
 
-       lb_delete_all();
+       dbox_delete_all();
 
        /* Try to reconnect after 1 sec later */
        if (!s_info.timer_id) {
@@ -1768,12 +1779,12 @@ static int disconnected_cb(int handle, void *data)
 
 static struct method s_direct_table[] = {
        {
-               .cmd = "lb_updated", /* pkgname, id, lb_w, lb_h, priority, ret */
-               .handler = master_lb_updated,
+               .cmd = CMD_STR_DBOX_UPDATED, /* pkgname, id, lb_w, lb_h, priority, ret */
+               .handler = master_dbox_updated,
        },
        {
-               .cmd = "pd_updated", /* pkgname, id, descfile, pd_w, pd_h, ret */
-               .handler = master_pd_updated,
+               .cmd = CMD_STR_GBAR_UPDATED, /* pkgname, id, descfile, pd_w, pd_h, ret */
+               .handler = master_gbar_updated,
        },
        {
                .cmd = NULL,
@@ -1820,7 +1831,7 @@ int client_init(int use_thread)
                s_info.client_addr = strdup(CLIENT_SOCKET);
                if (!s_info.client_addr) {
                        ErrPrint("Heap: %s\n", strerror(errno));
-                       return LB_STATUS_ERROR_MEMORY;
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                }
        }
 
@@ -1846,7 +1857,7 @@ int client_init(int use_thread)
        }
 
        master_started_cb(NULL, NULL);
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int client_fd(void)
@@ -1882,7 +1893,6 @@ int client_fini(void)
 
        com_core_del_event_callback(CONNECTOR_DISCONNECTED, disconnected_cb, NULL);
        com_core_del_event_callback(CONNECTOR_CONNECTED, connected_cb, NULL);
-
        com_core_packet_client_fini(s_info.fd);
        s_info.fd = -1;
 
@@ -1896,7 +1906,7 @@ int client_fini(void)
 
        free(s_info.direct_addr);
        s_info.direct_addr = NULL;
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 /* End of a file */
index ac056ac..d0be33d 100644 (file)
 
 #include <gio/gio.h>
 #include <dlog.h>
-#include <livebox-errno.h>
-#include <livebox-service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
 
 #include "debug.h"
-#include "livebox.h"
-#include "livebox_internal.h"
+#include "dynamicbox.h"
+#include "dynamicbox_internal.h"
 #include "desc_parser.h"
 #include "dlist.h"
 #include "util.h"
@@ -100,16 +100,16 @@ struct block {
        const char *filename;
 };
 
-static int update_text(struct livebox *handle, struct block *block, int is_pd)
+static int update_text(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block || !block->part || !block->data) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_text) {
                ops->update_text(handle, (const char *)block->id, (const char *)block->part, (const char *)block->data);
        }
@@ -117,16 +117,16 @@ static int update_text(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_image(struct livebox *handle, struct block *block, int is_pd)
+static int update_image(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block || !block->part) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_image) {
                ops->update_image(handle, block->id, block->part, block->data, block->option);
        }
@@ -134,16 +134,16 @@ static int update_image(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_script(struct livebox *handle, struct block *block, int is_pd)
+static int update_script(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block || !block->part) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_script) {
                ops->update_script(handle, block->id, block->target, block->part, block->data, block->option);
        }
@@ -151,16 +151,16 @@ static int update_script(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_signal(struct livebox *handle, struct block *block, int is_pd)
+static int update_signal(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_signal) {
                ops->update_signal(handle, block->id, block->data, block->part);
        }
@@ -168,22 +168,22 @@ static int update_signal(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_drag(struct livebox *handle, struct block *block, int is_pd)
+static int update_drag(dynamicbox_h handle, struct block *block, int is_gbar)
 {
        double dx, dy;
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block || !block->data || !block->part) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (sscanf(block->data, "%lfx%lf", &dx, &dy) != 2) {
                ErrPrint("Invalid format of data\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_drag) {
                ops->update_drag(handle, block->id, block->part, dx, dy);
        }
@@ -191,22 +191,22 @@ static int update_drag(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_info(struct livebox *handle, struct block *block, int is_pd)
+static int update_info(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block || !block->part || !block->data) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (!strcasecmp(block->part, INFO_SIZE)) {
                int w, h;
 
                if (sscanf(block->data, "%dx%d", &w, &h) != 2) {
                        ErrPrint("Invalid format (%s)\n", block->data);
-                       return LB_STATUS_ERROR_INVALID;
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
                }
 
                if (ops->update_info_size) {
@@ -221,16 +221,16 @@ static int update_info(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int update_access(struct livebox *handle, struct block *block, int is_pd)
+static int update_access(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_access) {
                ops->update_access(handle, block->id, block->part, block->data, block->option);
        }
@@ -238,16 +238,16 @@ static int update_access(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static int operate_access(struct livebox *handle, struct block *block, int is_pd)
+static int operate_access(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->operate_access) {
                ops->operate_access(handle, block->id, block->part, block->data, block->option);
        }
@@ -255,16 +255,16 @@ static int operate_access(struct livebox *handle, struct block *block, int is_pd
        return 0;
 }
 
-static int update_color(struct livebox *handle, struct block *block, int is_pd)
+static int update_color(dynamicbox_h handle, struct block *block, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
        if (!block) {
                ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_color) {
                ops->update_color(handle, block->id, block->part, block->data);
        }
@@ -272,11 +272,11 @@ static int update_color(struct livebox *handle, struct block *block, int is_pd)
        return 0;
 }
 
-static inline int update_begin(struct livebox *handle, int is_pd)
+static inline int update_begin(dynamicbox_h handle, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_begin) {
                ops->update_begin(handle);
        }
@@ -284,11 +284,11 @@ static inline int update_begin(struct livebox *handle, int is_pd)
        return 0;
 }
 
-static inline int update_end(struct livebox *handle, int is_pd)
+static inline int update_end(dynamicbox_h handle, int is_gbar)
 {
-       struct livebox_script_operators *ops;
+       struct dynamicbox_script_operators *ops;
 
-       ops = is_pd ? &handle->cbs.pd_ops : &handle->cbs.lb_ops;
+       ops = is_gbar ? &handle->cbs.gbar_ops : &handle->cbs.dbox_ops;
        if (ops->update_end) {
                ops->update_end(handle);
        }
@@ -302,9 +302,9 @@ static inline void delete_block(struct block *block)
        free(block);
 }
 
-static inline void consuming_parsed_block(struct livebox *handle, int is_pd, struct block *block)
+static inline void consuming_parsed_block(dynamicbox_h handle, int is_gbar, struct block *block)
 {
-       typedef int (*update_function_t)(struct livebox *handle, struct block *block, int is_pd);
+       typedef int (*update_function_t)(dynamicbox_h handle, struct block *block, int is_gbar);
        static update_function_t updators[] = {
                update_access,
                operate_access,
@@ -319,7 +319,7 @@ static inline void consuming_parsed_block(struct livebox *handle, int is_pd, str
        };
 
        if (block->type >= 0 || block->type < TYPE_MAX) {
-               (void)updators[block->type](handle, block, is_pd);
+               (void)updators[block->type](handle, block, is_gbar);
        } else {
                ErrPrint("Block type[%d] is not valid\n", block->type);
        }
@@ -390,7 +390,7 @@ errout:
        return filebuf;
 }
 
-int parse_desc(struct livebox_common *common, const char *filename, int is_pd)
+int parse_desc(struct dynamicbox_common *common, const char *filename, int is_gbar)
 {
        int type_idx = 0;
        int type_len = 0;
@@ -404,7 +404,7 @@ int parse_desc(struct livebox_common *common, const char *filename, int is_pd)
        struct dlist *l;
        struct dlist *n;
        struct dlist *handle_iterator;
-       struct livebox *handler;
+       dynamicbox_h handler;
        enum state {
                BEGIN,
                FIELD,
@@ -416,7 +416,7 @@ int parse_desc(struct livebox_common *common, const char *filename, int is_pd)
 
        filebuf = load_file(filename);
        if (!filebuf) {
-               return LB_STATUS_ERROR_IO;
+               return DBOX_STATUS_ERROR_IO_ERROR;
        }
 
        fileptr = filebuf;
@@ -660,7 +660,7 @@ int parse_desc(struct livebox_common *common, const char *filename, int is_pd)
                        block_list = dlist_remove(block_list, l);
                }
 
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
                
@@ -673,25 +673,25 @@ int parse_desc(struct livebox_common *common, const char *filename, int is_pd)
        }
 
        ErrPrint("Begin: Set content for object\n");
-       dlist_foreach(common->livebox_list, l, handler) {
-               update_begin(handler, is_pd);
+       dlist_foreach(common->dynamicbox_list, l, handler) {
+               update_begin(handler, is_gbar);
        }
 
        dlist_foreach_safe(block_list, l, n, block) {
-               dlist_foreach(common->livebox_list, handle_iterator, handler) {
-                       consuming_parsed_block(handler, is_pd, block);
+               dlist_foreach(common->dynamicbox_list, handle_iterator, handler) {
+                       consuming_parsed_block(handler, is_gbar, block);
                }
 
                block_list = dlist_remove(block_list, l);
                delete_block(block);
        }
 
-       dlist_foreach(common->livebox_list, l, handler) {
-               update_end(handler, is_pd);
+       dlist_foreach(common->dynamicbox_list, l, handler) {
+               update_end(handler, is_gbar);
        }
        ErrPrint("End: Set content for object\n");
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 /* End of a file */
index 07b5494..7dc2bd6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2013  Samsung Electronics Co., Ltd
+ * Copyright 2014  Samsung Electronics Co., Ltd
  *
  * Licensed under the Flora License, Version 1.1 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  */
 
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h> /* malloc */
+#include <string.h> /* strdup */
+#include <math.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <gio/gio.h>
+#include <aul.h>
+#include <dlog.h>
+
+#include <com-core_packet.h>
+#include <packet.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_cmd_list.h>
+#include <dynamicbox_buffer.h>
+
+#include "debug.h"
+#include "fb.h"
 #include "dynamicbox.h"
-#include "livebox.h"
+#include "dynamicbox_internal.h"
+#include "dlist.h"
+#include "util.h"
+#include "master_rpc.h"
+#include "client.h"
+#include "conf.h"
 
+#define EAPI __attribute__((visibility("default")))
+
+#if defined(FLOG)
+FILE *__file_log_fp;
+#endif
 
 #define EAPI __attribute__((visibility("default")))
 
-EAPI int dynamicbox_init(void *disp, int prevent_overwrite, double event_filter, int use_thread)
-{
-       return livebox_init_with_options(disp, prevent_overwrite, event_filter, use_thread);
-}
+static int default_launch_handler(dynamicbox_h handler, const char *appid, void *data);
+
+static struct info {
+       int init_count;
+       int prevent_overwrite;
+       guint job_timer;
+       struct dlist *job_list;
+
+       struct launch {
+               int (*handler)(dynamicbox_h handler, const char *appid, void *data);
+               void *data;
+       } launch;
+} s_info = {
+       .init_count = 0,
+       .prevent_overwrite = 0,
+       .job_timer = 0,
+       .job_list = NULL,
+       .launch = {
+               .handler = default_launch_handler,
+               .data = NULL,
+       },
+};
+
+static void dbox_pixmap_acquired_cb(dynamicbox_h handler, const struct packet *result, void *data);
+static void gbar_pixmap_acquired_cb(dynamicbox_h handler, const struct packet *result, void *data);
+
+static int default_launch_handler(dynamicbox_h handler, const char *appid, void *data)
+{
+       int ret;
+
+       ret = aul_launch_app(appid, NULL);
+       if (ret <= 0) {
+               ErrPrint("Failed to launch an app %s (%d)\n", appid, ret);
+       }
 
-EAPI int dynamicbox_fini(void)
-{
-       return livebox_fini();
-}
+/*
+       app_control_h service;
 
-EAPI struct dynamicbox *dynamicbox_add(const char *pkgname, const char *content, const char *cluster, const char *category, double period, int type, dynamicbox_ret_cb_t cb, void *data)
-{
-       return (struct dynamicbox*)livebox_add(pkgname, content, cluster, category, period, type, (ret_cb_t)cb, data);
-}
+       DbgPrint("AUTO_LAUNCH [%s]\n", handler->common->dbox.auto_launch);
 
-EAPI double dynamicbox_period(struct dynamicbox *handler)
-{
-       return livebox_period((struct livebox*)handler);
-}
+       ret = app_control_create(&service);
+       if (ret == APP_CONTROL_ERROR_NONE) {
+               app_control_set_package(service, handler->common->dbox.auto_launch);
+               app_control_send_launch_request(service, NULL, NULL);
+               app_control_destroy(service);
+       } else {
+               ErrPrint("Failed to launch an app %s (%d)\n", handler->common->dbox.auto_launch, ret);
+       }
+*/
 
-EAPI int dynamicbox_set_period(struct dynamicbox *handler, double period, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_set_period((struct livebox*)handler, period, (ret_cb_t)cb, data);
+       return ret > 0 ? DBOX_STATUS_ERROR_NONE : DBOX_STATUS_ERROR_FAULT;
 }
 
-EAPI int dynamicbox_del(struct dynamicbox *handler, int type, dynamicbox_ret_cb_t cb, void *data)
+static inline void default_create_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_del(((struct livebox*) handler), type, (ret_cb_t)cb, data);
+       DbgPrint("Default created event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_set_fault_handler(int (*dbox_cb)(enum dynamicbox_fault_type, const char *, const char *, const char *, void *), void *data)
+static inline void default_pinup_cb(dynamicbox_h handler, int ret, void *data)
 {
-       typedef int (*set_fault_handler_cb)(enum livebox_fault_type, const char *, const char *, const char *, void *);
-
-       return livebox_set_fault_handler((set_fault_handler_cb)dbox_cb, data);
+       DbgPrint("Default pinup event handler: %d\n", ret);
 }
 
-EAPI void *dynamicbox_unset_fault_handler(int (*dbox_cb)(enum dynamicbox_fault_type, const char *, const char *, const char *, void *))
+static inline void default_group_changed_cb(dynamicbox_h handler, int ret, void *data)
 {
-       typedef int (*cb)(enum livebox_fault_type, const char *, const char *, const char *, void *);
-
-       return livebox_unset_fault_handler((cb)dbox_cb);
+       DbgPrint("Default group changed event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_set_event_handler(int (*dbox_cb)(struct dynamicbox *, enum dynamicbox_event_type, void *), void *data)
+static inline void default_period_changed_cb(dynamicbox_h handler, int ret, void *data)
 {
-       typedef int (*cb)(struct livebox *, enum livebox_event_type, void *);
-
-       return livebox_set_event_handler((cb)dbox_cb, data);
+       DbgPrint("Default period changed event handler: %d\n", ret);
 }
 
-EAPI void *dynamicbox_unset_event_handler(int (*dbox_cb)(struct dynamicbox *, enum dynamicbox_event_type, void *))
+static inline void default_gbar_created_cb(dynamicbox_h handler, int ret, void *data)
 {
-       typedef int (*cb)(struct livebox *, enum livebox_event_type, void *);
-
-       return livebox_unset_event_handler((cb)dbox_cb);
+       DbgPrint("Default GBAR created event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_set_update_mode(struct dynamicbox *handler, int active_update, dynamicbox_ret_cb_t cb, void *data)
+static inline void default_gbar_destroyed_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_set_update_mode((struct livebox*)handler, active_update, (ret_cb_t)cb, data);
+       DbgPrint("Default GBAR destroyed event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_is_active_update(struct dynamicbox *handler)
+static inline void default_dbox_size_changed_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_is_active_update((struct livebox*)handler);
+       DbgPrint("Default DBOX size changed event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_resize(struct dynamicbox *handler, int type, dynamicbox_ret_cb_t cb, void *data)
+static inline void default_update_mode_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_resize((struct livebox*)handler, type, (ret_cb_t)cb, data);
+       DbgPrint("Default update mode set event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_click(struct dynamicbox *handler, double x, double y)
+static inline void default_access_event_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_click((struct livebox*)handler, x, y);
+       DbgPrint("Default access event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_has_pd(struct dynamicbox *handler)
+static inline void default_key_event_cb(dynamicbox_h handler, int ret, void *data)
 {
-       return livebox_has_pd((struct livebox*)handler);
+       DbgPrint("Default key event handler: %d\n", ret);
 }
 
-EAPI int dynamicbox_gbar_is_created(struct dynamicbox *handler)
+static void update_mode_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_pd_is_created((struct livebox*)handler);
-}
+       int ret;
 
-EAPI int dynamicbox_create_gbar(struct dynamicbox *handler, double x, double y, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_create_pd_with_position((struct livebox*)handler, x, y, (ret_cb_t)cb, data);
-}
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               goto errout;
+       }
 
-EAPI int dynamicbox_move_gbar(struct dynamicbox *handler, double x, double y)
-{
-       return livebox_move_pd((struct livebox*)handler, x, y);
-}
+       if (ret < 0) {
+               ErrPrint("Resize request is failed: %d\n", ret);
+               goto errout;
+       }
 
-EAPI int dynamicbox_activate(const char *pkgname, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_activate(pkgname, (ret_cb_t)cb, data);
-}
+       return;
 
-EAPI int dynamicbox_destroy_gbar(struct dynamicbox *handler, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_destroy_pd((struct livebox*)handler, (ret_cb_t)cb, data);
-}
+errout:
+       handler->cbs.update_mode.cb(handler, ret, handler->cbs.update_mode.data);
+       handler->cbs.update_mode.cb = NULL;
+       handler->cbs.update_mode.data = NULL;
+       handler->common->request.update_mode = 0;
 
-EAPI int dynamicbox_access_event(struct dynamicbox *handler, enum dynamicbox_access_event_type type, struct dynamicbox_access_event_info *info, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_access_event((struct livebox*)handler, (enum access_event_type)type, info->x, info->y, (ret_cb_t)cb, data);
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_mouse_event(struct dynamicbox *handler, enum dynamicbox_mouse_event_type type, struct dynamicbox_mouse_event_info *info)
+static void resize_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_mouse_event((struct livebox*)handler, (enum content_event_type)type, info->x, info->y);
-}
+       int ret;
 
-EAPI int dynamicbox_key_event(struct dynamicbox *handler, enum dynamicbox_key_event_type type, struct dynamicbox_key_event_info *info, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_key_event((struct livebox*) handler, (enum content_event_type)type, info->keycode, (ret_cb_t)cb, data);
-}
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               goto errout;
+       }
 
-EAPI const char *dynamicbox_filename(struct dynamicbox *handler)
-{
-       return livebox_filename((struct livebox*)handler);
-}
+       /*!
+        * \note
+        * In case of resize request,
+        * The dynamicbox handler will not have resized value right after this callback,
+        * It can only get the new size when it makes updates.
+        *
+        * So the user can only get the resized value(result) from the first update event
+        * after this request.
+        */
+       if (ret < 0) {
+               ErrPrint("Resize request is failed: %d\n", ret);
+               goto errout;
+       }
 
-EAPI int dynamicbox_get_gbar_size(struct dynamicbox *handler, int *w, int *h)
-{
-       return livebox_get_pdsize((struct livebox*) handler, w, h);
-}
+       return;
 
-EAPI int dynamicbox_size(struct dynamicbox *handler)
-{
-       return livebox_size((struct livebox*) handler);
-}
+errout:
+       handler->cbs.size_changed.cb(handler, ret, handler->cbs.size_changed.data);
+       handler->cbs.size_changed.cb = NULL;
+       handler->cbs.size_changed.data = NULL;
+       handler->common->request.size_changed = 0;
 
-EAPI int dynamicbox_set_group(struct dynamicbox *handler, const char *cluster, const char *category, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_set_group((struct livebox*) handler, cluster, category, (ret_cb_t)cb, data);
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_get_group(struct dynamicbox *handler, const char **cluster, const char **category)
+static void text_signal_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_get_group((struct livebox*) handler, cluster, category);
-}
+       int ret;
+       void *cbdata;
+       struct cb_info *info = data;
+       dynamicbox_ret_cb cb;
 
-EAPI int dynamicbox_get_supported_sizes(struct dynamicbox *handler, int *cnt, int *size_list)
-{
-       return livebox_get_supported_sizes((struct livebox*) handler, cnt, size_list);
-}
+       cbdata = info->data;
+       cb = info->cb;
+       dbox_destroy_cb_info(info);
 
-EAPI const char *dynamicbox_pkgname(struct dynamicbox *handler)
-{
-       return livebox_pkgname((struct livebox*) handler);
-}
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
 
-EAPI double dynamicbox_priority(struct dynamicbox *handler)
-{
-       return livebox_priority((struct livebox*) handler);
+       if (cb) {
+               cb(handler, ret, cbdata);
+       }
+       return;
 }
 
-#if 0 // those are unused functions
-EAPI int dynamicbox_delete_cluster(const char *cluster, dynamicbox_ret_cb_t cb, void *data)
+static void set_group_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_delete_cluster(cluster, (ret_cb_t)cb, data);
+       int ret;
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               goto errout;
+       }
+
+       if (ret < 0) {
+               goto errout;
+       }
+
+       return;
+
+errout:
+       handler->cbs.group_changed.cb(handler, ret, handler->cbs.group_changed.data);
+       handler->cbs.group_changed.cb = NULL;
+       handler->cbs.group_changed.data = NULL;
+       handler->common->request.group_changed = 0;
+
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_delete_category(const char *cluster, const char *category, dynamicbox_ret_cb_t cb, void *data)
+static void period_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_delete_category(cluster, category, (ret_cb_t)cb, data);
+       int ret;
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               goto errout;
+       }
+
+       if (ret < 0) {
+               goto errout;
+       }
+
+       return;
+
+errout:
+       handler->cbs.period_changed.cb(handler, ret, handler->cbs.period_changed.data);
+       handler->cbs.period_changed.cb = NULL;
+       handler->cbs.period_changed.data = NULL;
+       handler->common->request.period_changed = 0;
+
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
-#endif
 
-EAPI enum dynamicbox_type dynamicbox_type(struct dynamicbox *handler, int gbar)
+static void gbar_create_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       enum dynamicbox_type type;
+       int ret;
 
-       if (gbar) {
-               enum livebox_pd_type ptype;
-               ptype = livebox_pd_type((struct livebox *)handler);
-               switch (ptype) {
-               case PD_TYPE_BUFFER:
-                       type = DBOX_TYPE_BUFFER;
-                       break;
-               case PD_TYPE_TEXT:
-                       type = DBOX_TYPE_TEXT;
-                       break;
-               case PD_TYPE_PIXMAP:
-                       type = DBOX_TYPE_RESOURCE_ID;
-                       break;
-               case PD_TYPE_ELEMENTARY:
-                       type = DBOX_TYPE_UIFW;
-                       break;
-               case PD_TYPE_INVALID:
-               default:
-                       type = DBOX_TYPE_INVALID;
-                       break;
-               }
-       } else {
-               enum livebox_lb_type ltype;
-               ltype = livebox_lb_type((struct livebox *)handler);
-               type = (enum dynamicbox_type)ltype;
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               goto errout;
        }
 
-       return type;
+       if (ret < 0) {
+               ErrPrint("Failed to create a GBAR[%d]\n", ret);
+               goto errout;
+       }
+
+       return;
+
+errout:
+       handler->cbs.gbar_created.cb(handler, ret, handler->cbs.gbar_created.data);
+       handler->cbs.gbar_created.cb = NULL;
+       handler->cbs.gbar_created.data = NULL;
+       handler->common->request.gbar_created = 0;
+
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_set_text_handler(struct dynamicbox *handler, int gbar, struct dynamicbox_script_operators *ops)
+static void activated_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return livebox_set_pd_text_handler((struct livebox*) handler, (struct livebox_script_operators*) ops);
-       } else {
-               return livebox_set_text_handler((struct livebox*) handler, (struct livebox_script_operators*) ops);
+       int ret;
+       struct cb_info *info = data;
+       void *cbdata;
+       dynamicbox_ret_cb cb;
+       const char *pkgname = "";
+
+       cbdata = info->data;
+       cb = info->cb;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "is", &ret, &pkgname) != 2) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (cb) {
+               cb(handler, ret, cbdata);
        }
 }
 
-EAPI unsigned int dynamicbox_acquire_resource_id(struct dynamicbox *handler, int gbar, dynamicbox_ret_cb_t cb, void *data)
+static void gbar_destroy_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return (unsigned int)livebox_acquire_pd_pixmap((struct livebox*) handler, (ret_cb_t)cb, data);
+       int ret;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+       struct cb_info *info = data;
+
+       cbdata = info->data;
+       cb = info->cb;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ErrPrint("Result is NIL (may connection lost)\n");
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid parameter\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.gbar_destroyed.cb = cb;
+               handler->cbs.gbar_destroyed.data = cbdata;
        } else {
-               return (unsigned int)livebox_acquire_lb_pixmap((struct livebox*) handler, (ret_cb_t)cb, data);
+               handler->common->is_gbar_created = 0;
+               handler->common->request.gbar_destroyed = 0;
+
+               if (cb) {
+                       cb(handler, ret, cbdata);
+               }
        }
 }
 
-EAPI int dynamicbox_release_resource_id(struct dynamicbox *handler, int gbar, unsigned int resource_id)
+static void delete_cluster_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return livebox_release_pd_pixmap((struct livebox*) handler, (int)resource_id);
-       } else {
-               return livebox_release_lb_pixmap((struct livebox*) handler, (int)resource_id);
+       struct cb_info *info = data;
+       int ret;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (cb) {
+               cb(handler, ret, cbdata);
        }
 }
 
-EAPI unsigned int dynamicbox_resource_id(const struct dynamicbox *handler, int gbar)
+static void delete_category_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return (unsigned int)livebox_pd_pixmap((const struct livebox*) handler);
-       } else {
-               return (unsigned int)livebox_lb_pixmap((const struct livebox*) handler);
+       struct cb_info *info = data;
+       int ret;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (cb) {
+               cb(handler, ret, cbdata);
        }
 }
 
-EAPI void *dynamicbox_acquire_fb(struct dynamicbox *handler, int gbar)
+static int dbox_acquire_dbox_pixmap(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data)
 {
-       if (gbar) {
-               return livebox_acquire_pdfb((struct livebox*) handler);
-       } else {
-               return livebox_acquire_fb((struct livebox*) handler);
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       const char *id;
+       unsigned int cmd = CMD_DBOX_ACQUIRE_PIXMAP;
+       int ret;
+
+       id = fb_id(handler->common->dbox.fb);
+       if (!id || strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, dbox_pixmap_acquired_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
        }
+
+       return ret;
 }
 
-EAPI int dynamicbox_release_fb(void *buffer, int gbar)
+static void dbox_pixmap_acquired_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return livebox_release_pdfb(buffer);
+       int pixmap;
+       int ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+       struct cb_info *info = data;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               pixmap = 0; /* PIXMAP 0 means error */
+       } else if (packet_get(result, "ii", &pixmap, &ret) != 2) {
+               pixmap = 0;
+       }
+
+       if (ret == (int)DBOX_STATUS_ERROR_BUSY) {
+               ret = dbox_acquire_dbox_pixmap(handler, cb, cbdata);
+               DbgPrint("Busy, Try again: %d\n", ret);
+               /* Try again */
+       } else if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               if (cb) {
+                       cb(handler, pixmap, cbdata);
+               }
+
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
        } else {
-               return livebox_release_fb(buffer);
+               if (cb) {
+                       cb(handler, pixmap, cbdata);
+               }
        }
 }
 
-EAPI int dynamicbox_fb_refcnt(void *buffer, int gbar)
+static int dbox_acquire_gbar_pixmap(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data)
 {
-       if (gbar) {
-               return livebox_pdfb_refcnt(buffer);
-       } else {
-               return livebox_fb_refcnt(buffer);
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_GBAR_ACQUIRE_PIXMAP;
+       const char *id;
+       int ret;
+
+       id = fb_id(handler->common->gbar.fb);
+       if (!id || strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, gbar_pixmap_acquired_cb, cbinfo);
+       if (ret < 0) {
+               /*!
+                * \note
+                * Packet will be destroyed by master_rpc_async_request
+                */
+               dbox_destroy_cb_info(cbinfo);
        }
+
+       return ret;
 }
 
-EAPI int dynamicbox_fb_bufsz(struct dynamicbox *handler, int gbar)
+static void gbar_pixmap_acquired_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       if (gbar) {
-               return livebox_pdfb_bufsz((struct livebox*) handler);
+       int pixmap;
+       int ret;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+       struct cb_info *info = data;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               pixmap = 0; /* PIXMAP 0 means error */
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "ii", &pixmap, &ret) != 2) {
+               pixmap = 0;
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ret == (int)DBOX_STATUS_ERROR_BUSY) {
+               ret = dbox_acquire_gbar_pixmap(handler, cb, cbdata);
+               DbgPrint("Busy, Try again: %d\n", ret);
+               /* Try again */
+       } else if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               if (cb) {
+                       cb(handler, pixmap, cbdata);
+               }
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
        } else {
-               return livebox_lbfb_bufsz((struct livebox*) handler);
+               if (cb) {
+                       DbgPrint("ret: %d, pixmap: %d\n", ret, pixmap);
+                       cb(handler, pixmap, cbdata);
+               }
        }
 }
 
-EAPI int dynamicbox_is_created_by_user(struct dynamicbox *handler)
+static void pinup_done_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_is_user((struct livebox*) handler);
-}
+       int ret;
 
-EAPI int dynamicbox_set_pinup(struct dynamicbox *handler, int flag, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_set_pinup((struct livebox*) handler, flag, (ret_cb_t)cb, data);
-}
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               goto errout;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               goto errout;
+       }
 
-EAPI int dynamicbox_is_pinned_up(struct dynamicbox *handler)
-{
-       return livebox_is_pinned_up((struct livebox*) handler);
-}
+       if (ret < 0) {
+               goto errout;
+       }
 
-EAPI int dynamicbox_has_pinup(struct dynamicbox *handler)
-{
-       return livebox_has_pinup((struct livebox*) handler);
-}
+       return;
 
-EAPI int dynamicbox_set_data(struct dynamicbox *handler, void *data)
-{
-       return livebox_set_data((struct livebox*) handler, data);
-}
+errout:
+       handler->cbs.pinup.cb(handler, ret, handler->cbs.pinup.data);
+       handler->cbs.pinup.cb = NULL;
+       handler->cbs.pinup.data = NULL;
+       handler->common->request.pinup = 0;
 
-EAPI void *dynamicbox_get_data(struct dynamicbox *handler)
-{
-       return livebox_get_data((struct livebox*) handler);
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_is_exists(const char *pkgname)
+static void key_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_is_exists(pkgname);
-}
+       int ret;
 
-EAPI const char *dynamicbox_content(struct dynamicbox *handler)
-{
-       return livebox_content((struct livebox*) handler);
-}
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               return;
+       }
 
-EAPI const char *dynamicbox_title(struct dynamicbox *handler)
-{
-       return livebox_category_title((struct livebox*) handler);
-}
+       if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               return;
+       }
 
-EAPI int dynamicbox_emit_text_signal(struct dynamicbox *handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, dynamicbox_ret_cb_t cb, void *data)
-{
-       return livebox_emit_text_signal((struct livebox*) handler, emission, source, sx, sy, ex, ey, (ret_cb_t)cb, data);
-}
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               goto errout;
+       }
 
-EAPI int dynamicbox_subscribe_group(const char *cluster, const char *category)
-{
-       return livebox_subscribe_group(cluster, category);
-}
+       return;
+errout:
+       handler->cbs.key_event.cb(handler, ret, handler->cbs.key_event.data);
+       handler->cbs.key_event.cb = NULL;
+       handler->cbs.key_event.data = NULL;
+       handler->common->request.key_event = 0;
 
-EAPI int dynamicbox_unsubscribe_group(const char *cluster, const char *category)
-{
-       return livebox_unsubscribe_group(cluster, category);
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_refresh(struct dynamicbox *handler, int force)
+static void access_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_refresh((struct livebox*) handler, force);
+       int ret;
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+               return;
+       }
+
+       if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               return;
+       }
+
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               goto errout;
+       }
+
+       return;
+
+errout:
+       handler->cbs.access_event.cb(handler, ret, handler->cbs.access_event.data);
+       handler->cbs.access_event.cb = NULL;
+       handler->cbs.access_event.data = NULL;
+       handler->common->request.access_event = 0;
+
+       if (ret == (int)DBOX_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
 }
 
-EAPI int dynamicbox_refresh_group(const char *cluster, const char *category, int force)
+static int send_access_event(dynamicbox_h handler, const char *event, int x, int y, int type)
 {
-       return livebox_refresh_group(cluster, category, force);
+       struct packet *packet;
+       double timestamp;
+
+       timestamp = util_timestamp();
+
+       packet = packet_create(event, "ssdiii", handler->common->pkgname, handler->common->id, timestamp, x, y, type);
+       if (!packet) {
+               ErrPrint("Failed to build packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_async_request(handler, packet, 0, access_ret_cb, NULL);
 }
 
-EAPI int dynamicbox_set_visibility(struct dynamicbox *handler, enum dynamicbox_visible_state state)
+static int send_key_event(dynamicbox_h handler, const char *event, unsigned int keycode)
 {
-       return livebox_set_visibility((struct livebox*) handler, state);
+       struct packet *packet;
+       double timestamp;
+
+       timestamp = util_timestamp();
+       packet = packet_create(event, "ssdi", handler->common->pkgname, handler->common->id, timestamp, keycode);
+       if (!packet) {
+               ErrPrint("Failed to build packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_async_request(handler, packet, 0, key_ret_cb, NULL);
 }
 
-EAPI enum dynamicbox_visible_state dynamicbox_visibility(struct dynamicbox *handler)
+static int send_mouse_event(dynamicbox_h handler, const char *event, int x, int y)
 {
-       return livebox_visibility((struct livebox*) handler);
+       struct packet *packet;
+       double timestamp;
+
+       timestamp = util_timestamp();
+       packet = packet_create_noack(event, "ssdii", handler->common->pkgname, handler->common->id, timestamp, x, y);
+       if (!packet) {
+               ErrPrint("Failed to build param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(handler, packet);
 }
 
-EAPI int dynamicbox_viewer_set_paused(void)
+static int initialize_dynamicbox(void *disp, int use_thread)
 {
-       return livebox_client_paused();
+       int ret;
+#if defined(FLOG)
+       char filename[BUFSIZ];
+       snprintf(filename, sizeof(filename), "/tmp/%d.box.log", getpid());
+       __file_log_fp = fopen(filename, "w+t");
+       if (!__file_log_fp) {
+               __file_log_fp = fdopen(1, "w+t");
+       }
+#endif
+       ret = dynamicbox_service_init();
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               return ret;
+       }
+
+       ret = fb_init(disp);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               dynamicbox_service_fini();
+               return ret;
+       }
+
+       ret = client_init(use_thread);
+       if (ret != DBOX_STATUS_ERROR_NONE) {
+               fb_fini();
+               dynamicbox_service_fini();
+               return ret;
+       }
+
+       s_info.init_count++;
+       return ret;
 }
 
-EAPI int dynamicbox_viewer_set_resumed(void)
+static inline char *dbox_pkgname(const char *pkgname)
 {
-       return livebox_client_resumed();
+       char *dbox;
+
+       dbox = dynamicbox_service_dbox_id(pkgname);
+       if (!dbox) {
+               dbox = strdup(pkgname);
+       }
+
+       return dbox;
 }
 
-EAPI int dynamicbox_sync_fb(struct dynamicbox *handler, int gbar)
+static gboolean job_execute_cb(void *data)
 {
-       if (gbar) {
-               return livebox_sync_pd_fb((struct livebox*) handler);
-       } else {
-               return livebox_sync_lb_fb((struct livebox*) handler);
+       struct job_item *item;
+       struct dlist *l;
+
+       l = dlist_nth(s_info.job_list, 0);
+       if (!l) {
+               s_info.job_timer = 0;
+               return FALSE;
+       }
+
+       item = dlist_data(l);
+       s_info.job_list = dlist_remove(s_info.job_list, l);
+
+       if (item) {
+               item->cb(item->handle, item->ret, item->data);
+               dbox_unref(item->handle, 1);
+               free(item);
        }
+
+       return TRUE;
 }
 
-EAPI const char *dynamicbox_alt_icon(struct dynamicbox *handler)
+static int job_add(dynamicbox_h handle, dynamicbox_ret_cb job_cb, int ret, void *data)
 {
-       return livebox_alt_icon((struct livebox*) handler);
+       struct job_item *item;
+
+       if (!job_cb) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       item = malloc(sizeof(*item));
+       if (!item) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       item->handle = dbox_ref(handle);
+       item->cb = job_cb;
+       item->data = data;
+       item->ret = ret;
+
+       s_info.job_list = dlist_append(s_info.job_list, item);
+
+       if (!s_info.job_timer) {
+               s_info.job_timer = g_timeout_add(1, job_execute_cb, NULL);
+               if (!s_info.job_timer) {
+                       ErrPrint("Failed to create a job timer\n");
+               }
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-EAPI const char *dynamicbox_alt_name(struct dynamicbox *handler)
+static void new_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
 {
-       return livebox_alt_name((struct livebox*) handler);
+       int ret;
+       struct cb_info *info = data;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ret >= 0) {
+               handler->cbs.created.cb = cb;
+               handler->cbs.created.data = cbdata;
+
+               /*!
+                * \note
+                * Don't go anymore ;)
+                */
+               return;
+       } else if (cb) {
+               /*!
+                * \note
+                * It means the current instance is not created,
+                * so user has to know about this.
+                * notice it to user using "deleted" event.
+                */
+               cb(handler, ret, cbdata);
+       }
+
+       dbox_unref(handler, 1);
 }
 
-EAPI int dynamicbox_acquire_fb_lock(struct dynamicbox *handler, int gbar)
+static int create_real_instance(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data)
 {
-       return livebox_acquire_fb_lock((struct livebox*) handler, gbar);
+       struct cb_info *cbinfo;
+       struct packet *packet;
+       struct dynamicbox_common *common;
+       unsigned int cmd = CMD_NEW;
+       int ret;
+
+       common = handler->common;
+
+       packet = packet_create((const char *)&cmd, "dssssdii",
+                               common->timestamp, common->pkgname, common->content,
+                               common->cluster, common->category,
+                               common->dbox.period, common->dbox.width, common->dbox.height);
+       if (!packet) {
+               ErrPrint("Failed to create a new packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               ErrPrint("Failed to create a cbinfo\n");
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       /*!
+        * \note
+        * master_rpc_async_request will destroy the packet (decrease the refcnt)
+        * So be aware the packet object after return from master_rpc_async_request.
+        */
+       ret = master_rpc_async_request(handler, packet, 0, new_ret_cb, cbinfo);
+       if (ret < 0) {
+               ErrPrint("Failed to send a new packet\n");
+               dbox_destroy_cb_info(cbinfo);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+       handler->common->request.created = 1;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-EAPI int dynamicbox_release_fb_lock(struct dynamicbox *handler, int gbar)
+static void create_cb(dynamicbox_h handle, int ret, void *data)
 {
-       return livebox_release_fb_lock((struct livebox*) handler, gbar);
+       struct cb_info *cbinfo = data;
+
+       if (cbinfo->cb) {
+               cbinfo->cb(handle, ret, cbinfo->data);
+       }
+
+       dbox_destroy_cb_info(cbinfo);
+
+       /*!
+        * \note
+        * Forcely generate "updated" event
+        */
+       dbox_invoke_event_handler(handle, DBOX_EVENT_DBOX_UPDATED);
 }
 
-EAPI int dynamicbox_set_option(enum dynamicbox_option_type option, int state)
+static int create_fake_instance(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data)
 {
-       return livebox_set_option(option, state);
+       struct cb_info *cbinfo;
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               ErrPrint("Failed to create a cbinfo\n");
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       if (job_add(handler, create_cb, DBOX_STATUS_ERROR_NONE, cbinfo) != DBOX_STATUS_ERROR_NONE) {
+               dbox_destroy_cb_info(cbinfo);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-EAPI int dynamicbox_option(enum dynamicbox_option_type option)
+static void refresh_for_paused_updating_cb(dynamicbox_h handle, int ret, void *data)
 {
-       return livebox_option(option);
+       if (handle->paused_updating == 0) {
+               DbgPrint("Paused updates are cleared\n");
+               return;
+       }
+
+       DbgPrint("Pending updates are found\n");
+       dbox_invoke_event_handler(handle, DBOX_EVENT_DBOX_UPDATED);
 }
 
-EAPI int dynamicbox_set_auto_launch_handler(int (*dbox_launch_handler)(struct dynamicbox *handler, const char *appid, void *data), void *data)
+static int dbox_set_visibility(dynamicbox_h handler, enum dynamicbox_visible_state state)
 {
-       typedef int (*launch_handler)(struct livebox *handler, const char *appid, void *data);
+       struct packet *packet;
+       int need_to_add_job = 0;
+       unsigned int cmd = CMD_CHANGE_VISIBILITY;
+       int ret;
+
+       if (handler->common->visible != DBOX_SHOW && state == DBOX_SHOW) {
+               need_to_add_job = !!handler->paused_updating;
+       } else if (handler->common->visible == DBOX_SHOW && state != DBOX_SHOW) {
+               if (!!dbox_find_dbox_in_show(handler->common)) {
+                       return DBOX_STATUS_ERROR_NONE;
+               }
+       } else if (handler->common->visible == DBOX_SHOW && state == DBOX_SHOW && handler->paused_updating) {
+               if (job_add(handler, refresh_for_paused_updating_cb, DBOX_STATUS_ERROR_NONE, NULL) < 0) {
+                       ErrPrint("Unable to add a new job for refreshing box\n");
+               }
+
+               return DBOX_STATUS_ERROR_NONE;
+       } else {
+               /*!
+                * \brief
+                * No need to send this to the master
+                */
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       packet = packet_create_noack((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, (int)state);
+       if (!packet) {
+               ErrPrint("Failed to create a packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_request_only(handler, packet);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               DbgPrint("[%s] visibility is changed 0x[%x]\n", handler->common->pkgname, state);
+               handler->common->visible = state;
+
+               if (need_to_add_job) {
+                       if (job_add(handler, refresh_for_paused_updating_cb, DBOX_STATUS_ERROR_NONE, NULL) < 0) {
+                               ErrPrint("Unable to add a new job for refreshing box\n");
+                       }
+               }
+       }
+
+       return ret;
+}
+
+static void dbox_update_visibility(struct dynamicbox_common *old_common)
+{
+       dynamicbox_h item;
+
+       item = dbox_find_dbox_in_show(old_common);
+       if (!item) {
+               item = dbox_get_dbox_nth(old_common, 0);
+               if (item) {
+                       dbox_set_visibility(item, DBOX_HIDE_WITH_PAUSE);
+               } else {
+                       ErrPrint("Unable to get the valid handle from common handler\n");
+               }
+       } else {
+               dbox_set_visibility(item, DBOX_SHOW);
+       }
+}
+
+/*!
+ * \note
+ * The second parameter should be the "return value",
+ * But in this case, we will use it for "type of deleting instance".
+ */
+static void job_del_cb(dynamicbox_h handle, int type, void *data)
+{
+       struct cb_info *cbinfo = data;
+       dynamicbox_ret_cb cb;
+
+       if (handle->visible == DBOX_SHOW) {
+               dbox_update_visibility(handle->common);
+       }
+
+       cb = cbinfo->cb;
+       data = cbinfo->data;
+       dbox_destroy_cb_info(cbinfo);
+
+       if (handle->common->state != DBOX_STATE_CREATE) {
+               DbgPrint("[%s] %d\n", handle->common->pkgname, handle->refcnt);
+               if (cb) {
+                       cb(handle, DBOX_STATUS_ERROR_NONE, data);
+               }
+
+               return;
+       }
+
+       if (handle->common->refcnt == 1) {
+               handle->common->delete_type = type;
+               handle->common->state = DBOX_STATE_DELETE;
+
+               if (!handle->common->id) {
+                       /*!
+                        * \note
+                        * The id is not determined yet.
+                        * It means a user didn't receive created event yet.
+                        * Then just stop to delete procedure from here.
+                        * Because the "created" event handle will release this.
+                        * By the way, if the user adds any callback for getting return status of this,
+                        * call it at here.
+                        */
+                       if (cb) {
+                               cb(handle, DBOX_STATUS_ERROR_NONE, data);
+                       }
+               }
+
+               DbgPrint("Send delete request\n");
+               dbox_send_delete(handle, type, cb, data);
+       } else {
+               if (cb) {
+                       cb(handle, DBOX_STATUS_ERROR_NONE, data);
+               }
+
+               DbgPrint("Before unref: %d\n", handle->common->refcnt);
+               dbox_unref(handle, 1);
+       }
+}
+
+static void resize_job_cb(dynamicbox_h handler, int ret, void *data)
+{
+       struct cb_info *info = data;
+
+       if (info->cb) {
+               info->cb(handler, ret, info->data);
+       }
+
+       free(info);
+
+       /*!
+        * \note
+        * Forcely update the box
+        */
+       dbox_invoke_event_handler(handler, DBOX_EVENT_DBOX_UPDATED);
+}
+
+static void turn_off_gbar_destroyed_flag_cb(dynamicbox_h handler, int ret, void *data)
+{
+       if (handler->common->request.gbar_destroyed) {
+               dynamicbox_ret_cb cb;
+               void *data;
+
+               DbgPrint("gbar_destroyed request is canceled\n");
+               handler->common->request.gbar_destroyed = 0;
+               cb = handler->cbs.gbar_destroyed.cb;
+               data = handler->cbs.gbar_destroyed.data;
+               handler->cbs.gbar_destroyed.cb = NULL;
+               handler->cbs.gbar_destroyed.data = NULL;
+
+               if (cb) {
+                       cb(handler, ret, data);
+               }
+       }
+}
+
+static void turn_off_gbar_created_flag_cb(dynamicbox_h handler, int ret, void *data)
+{
+       if (handler->common->request.gbar_created) {
+               dynamicbox_ret_cb cb;
+               void *data;
+
+               DbgPrint("gbar_created request is canceled\n");
+               handler->common->request.gbar_created = 0;
+               cb = handler->cbs.gbar_created.cb;
+               data = handler->cbs.gbar_created.data;
+               handler->cbs.gbar_created.cb = NULL;
+               handler->cbs.gbar_created.data = NULL;
+
+               if (cb) {
+                       cb(handler, ret, data);
+               }
+       }
+}
+
+EAPI int dynamicbox_init(void *disp, int prevent_overwrite, double event_filter, int use_thread)
+{
+       if (s_info.init_count > 0) {
+               s_info.init_count++;
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       /*!
+        * \note
+        * Some application doesn't want to use the environment value.
+        * So set them using arguments.
+        */
+       s_info.prevent_overwrite = prevent_overwrite;
+       conf_set_event_filter(event_filter);
+
+       return initialize_dynamicbox(disp, use_thread);
+}
+
+EAPI int dynamicbox_fini(void)
+{
+       if (s_info.init_count <= 0) {
+               ErrPrint("Doesn't initialized\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       s_info.init_count--;
+       if (s_info.init_count > 0) {
+               ErrPrint("init count : %d\n", s_info.init_count);
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       client_fini();
+       fb_fini();
+       dynamicbox_service_fini();
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI dynamicbox_h dynamicbox_add(const char *pkgname, const char *content, const char *cluster, const char *category, double period, enum dynamicbox_size_type type, dynamicbox_ret_cb cb, void *data)
+{
+       char *dboxid;
+       dynamicbox_h handler;
+       int w = 0;
+       int h = 0;
+
+       if (!pkgname || !cluster || !category) {
+               ErrPrint("Invalid arguments: pkgname[%p], cluster[%p], category[%p]\n",
+                                                               pkgname, cluster, category);
+               return NULL;
+       }
+
+       dboxid = dbox_pkgname(pkgname);
+       if (!dboxid) {
+               ErrPrint("Invalid package: %s\n", pkgname);
+               return NULL;
+       }
+
+       if (dynamicbox_service_is_enabled(dboxid) == 0) {
+               DbgPrint("Livebox [%s](%s) is disabled package\n", dboxid, pkgname);
+               free(dboxid);
+               return NULL;
+       }
+
+       if (type != DBOX_SIZE_TYPE_UNKNOWN) {
+               (void)dynamicbox_service_get_size(type, &w, &h);
+       }
+
+       handler = calloc(1, sizeof(*handler));
+       if (!handler) {
+               ErrPrint("Error: %s\n", strerror(errno));
+               free(dboxid);
+               return NULL;
+       }
+
+       if (!cb) {
+               cb = default_create_cb;
+       }
+
+       handler->common = dbox_find_sharable_common_handle(dboxid, content, w, h, cluster, category);
+       if (!handler->common) {
+               handler->common = dbox_create_common_handle(handler, dboxid, cluster, category);
+               free(dboxid);
+               if (!handler->common) {
+                       ErrPrint("Failed to find common handle\n");
+                       free(handler);
+                       return NULL;
+               }
+
+               if (!content || !strlen(content)) {
+                       char *pc;
+                       /*!
+                        * \note
+                        * I know the content should not be modified. use it temporarly without "const"
+                        */
+                       pc = dynamicbox_service_content(handler->common->pkgname);
+                       dbox_set_content(handler->common, pc);
+                       free(pc);
+               } else {
+                       dbox_set_content(handler->common, content);
+               }
+
+               dbox_set_period(handler->common, period);
+               dbox_set_size(handler->common, w, h);
+               dbox_common_ref(handler->common, handler);
+
+               if (create_real_instance(handler, cb, data) < 0) {
+                       if (dbox_common_unref(handler->common, handler) == 0) {
+                               /*!
+                                * Delete common
+                                */
+                               dbox_destroy_common_handle(handler->common);
+                               handler->common = NULL;
+                       }
+                       free(handler);
+                       return NULL;
+               }
+       } else {
+               free(dboxid);
+
+               dbox_common_ref(handler->common, handler);
+
+               if (handler->common->request.created) {
+                       /*!
+                        * If a box is in creating, wait its result too
+                        */
+                       handler->cbs.created.cb = cb;
+                       handler->cbs.created.data = data;
+               } else {
+                       /*!
+                        * or fire the fake created_event
+                        */
+                       if (create_fake_instance(handler, cb, data) < 0) {
+                               if (dbox_common_unref(handler->common, handler) == 0) {
+                                       /*!
+                                        * Delete common
+                                        */
+                                       dbox_destroy_common_handle(handler->common);
+                               }
+                               free(handler);
+                               return NULL;
+                       }
+               }
+       }
+
+       handler->visible = DBOX_SHOW;
+       handler->state = DBOX_STATE_CREATE;
+       handler = dbox_ref(handler);
+
+       if (handler->common->visible != DBOX_SHOW) {
+               dbox_set_visibility(handler, DBOX_SHOW);
+       }
+
+       return handler;
+}
+
+EAPI double dynamicbox_period(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return 0.0f;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return 0.0f;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Hnalder is not valid\n");
+               return 0.0f;
+       }
+
+       return handler->common->dbox.period;
+}
+
+EAPI int dynamicbox_set_period(dynamicbox_h handler, double period, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_SET_PERIOD;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.period_changed) {
+               ErrPrint("Previous request for changing period is not finished\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (!handler->common->is_user) {
+               ErrPrint("CA Livebox is not able to change the period\n");
+               return DBOX_STATUS_ERROR_PERMISSION_DENIED;
+       }
+
+       if (handler->common->dbox.period == period) {
+               DbgPrint("No changes\n");
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       packet = packet_create((const char *)&cmd, "ssd", handler->common->pkgname, handler->common->id, period);
+       if (!packet) {
+               ErrPrint("Failed to build a packet %s\n", handler->common->pkgname);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_period_changed_cb;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, period_ret_cb, NULL);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.period_changed.cb = cb;
+               handler->cbs.period_changed.data = data;
+               handler->common->request.period_changed = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_del(dynamicbox_h handler, enum dynamicbox_delete_type type, dynamicbox_ret_cb cb, void *data)
+{
+       struct cb_info *cbinfo;
+
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is already deleted\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       handler->state = DBOX_STATE_DELETE;
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               ErrPrint("Failed to create a cbinfo\n");
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       if (job_add(handler, job_del_cb, type, cbinfo) != DBOX_STATUS_ERROR_NONE) {
+               ErrPrint("Failed to add a new job\n");
+               dbox_destroy_cb_info(cbinfo);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int dynamicbox_set_fault_handler(dynamicbox_fault_handler_cb dbox_cb, void *data)
+{
+       if (!dbox_cb) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return dbox_add_fault_handler(dbox_cb, data);
+}
+
+EAPI void *dynamicbox_unset_fault_handler(dynamicbox_fault_handler_cb dbox_cb)
+{
+       if (!dbox_cb) {
+               return NULL;
+       }
+
+       return dbox_remove_fault_handler(dbox_cb);
+}
+
+EAPI int dynamicbox_set_event_handler(dynamicbox_event_handler_cb dbox_cb, void *data)
+{
+       if (!dbox_cb) {
+               ErrPrint("Invalid argument dbox_cb is nil\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return dbox_add_event_handler(dbox_cb, data);
+}
+
+EAPI void *dynamicbox_unset_event_handler(dynamicbox_event_handler_cb dbox_cb)
+{
+       if (!dbox_cb) {
+               return NULL;
+       }
+
+       return dbox_remove_event_handler(dbox_cb);
+}
+
+EAPI int dynamicbox_set_update_mode(dynamicbox_h handler, int active_update, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_UPDATE_MODE;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is Invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is Invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is Invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.update_mode) {
+               ErrPrint("Previous update_mode cb is not finished yet\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (handler->common->is_active_update == active_update) {
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       if (!handler->common->is_user) {
+               return DBOX_STATUS_ERROR_PERMISSION_DENIED;
+       }
+
+       packet = packet_create((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, active_update);
+       if (!packet) {
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_update_mode_cb;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, update_mode_cb, NULL);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.update_mode.cb = cb;
+               handler->cbs.update_mode.data = data;
+               handler->common->request.update_mode = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_is_active_update(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is Invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is Invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return handler->common->is_active_update;
+}
+
+EAPI int dynamicbox_resize(dynamicbox_h handler, enum dynamicbox_size_type type, dynamicbox_ret_cb cb, void *data)
+{
+       struct dynamicbox_common *common;
+       int w;
+       int h;
+       int ret;
+
+       /*!
+        * \TODO
+        * If this handle is host instance or link instance,
+        * Create a new instance or find another linkable instance.
+        */
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /*!
+        * \note
+        * resize operation should be separated by each handler.
+        * If a handler is resizing, the other handler can request resize too.
+        * So we should not use the common->request.size_changed flag.
+        */
+       if (handler->cbs.size_changed.cb) {
+               ErrPrint("Previous resize request is not finished yet\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (dynamicbox_service_get_size(type, &w, &h) != 0) {
+               ErrPrint("Invalid size type\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->dbox.width == w && handler->common->dbox.height == h) {
+               DbgPrint("No changes\n");
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       if (!handler->common->is_user) {
+               ErrPrint("CA Livebox is not able to be resized\n");
+               return DBOX_STATUS_ERROR_PERMISSION_DENIED;
+       }
+
+       if (handler->common->refcnt <= 1) {
+               struct packet *packet;
+               unsigned int cmd = CMD_RESIZE;
+
+               /* Only 1 instance */
+               packet = packet_create((const char *)&cmd, "ssii", handler->common->pkgname, handler->common->id, w, h);
+               if (!packet) {
+                       ErrPrint("Failed to build param\n");
+                       return DBOX_STATUS_ERROR_FAULT;
+               }
+
+               if (!cb) {
+                       cb = default_dbox_size_changed_cb;
+               }
+
+               ret = master_rpc_async_request(handler, packet, 0, resize_cb, NULL);
+               if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+                       handler->cbs.size_changed.cb = cb;
+                       handler->cbs.size_changed.data = data;
+                       handler->common->request.size_changed = 1;
+               }
+       } else {
+               common = dbox_find_sharable_common_handle(handler->common->pkgname, handler->common->content, w, h, handler->common->cluster, handler->common->category);
+               if (!common) {
+                       struct dynamicbox_common *old_common;
+                       /*!
+                        * \note
+                        * If the common handler is in resizing,
+                        * if user tries to resize a hander, then simply create new one even if the requested size is same with this.
+
+                       if (handler->common->request.size_changed) {
+                       }
+
+                        */
+
+                       old_common = handler->common;
+
+                       common = dbox_create_common_handle(handler, old_common->pkgname, old_common->cluster, old_common->category);
+                       if (!common) {
+                               ErrPrint("Failed to create common handle\n");
+                               return DBOX_STATUS_ERROR_FAULT;
+                       }
+
+                       dbox_set_size(common, w, h);
+                       dbox_set_content(common, old_common->content);
+                       dbox_set_period(common, old_common->dbox.period);
+
+                       /*!
+                        * \note
+                        * Disconnecting from old one.
+                        */
+                       if (dbox_common_unref(old_common, handler) == 0) {
+                               /*!
+                                * \note
+                                * Impossible
+                                */
+                               ErrPrint("Common has no associated handler\n");
+                       }
+
+                       dbox_common_ref(common, handler);
+
+                       /*!
+                        * Connect to a new one
+                        */
+                       handler->common = common;
+
+                       /*!
+                        * \TODO
+                        * Need to care, if it fails to create a common handle,
+                        * the resize operation will be failed.
+                        * in that case, we should reuse the old common handle
+                        */
+                       ret = create_real_instance(handler, cb, data);
+                       if (ret < 0) {
+                               dbox_common_unref(common, handler);
+                               dbox_destroy_common_handle(common);
+
+                               dbox_common_ref(old_common, handler);
+                               handler->common = old_common;
+                       } else {
+                               /*!
+                                * In this case, we should update visibility of old_common's dynamicboxes
+                                */
+                               if (handler->visible == DBOX_SHOW) {
+                                       dbox_update_visibility(old_common);
+                               }
+                       }
+               } else {
+                       struct cb_info *cbinfo;
+
+                       cbinfo = dbox_create_cb_info(cb, data);
+                       if (!cbinfo) {
+                               ErrPrint("Failed to create a cbinfo\n");
+                               ret = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+                       } else {
+                               ret = job_add(handler, resize_job_cb, DBOX_STATUS_ERROR_NONE, cbinfo);
+                               if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+                                       struct dynamicbox_common *old_common;
+
+                                       old_common = handler->common;
+
+                                       if (dbox_common_unref(handler->common, handler) == 0) {
+                                               ErrPrint("Old common has no associated handler\n");
+                                       }
+
+                                       dbox_common_ref(common, handler);
+                                       handler->common = common;
+
+                                       if (handler->visible == DBOX_SHOW) {
+                                               dbox_update_visibility(old_common); /* To update visibility: Show --> Paused */
+                                               dbox_update_visibility(common); /* To update visibility: Paused --> Show */
+                                       }
+                               } else {
+                                       dbox_destroy_cb_info(cbinfo);
+                               }
+                       }
+               }
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_click(dynamicbox_h handler, double x, double y)
+{
+       struct packet *packet;
+       double timestamp;
+       unsigned int cmd = CMD_CLICKED;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->dbox.auto_launch) {
+               if (s_info.launch.handler) {
+                       ret = s_info.launch.handler(handler, handler->common->dbox.auto_launch, s_info.launch.data);
+                       if (ret < 0) {
+                               ErrPrint("launch handler app %s (%d)\n", handler->common->dbox.auto_launch, ret);
+                       }
+               }
+       }
+
+       timestamp = util_timestamp();
+       DbgPrint("CLICKED: %lf\n", timestamp);
+
+       packet = packet_create_noack((const char *)&cmd, "sssddd", handler->common->pkgname, handler->common->id, "clicked", timestamp, x, y);
+       if (!packet) {
+               ErrPrint("Failed to build param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_request_only(handler, packet);
+       return ret;
+}
+
+EAPI int dynamicbox_has_glance_bar(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return !!handler->common->gbar.fb;
+}
+
+EAPI int dynamicbox_glance_bar_is_created(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->gbar.fb || !handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return handler->common->is_gbar_created;
+}
+
+EAPI int dynamicbox_create_glance_bar(dynamicbox_h handler, double x, double y, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_CREATE_GBAR;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->gbar.fb || !handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /*!
+        * \note
+        * Only one handler can have a GBAR
+        */
+       if (handler->common->is_gbar_created) {
+               DbgPrint("GBAR is already created\n");
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       if (handler->common->request.gbar_created) {
+               ErrPrint("Previous request is not completed yet\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       /*!
+        * \note
+        * Turn off the gbar_destroyed request flag
+        */
+       if (handler->common->request.gbar_destroyed) {
+               if (job_add(handler, turn_off_gbar_destroyed_flag_cb, DBOX_STATUS_ERROR_CANCEL, NULL) < 0) {
+                       ErrPrint("Failed to add gbar_destroyed job\n");
+               }
+       }
+
+       packet = packet_create((const char *)&cmd, "ssdd", handler->common->pkgname, handler->common->id, x, y);
+       if (!packet) {
+               ErrPrint("Failed to build param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_gbar_created_cb;
+       }
+
+       DbgPrint("PERF_DBOX\n");
+       ret = master_rpc_async_request(handler, packet, 0, gbar_create_cb, NULL);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.gbar_created.cb = cb;
+               handler->cbs.gbar_created.data = data;
+               handler->common->request.gbar_created = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_move_glance_bar(dynamicbox_h handler, double x, double y)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_GBAR_MOVE;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->gbar.fb || !handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->is_gbar_created) {
+               ErrPrint("GBAR is not created\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create_noack((const char *)&cmd, "ssdd", handler->common->pkgname, handler->common->id, x, y);
+       if (!packet) {
+               ErrPrint("Failed to build param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(handler, packet);
+}
+
+EAPI int dynamicbox_activate(const char *pkgname, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_ACTIVATE_PACKAGE;
+       int ret;
+
+       if (!pkgname) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create((const char *)&cmd, "s", pkgname);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               ErrPrint("Unable to create cbinfo\n");
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(NULL, packet, 0, activated_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_destroy_glance_bar(dynamicbox_h handler, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_DESTROY_GBAR;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->gbar.fb || !handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       /*!
+        * \FIXME
+        * Replace the callback check code.
+        * Use the flag instead of callback.
+        * the flag should be in the ADT "common"
+        */
+       if (!handler->common->is_gbar_created && !handler->common->request.gbar_created) {
+               ErrPrint("GBAR is not created\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.gbar_destroyed) {
+               ErrPrint("GBAR destroy request is already sent\n");
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       /*!
+        * \note
+        * Disable the gbar_created request flag
+        */
+       if (handler->common->request.gbar_created) {
+               if (job_add(handler, turn_off_gbar_created_flag_cb, DBOX_STATUS_ERROR_CANCEL, NULL) < 0) {
+                       ErrPrint("Failed to add a new job\n");
+               }
+       }
+
+       DbgPrint("[%s]\n", handler->common->pkgname);
+
+       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_gbar_destroyed_cb;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, gbar_destroy_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
+       } else {
+               handler->common->request.gbar_destroyed = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_feed_access_event(dynamicbox_h handler, enum dynamicbox_access_event_type type, struct dynamicbox_access_event_info *info, dynamicbox_ret_cb cb, void *data)
+{
+       int w = 1;
+       int h = 1;
+       unsigned int cmd;
+       int ret = 0;    /* re-used for sending event type */
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.access_event) {
+               ErrPrint("Previous access event is not yet done\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (type & DBOX_ACCESS_EVENT_GBAR_MASK) {
+               if (!handler->common->is_gbar_created) {
+                       ErrPrint("GBAR is not created\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               w = handler->common->gbar.width;
+               h = handler->common->gbar.height;
+
+               switch (type & ~(DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_DBOX_MASK)) {
+               case DBOX_ACCESS_EVENT_HIGHLIGHT:
+                       cmd = CMD_GBAR_ACCESS_HL;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_ACTIVATE:
+                       cmd = CMD_GBAR_ACCESS_ACTIVATE;
+                       break;
+               case DBOX_ACCESS_EVENT_ACTION:
+                       cmd = CMD_GBAR_ACCESS_ACTION;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_SCROLL:
+                       cmd = CMD_GBAR_ACCESS_SCROLL;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_VALUE_CHANGE:
+                       cmd = CMD_GBAR_ACCESS_VALUE_CHANGE;
+                       break;
+               case DBOX_ACCESS_EVENT_MOUSE:
+                       cmd = CMD_GBAR_ACCESS_MOUSE;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_BACK:
+                       cmd = CMD_GBAR_ACCESS_BACK;
+                       break;
+               case DBOX_ACCESS_EVENT_OVER:
+                       cmd = CMD_GBAR_ACCESS_OVER;
+                       break;
+               case DBOX_ACCESS_EVENT_READ:
+                       cmd = CMD_GBAR_ACCESS_READ;
+                       break;
+               case DBOX_ACCESS_EVENT_ENABLE:
+                       cmd = CMD_GBAR_ACCESS_ENABLE;
+                       ret = info->type;
+                       break;
+               default:
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+       } else if (type & DBOX_ACCESS_EVENT_DBOX_MASK) {
+               w = handler->common->dbox.width;
+               h = handler->common->dbox.height;
+               switch (type & ~(DBOX_ACCESS_EVENT_GBAR_MASK | DBOX_ACCESS_EVENT_DBOX_MASK)) {
+               case DBOX_ACCESS_EVENT_HIGHLIGHT:
+                       cmd = CMD_DBOX_ACCESS_HL;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_ACTIVATE:
+                       cmd = CMD_DBOX_ACCESS_ACTIVATE;
+                       break;
+               case DBOX_ACCESS_EVENT_ACTION:
+                       cmd = CMD_DBOX_ACCESS_ACTION;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_SCROLL:
+                       cmd = CMD_DBOX_ACCESS_SCROLL;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_VALUE_CHANGE:
+                       cmd = CMD_DBOX_ACCESS_VALUE_CHANGE;
+                       break;
+               case DBOX_ACCESS_EVENT_MOUSE:
+                       cmd = CMD_DBOX_ACCESS_MOUSE;
+                       ret = (int)info->type;
+                       break;
+               case DBOX_ACCESS_EVENT_BACK:
+                       cmd = CMD_DBOX_ACCESS_BACK;
+                       break;
+               case DBOX_ACCESS_EVENT_OVER:
+                       cmd = CMD_DBOX_ACCESS_OVER;
+                       break;
+               case DBOX_ACCESS_EVENT_READ:
+                       cmd = CMD_DBOX_ACCESS_READ;
+                       break;
+               case DBOX_ACCESS_EVENT_ENABLE:
+                       cmd = CMD_DBOX_ACCESS_ENABLE;
+                       ret = info->type;
+                       break;
+               default:
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+       } else {
+               ErrPrint("Invalid event type\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!cb) {
+               cb = default_access_event_cb;
+       }
+
+       ret = send_access_event(handler, (const char *)&cmd, info->x * w, info->y * h, ret);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.access_event.cb = cb;
+               handler->cbs.access_event.data = data;
+               handler->common->request.access_event = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_feed_mouse_event(dynamicbox_h handler, enum dynamicbox_mouse_event_type type, struct dynamicbox_mouse_event_info *info)
+{
+       int w = 1;
+       int h = 1;
+       unsigned int cmd;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!(type & DBOX_MOUSE_EVENT_MASK)) {
+               ErrPrint("Invalid content event is used\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (type & DBOX_MOUSE_EVENT_GBAR_MASK) {
+               int flag = 1;
+
+               if (!handler->common->is_gbar_created) {
+                       ErrPrint("GBAR is not created\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common->gbar.fb) {
+                       ErrPrint("Handler is not valid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (type & DBOX_MOUSE_EVENT_MOVE) {
+                       if (fabs(info->x - handler->common->gbar.x) < conf_event_filter() && fabs(info->y - handler->common->gbar.y) < conf_event_filter()) {
+                               return DBOX_STATUS_ERROR_BUSY;
+                       }
+               } else if (type & DBOX_MOUSE_EVENT_SET) {
+                       flag = 0;
+               }
+
+               w = handler->common->gbar.width;
+               h = handler->common->gbar.height;
+               if (flag) {
+                       handler->common->gbar.x = info->x;
+                       handler->common->gbar.y = info->y;
+               }
+
+               switch ((type & ~(DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_DBOX_MASK))) {
+               case DBOX_MOUSE_EVENT_ENTER | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_ENTER;
+                       break;
+               case DBOX_MOUSE_EVENT_LEAVE | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_LEAVE;
+                       break;
+               case DBOX_MOUSE_EVENT_UP | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_UP;
+                       break;
+               case DBOX_MOUSE_EVENT_DOWN | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_DOWN;
+                       break;
+               case DBOX_MOUSE_EVENT_MOVE | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_MOVE;
+                       break;
+               case DBOX_MOUSE_EVENT_SET | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_SET;
+                       break;
+               case DBOX_MOUSE_EVENT_UNSET | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_UNSET;
+                       break;
+               case DBOX_MOUSE_EVENT_ON_SCROLL | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_ON_SCROLL;
+                       break;
+               case DBOX_MOUSE_EVENT_ON_HOLD | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_ON_HOLD;
+                       break;
+               case DBOX_MOUSE_EVENT_OFF_SCROLL | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_OFF_SCROLL;
+                       break;
+               case DBOX_MOUSE_EVENT_OFF_HOLD | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_GBAR_MOUSE_OFF_HOLD;
+                       break;
+               default:
+                       ErrPrint("Invalid event type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+       } else if (type & DBOX_MOUSE_EVENT_DBOX_MASK) {
+               int flag = 1;
+
+               if (!handler->common->dbox.fb) {
+                       ErrPrint("Handler is not valid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (type & DBOX_MOUSE_EVENT_MOVE) {
+                       if (fabs(info->x - handler->common->dbox.x) < conf_event_filter() && fabs(info->y - handler->common->dbox.y) < conf_event_filter()) {
+                               return DBOX_STATUS_ERROR_BUSY;
+                       }
+               } else if (type & DBOX_MOUSE_EVENT_SET) {
+                       flag = 0;
+               }
+
+               w = handler->common->dbox.width;
+               h = handler->common->dbox.height;
+               if (flag) {
+                       handler->common->dbox.x = info->x;
+                       handler->common->dbox.y = info->y;
+               }
+
+               switch ((type & ~(DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_DBOX_MASK))) {
+               case DBOX_MOUSE_EVENT_ENTER | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_ENTER;
+                       break;
+               case DBOX_MOUSE_EVENT_LEAVE | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_LEAVE;
+                       break;
+               case DBOX_MOUSE_EVENT_UP | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_UP;
+                       break;
+               case DBOX_MOUSE_EVENT_DOWN | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_DOWN;
+                       break;
+               case DBOX_MOUSE_EVENT_MOVE | DBOX_MOUSE_EVENT_MASK:
+                       if (!handler->common->dbox.mouse_event) {
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+                       cmd = CMD_DBOX_MOUSE_MOVE;
+                       break;
+               case DBOX_MOUSE_EVENT_SET | DBOX_MOUSE_EVENT_MASK:
+                       if (!handler->common->dbox.mouse_event) {
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+                       cmd = CMD_DBOX_MOUSE_SET;
+                       break;
+               case DBOX_MOUSE_EVENT_UNSET | DBOX_MOUSE_EVENT_MASK:
+                       if (!handler->common->dbox.mouse_event) {
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+                       cmd = CMD_DBOX_MOUSE_UNSET;
+                       break;
+               case DBOX_MOUSE_EVENT_ON_SCROLL | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_ON_SCROLL;
+                       break;
+               case DBOX_MOUSE_EVENT_ON_HOLD | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_ON_HOLD;
+                       break;
+               case DBOX_MOUSE_EVENT_OFF_SCROLL | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_OFF_SCROLL;
+                       break;
+               case DBOX_MOUSE_EVENT_OFF_HOLD | DBOX_MOUSE_EVENT_MASK:
+                       cmd = CMD_DBOX_MOUSE_OFF_HOLD;
+                       break;
+               default:
+                       ErrPrint("Invalid event type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+       } else {
+               ErrPrint("Invalid event type\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return send_mouse_event(handler, (const char *)&cmd, info->x * w, info->y * h);
+}
+
+EAPI int dynamicbox_feed_key_event(dynamicbox_h handler, enum dynamicbox_key_event_type type, struct dynamicbox_key_event_info *info, dynamicbox_ret_cb cb, void *data)
+{
+       int ret;
+       unsigned int cmd;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!(type & DBOX_KEY_EVENT_MASK)) {
+               ErrPrint("Invalid key event is used\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.key_event) {
+               ErrPrint("Previous key event is not completed yet\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (type & DBOX_MOUSE_EVENT_GBAR_MASK) {
+               if (!handler->common->is_gbar_created) {
+                       ErrPrint("GBAR is not created\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common->gbar.fb) {
+                       ErrPrint("Handler is not valid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (type & DBOX_KEY_EVENT_DOWN) {
+                       /*!
+                        * \TODO
+                        * filtering the reproduced events if it is too fast
+                        */
+               } else if (type & DBOX_KEY_EVENT_SET) {
+                       /*!
+                        * \TODO
+                        * What can I do for this case?
+                        */
+               }
+
+               /*!
+                * Must be short than 29 bytes.
+                */
+               switch ((type & ~(DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_DBOX_MASK))) {
+               case DBOX_KEY_EVENT_FOCUS_IN | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_FOCUS_IN;
+                       break;
+               case DBOX_KEY_EVENT_FOCUS_OUT | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_FOCUS_OUT;
+                       break;
+               case DBOX_KEY_EVENT_UP | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_UP;
+                       break;
+               case DBOX_KEY_EVENT_DOWN | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_DOWN;
+                       break;
+               case DBOX_KEY_EVENT_SET | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_SET;
+                       break;
+               case DBOX_KEY_EVENT_UNSET | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_GBAR_KEY_UNSET;
+                       break;
+               default:
+                       ErrPrint("Invalid event type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+       } else if (type & DBOX_MOUSE_EVENT_DBOX_MASK) {
+               if (!handler->common->dbox.fb) {
+                       ErrPrint("Handler is not valid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (type & DBOX_KEY_EVENT_DOWN) {
+                       /*!
+                        * \TODO
+                        * filtering the reproduced events if it is too fast
+                        */
+               } else if (type & DBOX_KEY_EVENT_SET) {
+                       /*!
+                        * What can I do for this case?
+                        */
+               }
+
+               switch ((type & ~(DBOX_MOUSE_EVENT_GBAR_MASK | DBOX_MOUSE_EVENT_DBOX_MASK))) {
+               case DBOX_KEY_EVENT_FOCUS_IN | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_FOCUS_IN;
+                       break;
+               case DBOX_KEY_EVENT_FOCUS_OUT | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_FOCUS_OUT;
+                       break;
+               case DBOX_KEY_EVENT_UP | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_UP;
+                       break;
+               case DBOX_KEY_EVENT_DOWN | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_DOWN;
+                       break;
+               case DBOX_KEY_EVENT_SET | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_SET;
+                       break;
+               case DBOX_KEY_EVENT_UNSET | DBOX_KEY_EVENT_MASK:
+                       cmd = CMD_DBOX_KEY_UNSET;
+                       break;
+               default:
+                       ErrPrint("Invalid event type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+       } else {
+               ErrPrint("Invalid event type\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!cb) {
+               cb = default_key_event_cb;
+       }
+
+       ret = send_key_event(handler, (const char *)&cmd, info->keycode);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.key_event.cb = cb;
+               handler->cbs.key_event.data = data;
+               handler->common->request.key_event = 1;
+       }
+
+       return ret;
+}
+
+EAPI const char *dynamicbox_filename(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return NULL;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return NULL;
+       }
+
+       if (handler->common->filename) {
+               return handler->common->filename;
+       }
+
+       /* Oooops */
+       return util_uri_to_path(handler->common->id);
+}
+
+EAPI int dynamicbox_get_glance_bar_size(dynamicbox_h handler, int *w, int *h)
+{
+       int _w;
+       int _h;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!w) {
+               w = &_w;
+       }
+       if (!h) {
+               h = &_h;
+       }
+
+       if (!handler->common->is_gbar_created) {
+               *w = handler->common->gbar.default_width;
+               *h = handler->common->gbar.default_height;
+       } else {
+               *w = handler->common->gbar.width;
+               *h = handler->common->gbar.height;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI enum dynamicbox_size_type dynamicbox_size(dynamicbox_h handler)
+{
+       int w;
+       int h;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_SIZE_TYPE_UNKNOWN;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_SIZE_TYPE_UNKNOWN;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_SIZE_TYPE_UNKNOWN;
+       }
+
+       w = handler->common->dbox.width;
+       h = handler->common->dbox.height;
+
+       switch (handler->common->dbox.type) {
+       case DBOX_TYPE_BUFFER:
+       case DBOX_TYPE_SCRIPT:
+               if (!fb_is_created(handler->common->dbox.fb)) {
+                       w = 0;
+                       h = 0;
+               }
+               break;
+       default:
+               break;
+       }
+
+       return dynamicbox_service_size_type(w, h);
+}
+
+EAPI int dynamicbox_set_group(dynamicbox_h handler, const char *cluster, const char *category, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_CHANGE_GROUP;
+       int ret;
+
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!cluster || !category || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.group_changed) {
+               ErrPrint("Previous group changing request is not finished yet\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (!handler->common->is_user) {
+               ErrPrint("CA Livebox is not able to change the group\n");
+               return DBOX_STATUS_ERROR_PERMISSION_DENIED;
+       }
+
+       if (!strcmp(handler->common->cluster, cluster) && !strcmp(handler->common->category, category)) {
+               DbgPrint("No changes\n");
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       packet = packet_create((const char *)&cmd, "ssss", handler->common->pkgname, handler->common->id, cluster, category);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_group_changed_cb;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, set_group_ret_cb, NULL);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.group_changed.cb = cb;
+               handler->cbs.group_changed.data = data; 
+               handler->common->request.group_changed = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_get_group(dynamicbox_h handler, const char **cluster, const char **category)
+{
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!cluster || !category || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       *cluster = handler->common->cluster;
+       *category = handler->common->category;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int dynamicbox_get_supported_sizes(dynamicbox_h handler, int *cnt, int *size_list)
+{
+       register int i;
+       register int j;
+
+       if (!handler || !size_list) {
+               ErrPrint("Invalid argument, handler(%p), size_list(%p)\n", handler, size_list);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!cnt || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       for (j = i = 0; i < DBOX_NR_OF_SIZE_LIST; i++) {
+               if (handler->common->dbox.size_list & (0x01 << i)) {
+                       if (j == *cnt) {
+                               break;
+                       }
+
+                       size_list[j++] = (0x01 << i);
+               }
+       }
+
+       *cnt = j;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI const char *dynamicbox_pkgname(dynamicbox_h handler)
+{
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return NULL;
+       }
+
+       if (handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return NULL;
+       }
+
+       return handler->common->pkgname;
+}
+
+EAPI double dynamicbox_priority(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return -1.0f;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return -1.0f;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid (%p)\n", handler);
+               return -1.0f;
+       }
+
+       return handler->common->dbox.priority;
+}
+
+EAPI int dynamicbox_delete_cluster(const char *cluster, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_DELETE_CLUSTER;
+       int ret;
+
+       packet = packet_create((const char *)&cmd, "s", cluster);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(NULL, packet, 0, delete_cluster_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_delete_category(const char *cluster, const char *category, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_DELETE_CATEGORY;
+       int ret;
+
+       packet = packet_create((const char *)&cmd, "ss", cluster, category);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(NULL, packet, 0, delete_category_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
+       }
+
+       return ret;
+}
+
+EAPI enum dynamicbox_type dynamicbox_type(dynamicbox_h handler, int gbar)
+{
+       enum dynamicbox_type type;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_CONTENT_TYPE_INVALID;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_CONTENT_TYPE_INVALID;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_CONTENT_TYPE_INVALID;
+       }
+
+       if (gbar) {
+               switch (handler->common->gbar.type) {
+               case GBAR_TYPE_TEXT:
+                       return DBOX_CONTENT_TYPE_TEXT;
+               case GBAR_TYPE_BUFFER:
+               case GBAR_TYPE_SCRIPT:
+                       {
+                               const char *id;
+                               id = fb_id(handler->common->gbar.fb);
+                               if (id && !strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
+                                       return DBOX_CONTENT_TYPE_RESOURCE_ID;
+                               }
+                       }
+                       return DBOX_CONTENT_TYPE_BUFFER;
+               case GBAR_TYPE_UIFW:
+                       return DBOX_CONTENT_TYPE_UIFW;
+               default:
+                       break;
+               }
+
+               return DBOX_CONTENT_TYPE_INVALID;
+       } else {
+               switch (handler->common->dbox.type) {
+               case DBOX_TYPE_FILE:
+                       return DBOX_CONTENT_TYPE_IMAGE;
+               case DBOX_TYPE_BUFFER:
+               case DBOX_TYPE_SCRIPT:
+                       {
+                               const char *id;
+                               id = fb_id(handler->common->dbox.fb);
+                               if (id && !strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
+                                       return DBOX_CONTENT_TYPE_RESOURCE_ID;
+                               }
+                       }
+                       return DBOX_CONTENT_TYPE_BUFFER;
+               case DBOX_TYPE_TEXT:
+                       return DBOX_CONTENT_TYPE_TEXT;
+               case DBOX_TYPE_UIFW:
+                       return DBOX_CONTENT_TYPE_UIFW;
+               default:
+                       break;
+               }
+
+               return DBOX_CONTENT_TYPE_INVALID;
+       }
+
+       return type;
+}
+
+EAPI int dynamicbox_set_text_handler(dynamicbox_h handler, int gbar, struct dynamicbox_script_operators *ops)
+{
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (gbar) {
+               memcpy(&handler->cbs.gbar_ops, ops, sizeof(*ops));
+       } else {
+               memcpy(&handler->cbs.dbox_ops, ops, sizeof(*ops));
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI unsigned int dynamicbox_acquire_resource_id(dynamicbox_h handler, int gbar, dynamicbox_ret_cb cb, void *data)
+{
+       if (gbar) {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handle\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (handler->common->gbar.type != GBAR_TYPE_SCRIPT && handler->common->gbar.type != GBAR_TYPE_BUFFER) {
+                       ErrPrint("Handler is not valid type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               return dbox_acquire_gbar_pixmap(handler, cb, data);
+       } else {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handle\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (handler->common->dbox.type != DBOX_TYPE_SCRIPT && handler->common->dbox.type != DBOX_TYPE_BUFFER) {
+                       ErrPrint("Handler is not valid type\n");
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               return dbox_acquire_dbox_pixmap(handler, cb, data);
+       }
+}
+
+/*!
+ * \note
+ * Do not check the state of handler and common-handler.
+ * If this function is used in the deleted callback,
+ * the handler and common-handler's state would be DELETE
+ * if this function check the state of handles,
+ * user cannot release the pixmap.
+ */
+EAPI int dynamicbox_release_resource_id(dynamicbox_h handler, int gbar, unsigned int resource_id)
+{
+       struct packet *packet;
+       const char *pkgname;
+       const char *id;
+       unsigned int cmd;
+
+       if (resource_id == 0 /* || handler->state != DBOX_STATE_CREATE */) {
+               ErrPrint("Pixmap is invalid [%d]\n", resource_id);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (gbar) {
+               if (!handler) {
+                       /*!
+                        * \note
+                        * Even though the handler is NULL, we should send the release request to the master.
+                        * Because the resource_id resource can be released after the handler is destroyed.
+                        * Pixmap resource is used by client. and it cannot be guaranteed to release resource_id.
+                        * In some cases, the resource_id can be released after the handler is deleted.
+                        *
+                        * Its implementation is up to the viewer app.
+                        * But we cannot force it to use only with valid handler.
+                        */
+                       DbgPrint("Using NULL handler\n");
+                       pkgname = NULL;
+                       id = NULL;
+                       /*!
+                        * \note
+                        * Master will try to find the buffer handler using given resource_id. if the pkgname and id is not valid.
+                        */
+               } else {
+                       if (!handler->common /* || handler-common->state != DBOX_STATE_CREATE */) {
+                               ErrPrint("Handler is invalid\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       if (!handler->common->id) {
+                               ErrPrint("Invalid handle\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       if (handler->common->gbar.type != GBAR_TYPE_SCRIPT && handler->common->gbar.type != GBAR_TYPE_BUFFER) {
+                               ErrPrint("Handler is not valid type\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       pkgname = handler->common->pkgname;
+                       id = handler->common->id;
+               }
+
+               cmd = CMD_GBAR_RELEASE_PIXMAP;
+       } else {
+               if (!handler) {
+                       /*!
+                        * \note
+                        * Even though the handler is NULL, we should send the release request to the master.
+                        * Because the resource_id resource can be released after the handler is destroyed.
+                        * Pixmap resource is used by client. and it cannot be guaranteed to release resource_id.
+                        * In some cases, the resource_id can be released after the handler is deleted.
+                        *
+                        * Its implementation is up to the viewer app.
+                        * But we cannot force it to use only with valid handler.
+                        */
+                       DbgPrint("Using NULL handler\n");
+                       pkgname = NULL;
+                       id = NULL;
+                       /*!
+                        * \note
+                        * Master will try to find the buffer handler using given resource_id. if the pkgname and id is not valid.
+                        */
+               } else {
+                       if (!handler->common /* || handler->common->state != DBOX_STATE_CREATE */) {
+                               ErrPrint("Handler is invalid\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       if (!handler->common->id) {
+                               ErrPrint("Invalid handle\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       if (handler->common->dbox.type != DBOX_TYPE_SCRIPT && handler->common->dbox.type != DBOX_TYPE_BUFFER) {
+                               ErrPrint("Handler is not valid type\n");
+                               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+                       }
+
+                       pkgname = handler->common->pkgname;
+                       id = handler->common->id;
+               }
+
+               cmd = CMD_DBOX_RELEASE_PIXMAP;
+       }
+
+       packet = packet_create_noack((const char *)&cmd, "ssi", pkgname, id, resource_id);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(handler, packet);
+}
+
+EAPI unsigned int dynamicbox_resource_id(const dynamicbox_h handler, int gbar)
+{
+       const char *id;
+       int pixmap = 0;
+
+       if (gbar) {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return 0;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return 0;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handler\n");
+                       return 0;
+               }
+
+               if (handler->common->gbar.type != GBAR_TYPE_SCRIPT && handler->common->gbar.type != GBAR_TYPE_BUFFER) {
+                       ErrPrint("Invalid handler\n");
+                       return 0;
+               }
+
+               id = fb_id(handler->common->gbar.fb);
+               if (id && sscanf(id, SCHEMA_PIXMAP "%u", (unsigned int *)&pixmap) != 1) {
+                       ErrPrint("PIXMAP Id is not valid\n");
+                       return 0;
+               }
+       } else {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return 0;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return 0;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handler\n");
+                       return 0;
+               }
+
+               if (handler->common->dbox.type != DBOX_TYPE_SCRIPT && handler->common->dbox.type != DBOX_TYPE_BUFFER) {
+                       ErrPrint("Invalid handler\n");
+                       return 0;
+               }
+
+               id = fb_id(handler->common->dbox.fb);
+               if (id && sscanf(id, SCHEMA_PIXMAP "%u", (unsigned int *)&pixmap) != 1) {
+                       ErrPrint("PIXMAP Id is not valid\n");
+                       return 0;
+               }
+
+       }
+
+       return pixmap;
+}
+
+EAPI void *dynamicbox_acquire_fb(dynamicbox_h handler, int gbar)
+{
+       if (gbar) {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return NULL;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return NULL;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handler\n");
+                       return NULL;
+               }
+
+               if (handler->common->gbar.type != GBAR_TYPE_SCRIPT && handler->common->gbar.type != GBAR_TYPE_BUFFER) {
+                       ErrPrint("Handler is not valid type\n");
+                       return NULL;
+               }
+
+               return fb_acquire_buffer(handler->common->gbar.fb);
+       } else {
+               if (!handler || handler->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return NULL;
+               }
+
+               if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+                       ErrPrint("Handler is invalid\n");
+                       return NULL;
+               }
+
+               if (!handler->common->id) {
+                       ErrPrint("Invalid handle\n");
+                       return NULL;
+               }
+
+               if (handler->common->dbox.type != DBOX_TYPE_SCRIPT && handler->common->dbox.type != DBOX_TYPE_BUFFER) {
+                       ErrPrint("Handler is not valid type\n");
+                       return NULL;
+               }
+
+               return fb_acquire_buffer(handler->common->dbox.fb);
+       }
+}
+
+EAPI int dynamicbox_release_fb(void *buffer)
+{
+       return fb_release_buffer(buffer);
+}
+
+EAPI int dynamicbox_fb_refcnt(void *buffer)
+{
+       return fb_refcnt(buffer);
+}
+
+EAPI int dynamicbox_fb_buffer_size(dynamicbox_h handler, int gbar)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handler\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (gbar) {
+               return fb_size(handler->common->gbar.fb);
+       } else {
+               return fb_size(handler->common->dbox.fb);
+       }
+}
+
+EAPI int dynamicbox_is_created_by_user(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handler\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return handler->common->is_user;
+}
+
+EAPI int dynamicbox_set_pinup(dynamicbox_h handler, int flag, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_PINUP_CHANGED;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handler\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->common->request.pinup) {
+               ErrPrint("Previous pinup request is not finished\n");
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (handler->common->is_pinned_up == flag) {
+               DbgPrint("No changes\n");
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       packet = packet_create((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, flag);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (!cb) {
+               cb = default_pinup_cb;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, pinup_done_cb, NULL);
+       if (ret == (int)DBOX_STATUS_ERROR_NONE) {
+               handler->cbs.pinup.cb = cb;
+               handler->cbs.pinup.data = data;
+               handler->common->request.pinup = 1;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_is_pinned_up(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handler\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return handler->common->is_pinned_up;
+}
+
+EAPI int dynamicbox_has_pinup(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handler\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       return handler->common->dbox.pinup_supported;
+}
+
+EAPI int dynamicbox_set_data(dynamicbox_h handler, void *data)
+{
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       handler->data = data;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI void *dynamicbox_data(dynamicbox_h handler)
+{
+       if (!handler) {
+               ErrPrint("Handler is NIL\n");
+               return NULL;
+       }
+
+       if (handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return NULL;
+       }
+
+       return handler->data;
+}
+
+EAPI const char *dynamicbox_content(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return NULL;
+       }
+
+       return handler->common->content;
+}
+
+EAPI const char *dynamicbox_title(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return NULL;
+       }
+
+       return handler->common->title;
+}
+
+EAPI int dynamicbox_emit_text_signal(dynamicbox_h handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       unsigned int cmd = CMD_TEXT_SIGNAL;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if ((handler->common->dbox.type != DBOX_TYPE_TEXT && handler->common->gbar.type != GBAR_TYPE_TEXT) || !handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!emission) {
+               emission = "";
+       }
+
+       if (!source) {
+               source = "";
+       }
+
+       packet = packet_create((const char *)&cmd, "ssssdddd",
+                               handler->common->pkgname, handler->common->id, emission, source, sx, sy, ex, ey);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, text_signal_cb, cbinfo);
+       if (ret < 0) {
+               dbox_destroy_cb_info(cbinfo);
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_subscribe_group(const char *cluster, const char *category)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_SUBSCRIBE;
+
+       /*!
+        * \todo
+        * Validate the group info using DB
+        * If the group info is not valid, do not send this request
+        */
+
+       packet = packet_create_noack((const char *)&cmd, "ss", cluster ? cluster : "", category ? category : "");
+       if (!packet) {
+               ErrPrint("Failed to create a packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(NULL, packet);
+}
+
+EAPI int dynamicbox_unsubscribe_group(const char *cluster, const char *category)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_UNSUBSCRIBE;
+
+       /*!
+        * \todo
+        * Validate the group info using DB
+        * If the group info is not valid, do not send this request
+        * AND Check the subscribed or not too
+        */
+
+       packet = packet_create_noack((const char *)&cmd, "ss", cluster ? cluster : "", category ? category : "");
+       if (!packet) {
+               ErrPrint("Failed to create a packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(NULL, packet);
+}
+
+EAPI int dynamicbox_refresh(dynamicbox_h handler, int force)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_UPDATE;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create_noack((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, force);
+       if (!packet) {
+               ErrPrint("Failed to create a packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(handler, packet);
+}
+
+EAPI int dynamicbox_refresh_group(const char *cluster, const char *category, int force)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_REFRESH_GROUP;
+
+       if (!cluster || !category) {
+               ErrPrint("Invalid argument\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       packet = packet_create_noack((const char *)&cmd, "ssi", cluster, category, force);
+       if (!packet) {
+               ErrPrint("Failed to create a packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(NULL, packet);
+}
+
+EAPI int dynamicbox_set_visibility(dynamicbox_h handler, enum dynamicbox_visible_state state)
+{
+       int old_state;
+       int ret;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->is_user) {
+               /* System cluster dynamicbox cannot be changed its visible states */
+               if (state == DBOX_HIDE_WITH_PAUSE) {
+                       ErrPrint("CA Livebox is not able to change the visibility\n");
+                       return DBOX_STATUS_ERROR_PERMISSION_DENIED;
+               }
+       }
+
+       if (handler->visible == state) {
+               DbgPrint("%s has no changes\n", handler->common->pkgname);
+               return DBOX_STATUS_ERROR_ALREADY;
+       }
+
+       old_state = handler->visible;
+       handler->visible = state;
+
+       ret = dbox_set_visibility(handler, state);
+       if (ret < 0) {
+               handler->visible = old_state;
+       }
+
+       return ret;
+}
+
+EAPI enum dynamicbox_visible_state dynamicbox_visibility(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is invalid\n");
+               return DBOX_VISIBLE_ERROR;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_VISIBLE_ERROR;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_VISIBLE_ERROR;
+       }
+
+       return handler->visible;
+}
+
+EAPI int dynamicbox_viewer_set_paused(void)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_CLIENT_PAUSED;
+
+       packet = packet_create_noack((const char *)&cmd, "d", util_timestamp());
+       if (!packet) {
+               ErrPrint("Failed to create a pause packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(NULL, packet);
+}
+
+EAPI int dynamicbox_viewer_set_resumed(void)
+{
+       struct packet *packet;
+       unsigned int cmd = CMD_CLIENT_RESUMED;
+
+       packet = packet_create_noack((const char *)&cmd, "d", util_timestamp());
+       if (!packet) {
+               ErrPrint("Failed to create a resume packet\n");
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       return master_rpc_request_only(NULL, packet);
+}
+
+EAPI int dynamicbox_sync_fb(dynamicbox_h handler, int gbar)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (gbar) {
+               return dbox_sync_gbar_fb(handler->common);
+       } else {
+               return dbox_sync_dbox_fb(handler->common);
+       }
+}
+
+EAPI const char *dynamicbox_alt_icon(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return NULL;
+       }
+
+       return handler->common->alt.icon;
+}
+
+EAPI const char *dynamicbox_alt_name(dynamicbox_h handler)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return NULL;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return NULL;
+       }
+
+       return handler->common->alt.name;
+}
+
+EAPI int dynamicbox_acquire_fb_lock(dynamicbox_h handler, int is_gbar)
+{
+       int ret = DBOX_STATUS_ERROR_NONE;
+       int fd;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Handler is not valid\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (is_gbar) {
+               if (!handler->common->gbar.lock || handler->common->gbar.lock_fd < 0) {
+                       DbgPrint("Lock: %s (%d)\n", handler->common->gbar.lock, handler->common->gbar.lock_fd);
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (fb_type(dbox_get_gbar_fb(handler->common)) == DBOX_FB_TYPE_FILE) {
+                       return DBOX_STATUS_ERROR_NONE;
+               }
+
+               fd = handler->common->gbar.lock_fd;
+       } else {
+               if (!handler->common->dbox.lock || handler->common->dbox.lock_fd < 0) {
+                       DbgPrint("Lock: %s (%d)\n", handler->common->dbox.lock, handler->common->dbox.lock_fd);
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (fb_type(dbox_get_dbox_fb(handler->common)) == DBOX_FB_TYPE_FILE) {
+                       return DBOX_STATUS_ERROR_NONE;
+               }
+
+               fd = handler->common->dbox.lock_fd;
+       }
+
+       ret = dbox_fb_lock(fd);
+
+       return ret == 0 ? DBOX_STATUS_ERROR_NONE : DBOX_STATUS_ERROR_FAULT;
+}
+
+EAPI int dynamicbox_release_fb_lock(dynamicbox_h handler, int is_gbar)
+{
+       int ret = DBOX_STATUS_ERROR_NONE;
+       int fd;
+
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (is_gbar) {
+               if (!handler->common->gbar.lock || handler->common->gbar.lock_fd < 0) {
+                       DbgPrint("Unlock: %s (%d)\n", handler->common->gbar.lock, handler->common->gbar.lock_fd);
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (fb_type(dbox_get_gbar_fb(handler->common)) == DBOX_FB_TYPE_FILE) {
+                       return DBOX_STATUS_ERROR_NONE;
+               }
+
+               fd = handler->common->gbar.lock_fd;
+       } else {
+               if (!handler->common->dbox.lock || handler->common->dbox.lock_fd < 0) {
+                       DbgPrint("Unlock: %s (%d)\n", handler->common->dbox.lock, handler->common->dbox.lock_fd);
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (fb_type(dbox_get_dbox_fb(handler->common)) == DBOX_FB_TYPE_FILE) {
+                       return DBOX_STATUS_ERROR_NONE;
+               }
+
+               fd = handler->common->dbox.lock_fd;
+       }
+
+       ret = dbox_fb_unlock(fd);
+
+       return ret == 0 ? DBOX_STATUS_ERROR_NONE : DBOX_STATUS_ERROR_FAULT;
+}
+
+EAPI int dynamicbox_set_option(enum dynamicbox_option_type option, int state)
+{
+       int ret = DBOX_STATUS_ERROR_NONE;
+
+       switch (option) {
+       case DBOX_OPTION_MANUAL_SYNC:
+               conf_set_manual_sync(state);
+               break;
+       case DBOX_OPTION_FRAME_DROP_FOR_RESIZE:
+               conf_set_frame_drop_for_resizing(state);
+               break;
+       case DBOX_OPTION_SHARED_CONTENT:
+               conf_set_shared_content(state);
+               break;
+       case DBOX_OPTION_DIRECT_UPDATE:
+               if (s_info.init_count) {
+                       DbgPrint("Already intialized, this option is not applied\n");
+               }
+               conf_set_direct_update(state);
+               break;
+       default:
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               break;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_option(enum dynamicbox_option_type option)
+{
+       int ret;
+
+       switch (option) {
+       case DBOX_OPTION_MANUAL_SYNC:
+               ret = conf_manual_sync();
+               break;
+       case DBOX_OPTION_FRAME_DROP_FOR_RESIZE:
+               ret = conf_frame_drop_for_resizing();
+               break;
+       case DBOX_OPTION_SHARED_CONTENT:
+               ret = conf_shared_content();
+               break;
+       case DBOX_OPTION_DIRECT_UPDATE:
+               ret = conf_direct_update();
+               break;
+       default:
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               break;
+       }
+
+       return ret;
+}
+
+EAPI int dynamicbox_set_auto_launch_handler(dynamicbox_auto_launch_handler_cb dbox_launch_handler, void *data)
+{
+       s_info.launch.handler = dbox_launch_handler;
+       s_info.launch.data = data;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+EAPI int dynamicbox_damage_region_get(dynamicbox_h handler, int gbar, const dynamicbox_damage_region_t *region)
+{
+       if (!handler || handler->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common || handler->common->state != DBOX_STATE_CREATE) {
+               ErrPrint("Invalid handle\n");
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (!handler->common->id) {
+               ErrPrint("Handler is not valid[%p]\n", handler);
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (gbar) {
+               region = &handler->common->dbox.last_damage;
+       } else {
+               region = &handler->common->gbar.last_damage;
+       }
 
-       return livebox_set_auto_launch_handler((launch_handler)dbox_launch_handler, data);
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 /* End of a file */
diff --git a/src/dynamicbox_internal.c b/src/dynamicbox_internal.c
new file mode 100644 (file)
index 0000000..e4b2c34
--- /dev/null
@@ -0,0 +1,1168 @@
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <fcntl.h>
+
+#include <dlog.h>
+
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
+#include <dynamicbox_buffer.h>
+
+#include <packet.h>
+
+#include "dlist.h"
+#include "debug.h"
+#include "dynamicbox.h"
+#include "dynamicbox_internal.h"
+#include "fb.h"
+#include "conf.h"
+#include "util.h"
+#include "master_rpc.h"
+
+int errno;
+
+enum event_state {
+       INFO_STATE_CALLBACK_IN_IDLE = 0x00,
+       INFO_STATE_CALLBACK_IN_PROCESSING = 0x01
+};
+
+struct event_info {
+       int is_deleted;
+       int (*handler)(dynamicbox_h handler, enum dynamicbox_event_type event, void *data);
+       void *user_data;
+};
+
+struct fault_info {
+       int is_deleted;
+       int (*handler)(enum dynamicbox_fault_type event, const char *pkgname, const char *filename, const char *func, void *data);
+       void *user_data;
+};
+
+static struct info {
+       struct dlist *dynamicbox_common_list;
+       struct dlist *dynamicbox_list;
+       struct dlist *event_list;
+       struct dlist *fault_list;
+       enum event_state event_state;
+       enum event_state fault_state;
+} s_info = {
+       .dynamicbox_common_list = NULL,
+       .dynamicbox_list = NULL,
+       .event_list = NULL,
+       .fault_list = NULL,
+       .event_state = INFO_STATE_CALLBACK_IN_IDLE,
+       .fault_state = INFO_STATE_CALLBACK_IN_IDLE,
+};
+
+static inline void default_delete_cb(dynamicbox_h handler, int ret, void *data)
+{
+       DbgPrint("Default deleted event handler: %d\n", ret);
+}
+
+static void del_ret_cb(dynamicbox_h handler, const struct packet *result, void *data)
+{
+       struct cb_info *info = data;
+       int ret;
+       dynamicbox_ret_cb cb;
+       void *cbdata;
+
+       cb = info->cb;
+       cbdata = info->data;
+       dbox_destroy_cb_info(info);
+
+       if (!result) {
+               ErrPrint("Connection lost?\n");
+               ret = DBOX_STATUS_ERROR_FAULT;
+       } else if (packet_get(result, "i", &ret) != 1) {
+               ErrPrint("Invalid argument\n");
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       if (ret == 0) {
+               handler->cbs.deleted.cb = cb;
+               handler->cbs.deleted.data = cbdata;
+       } else if (cb) {
+               cb(handler, ret, cbdata);
+       }
+
+       /*!
+        * \note
+        * Do not call the deleted callback from here.
+        * master will send the "deleted" event.
+        * Then invoke this callback.
+        *
+        * if (handler->cbs.deleted.cb)
+        *      handler->cbs.deleted.cb(handler, ret, handler->cbs.deleted.data);
+        */
+}
+
+int dbox_destroy_lock_file(struct dynamicbox_common *common, int is_gbar)
+{
+       if (is_gbar) {
+               if (!common->gbar.lock) {
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (close(common->gbar.lock_fd) < 0) {
+                       ErrPrint("close: %s\n", strerror(errno));
+               }
+               common->gbar.lock_fd = -1;
+
+               if (unlink(common->gbar.lock) < 0) {
+                       ErrPrint("unlink: %s\n", strerror(errno));
+               }
+
+               free(common->gbar.lock);
+               common->gbar.lock = NULL;
+       } else {
+               if (!common->dbox.lock) {
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+               }
+
+               if (close(common->dbox.lock_fd) < 0) {
+                       ErrPrint("close: %s\n", strerror(errno));
+               }
+               common->dbox.lock_fd = -1;
+
+               if (unlink(common->dbox.lock) < 0) {
+                       ErrPrint("unlink: %s\n", strerror(errno));
+               }
+
+               free(common->dbox.lock);
+               common->dbox.lock = NULL;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dbox_create_lock_file(struct dynamicbox_common *common, int is_gbar)
+{
+       int len;
+       char *file;
+
+       len = strlen(common->id);
+       file = malloc(len + 20);
+       if (!file) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       snprintf(file, len + 20, "%s.%s.lck", util_uri_to_path(common->id), is_gbar ? "pd" : "lb");
+
+       if (is_gbar) {
+               common->gbar.lock_fd = open(file, O_RDONLY);
+               if (common->gbar.lock_fd < 0) {
+                       ErrPrint("open: %s\n", strerror(errno));
+                       free(file);
+                       return DBOX_STATUS_ERROR_IO_ERROR;
+               }
+
+               common->gbar.lock = file;
+       } else {
+               common->dbox.lock_fd = open(file, O_RDONLY);
+               if (common->dbox.lock_fd < 0) {
+                       ErrPrint("open: %s\n", strerror(errno));
+                       free(file);
+                       return DBOX_STATUS_ERROR_IO_ERROR;
+               }
+
+               common->dbox.lock = file;
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+struct dynamicbox_common *dbox_create_common_handle(dynamicbox_h handle, const char *pkgname, const char *cluster, const char *category)
+{
+       struct dynamicbox_common *common;
+
+       common = calloc(1, sizeof(*common));
+       if (!common) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return NULL;
+       }
+
+       common->pkgname = strdup(pkgname);
+       if (!common->pkgname) {
+               free(common);
+               return NULL;
+       }
+
+       common->cluster = strdup(cluster);
+       if (!common->cluster) {
+               ErrPrint("Error: %s\n", strerror(errno));
+               free(common->pkgname);
+               free(common);
+               return NULL;
+       }
+
+       common->category = strdup(category);
+       if (!common->category) {
+               ErrPrint("Error: %s\n", strerror(errno));
+               free(common->cluster);
+               free(common->pkgname);
+               free(common);
+               return NULL;
+       }
+
+       /* Data provider will set this */
+       common->dbox.type = DBOX_TYPE_FILE;
+       common->gbar.type = GBAR_TYPE_SCRIPT;
+
+       /* Used for handling the mouse event on a box */
+       common->dbox.mouse_event = 0;
+
+       /* Cluster infomration is not determined yet */
+       common->nr_of_sizes = 0x01;
+
+       common->timestamp = util_timestamp();
+       common->is_user = 1;
+       common->delete_type = DBOX_DELETE_PERMANENTLY;
+       common->gbar.lock = NULL;
+       common->gbar.lock_fd = -1;
+       common->dbox.lock = NULL;
+       common->dbox.lock_fd = -1;
+
+       common->state = DBOX_STATE_CREATE;
+       common->visible = DBOX_SHOW;
+
+       s_info.dynamicbox_common_list = dlist_append(s_info.dynamicbox_common_list, common);
+       return common;
+}
+
+int dbox_destroy_common_handle(struct dynamicbox_common *common)
+{
+       dlist_remove_data(s_info.dynamicbox_common_list, common);
+
+       common->state = DBOX_STATE_DESTROYED;
+
+       if (common->filename) {
+               (void)util_unlink(common->filename);
+       }
+
+       free(common->cluster);
+       free(common->category);
+       free(common->id);
+       free(common->pkgname);
+       free(common->filename);
+       free(common->dbox.auto_launch);
+       free(common->alt.icon);
+       free(common->alt.name);
+
+       if (common->dbox.fb) {
+               fb_destroy(common->dbox.fb);
+               common->dbox.fb = NULL;
+       }
+
+       if (common->gbar.fb) {
+               fb_destroy(common->gbar.fb);
+               common->gbar.fb = NULL;
+       }
+
+       return 0;
+}
+
+int dbox_common_ref(struct dynamicbox_common *common, dynamicbox_h handle)
+{
+       common->dynamicbox_list = dlist_append(common->dynamicbox_list, handle);
+       common->refcnt++;
+
+       return common->refcnt;
+}
+
+int dbox_common_unref(struct dynamicbox_common *common, dynamicbox_h handle)
+{
+       int refcnt;
+       dlist_remove_data(common->dynamicbox_list, handle);
+       refcnt = --common->refcnt;
+
+       return refcnt;
+}
+
+int dbox_set_group(struct dynamicbox_common *common, const char *cluster, const char *category)
+{
+       void *pc = NULL;
+       void *ps = NULL;
+
+       if (cluster) {
+               pc = strdup(cluster);
+               if (!pc) {
+                       ErrPrint("Heap: %s (cluster: %s)\n", strerror(errno), cluster);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+       }
+
+       if (category) {
+               ps = strdup(category);
+               if (!ps) {
+                       ErrPrint("Heap: %s (category: %s)\n", strerror(errno), category);
+                       free(pc);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+       }
+
+       if (common->cluster) {
+               free(common->cluster);
+       }
+
+       if (common->category) {
+               free(common->category);
+       }
+
+       common->cluster = pc;
+       common->category = ps;
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void dbox_set_size(struct dynamicbox_common *common, int w, int h)
+{
+       int size_type;
+
+       common->dbox.width = w;
+       common->dbox.height = h;
+
+       size_type = dynamicbox_service_size_type(w, h);
+       if (size_type != DBOX_SIZE_TYPE_UNKNOWN) {
+               common->dbox.mouse_event = dynamicbox_service_mouse_event(common->pkgname, size_type);
+       }
+}
+
+void dbox_set_update_mode(struct dynamicbox_common *common, int active_mode)
+{
+       common->is_active_update = active_mode;
+}
+
+void dbox_set_gbarsize(struct dynamicbox_common *common, int w, int h)
+{
+       common->gbar.width = w;
+       common->gbar.height = h;
+}
+
+void dbox_set_default_gbarsize(struct dynamicbox_common *common, int w, int h)
+{
+       common->gbar.default_width = w;
+       common->gbar.default_height = h;
+}
+
+void dbox_invoke_fault_handler(enum dynamicbox_fault_type event, const char *pkgname, const char *file, const char *func)
+{
+       struct dlist *l;
+       struct dlist *n;
+       struct fault_info *info;
+
+       s_info.fault_state = INFO_STATE_CALLBACK_IN_PROCESSING;
+
+       dlist_foreach_safe(s_info.fault_list, l, n, info) {
+               if (!info->is_deleted && info->handler(event, pkgname, file, func, info->user_data) == EXIT_FAILURE) {
+                       info->is_deleted = 1;
+               }
+
+               if (info->is_deleted) {
+                       s_info.fault_list = dlist_remove(s_info.fault_list, l);
+                       free(info);
+               }
+       }
+
+       s_info.fault_state &= ~INFO_STATE_CALLBACK_IN_PROCESSING;
+}
+
+void dbox_invoke_event_handler(dynamicbox_h handler, enum dynamicbox_event_type event)
+{
+       struct dlist *l;
+       struct dlist *n;
+       struct event_info *info;
+
+       if (event == DBOX_EVENT_DBOX_UPDATED && handler->common->refcnt > 1) {
+               if (handler->visible != DBOX_SHOW) {
+                       DbgPrint("Update requested(pending) - %s\n", handler->common->pkgname);
+                       handler->paused_updating++;
+                       return;
+               } else {
+                       handler->paused_updating = 0;
+               }
+       }
+
+       s_info.event_state = INFO_STATE_CALLBACK_IN_PROCESSING;
+
+       dlist_foreach_safe(s_info.event_list, l, n, info) {
+               if (!info->is_deleted && info->handler(handler, event, info->user_data) == EXIT_FAILURE) {
+                       DbgPrint("Event handler returns EXIT_FAILURE\n");
+                       info->is_deleted = 1;
+               }
+
+               if (info->is_deleted) {
+                       s_info.event_list = dlist_remove(s_info.event_list, l);
+                       free(info);
+               }
+       }
+
+       s_info.event_state &= ~INFO_STATE_CALLBACK_IN_PROCESSING;
+}
+
+struct dynamicbox_common *dbox_find_common_handle(const char *pkgname, const char *id)
+{
+       struct dlist *l;
+       struct dynamicbox_common *common;
+
+       dlist_foreach(s_info.dynamicbox_common_list, l, common) {
+               if (!common->id) {
+                       continue;
+               }
+
+               if (!strcmp(common->pkgname, pkgname) && !strcmp(common->id, id)) {
+                       return common;
+               }
+       }
+
+       return NULL;
+}
+
+struct dynamicbox_common *dbox_find_common_handle_by_timestamp(double timestamp)
+{
+       struct dlist *l;
+       struct dynamicbox_common *common;
+
+       dlist_foreach(s_info.dynamicbox_common_list, l, common) {
+               if (common->timestamp == timestamp) {
+                       return common;
+               }
+       }
+
+       return NULL;
+}
+
+dynamicbox_h dbox_new_dynamicbox(const char *pkgname, const char *id, double timestamp, const char *cluster, const char *category)
+{
+       dynamicbox_h handler;
+
+       handler = calloc(1, sizeof(*handler));
+       if (!handler) {
+               ErrPrint("Failed to create a new dynamicbox\n");
+               return NULL;
+       }
+
+       handler->common = dbox_create_common_handle(handler, pkgname, cluster, category);
+       if (!handler->common) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               free(handler);
+               return NULL;
+       }
+
+       dbox_common_ref(handler->common, handler);
+       dbox_set_id(handler->common, id);
+       handler->common->timestamp = timestamp;
+       handler->common->state = DBOX_STATE_CREATE;
+       handler->visible = DBOX_SHOW;
+       s_info.dynamicbox_list = dlist_append(s_info.dynamicbox_list, handler);
+
+       return dbox_ref(handler);
+}
+
+int dbox_delete_all(void)
+{
+       struct dlist *l;
+       struct dlist *n;
+       dynamicbox_h handler;
+
+       dlist_foreach_safe(s_info.dynamicbox_list, l, n, handler) {
+               dbox_invoke_event_handler(handler, DBOX_EVENT_DELETED);
+               dbox_unref(handler, 1);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dbox_set_content(struct dynamicbox_common *common, const char *content)
+{
+       char *pc = NULL;
+
+       if (content) {
+               pc = strdup(content);
+               if (!pc) {
+                       ErrPrint("heap: %s [%s]\n", strerror(errno), content);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+       }
+
+       free(common->content);
+       common->content = pc;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dbox_set_title(struct dynamicbox_common *common, const char *title)
+{
+       char *pt = NULL;
+
+       if (title) {
+               pt = strdup(title);
+               if (!pt) {
+                       ErrPrint("heap: %s [%s]\n", strerror(errno), title);
+                       return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+               }
+       }
+
+       free(common->title);
+       common->title = pt;
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void dbox_set_size_list(struct dynamicbox_common *common, int size_list)
+{
+       common->dbox.size_list = size_list;
+}
+
+void dbox_set_auto_launch(struct dynamicbox_common *common, const char *auto_launch)
+{
+       char *pa = NULL;
+
+       if (!auto_launch || !strlen(auto_launch)) {
+               return;
+       }
+
+       pa = strdup(auto_launch);
+       if (!pa) {
+               ErrPrint("heap: %s, [%s]\n", strerror(errno), auto_launch);
+               return;
+       }
+
+       free(common->dbox.auto_launch);
+       common->dbox.auto_launch = pa;
+}
+
+void dbox_set_priority(struct dynamicbox_common *common, double priority)
+{
+       common->dbox.priority = priority;
+}
+
+void dbox_set_id(struct dynamicbox_common *common, const char *id)
+{
+       char *pi = NULL;
+
+       if (id) {
+               pi = strdup(id);
+               if (!pi) {
+                       ErrPrint("heap: %s [%s]\n", strerror(errno), pi);
+                       return;
+               }
+       }
+
+       free(common->id);
+       common->id = pi;
+}
+
+void dbox_set_filename(struct dynamicbox_common *common, const char *filename)
+{
+       if (common->filename) {
+               if (common->dbox.type == DBOX_TYPE_FILE || common->dbox.type == DBOX_TYPE_TEXT) {
+                       if (common->filename[0] && unlink(common->filename) < 0) {
+                               ErrPrint("unlink: %s (%s)\n", strerror(errno), common->filename);
+                       }
+               }
+
+               free(common->filename);
+       }
+
+       common->filename = strdup(filename);
+       if (!common->filename) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+       }
+}
+
+void dbox_set_alt_icon(struct dynamicbox_common *common, const char *icon)
+{
+       char *_icon = NULL;
+
+       if (icon && strlen(icon)) {
+               _icon = strdup(icon);
+               if (!_icon) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+               }
+       }
+
+       free(common->alt.icon);
+       common->alt.icon = _icon;
+}
+
+void dbox_set_alt_name(struct dynamicbox_common *common, const char *name)
+{
+       char *_name = NULL;
+
+       if (name && strlen(name)) {
+               _name = strdup(name);
+               if (!_name) {
+                       ErrPrint("Heap: %s\n", strerror(errno));
+               }
+       }
+
+       free(common->alt.name);
+       common->alt.name = _name;
+}
+
+int dbox_set_dbox_fb(struct dynamicbox_common *common, const char *filename)
+{
+       struct fb_info *fb;
+
+       if (!common) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       fb = common->dbox.fb;
+       if (fb && !strcmp(fb_id(fb), filename)) { /*!< BUFFER is not changed, */
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       common->dbox.fb = NULL;
+
+       if (!filename || filename[0] == '\0') {
+               if (fb) {
+                       fb_destroy(fb);
+               }
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       common->dbox.fb = fb_create(filename, common->dbox.width, common->dbox.height);
+       if (!common->dbox.fb) {
+               ErrPrint("Faield to create a FB\n");
+               if (fb) {
+                       fb_destroy(fb);
+               }
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (fb) {
+               fb_destroy(fb);
+       }
+
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+int dbox_set_gbar_fb(struct dynamicbox_common *common, const char *filename)
+{
+       struct fb_info *fb;
+
+       if (!common || common->state != DBOX_STATE_CREATE) {
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
+       }
+
+       fb = common->gbar.fb;
+       if (fb && !strcmp(fb_id(fb), filename)) {
+               /* BUFFER is not changed, just update the content */
+               return DBOX_STATUS_ERROR_EXIST;
+       }
+       common->gbar.fb = NULL;
+
+       if (!filename || filename[0] == '\0') {
+               if (fb) {
+                       fb_destroy(fb);
+               }
+               return DBOX_STATUS_ERROR_NONE;
+       }
+
+       common->gbar.fb = fb_create(filename, common->gbar.width, common->gbar.height);
+       if (!common->gbar.fb) {
+               ErrPrint("Failed to create a FB\n");
+               if (fb) {
+                       fb_destroy(fb);
+               }
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       if (fb) {
+               fb_destroy(fb);
+       }
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+struct fb_info *dbox_get_dbox_fb(struct dynamicbox_common *common)
+{
+       return common->dbox.fb;
+}
+
+struct fb_info *dbox_get_gbar_fb(struct dynamicbox_common *common)
+{
+       return common->gbar.fb;
+}
+
+void dbox_set_user(struct dynamicbox_common *common, int user)
+{
+       common->is_user = user;
+}
+
+void dbox_set_pinup(struct dynamicbox_common *common, int pinup_supported)
+{
+       common->dbox.pinup_supported = pinup_supported;
+}
+
+void dbox_set_text_dbox(struct dynamicbox_common *common)
+{
+       common->dbox.type = DBOX_TYPE_TEXT;
+}
+
+void dbox_set_text_gbar(struct dynamicbox_common *common)
+{
+       common->gbar.type = GBAR_TYPE_TEXT;
+}
+
+int dbox_text_dbox(struct dynamicbox_common *common)
+{
+       return common->dbox.type == DBOX_TYPE_TEXT;
+}
+
+int dbox_text_gbar(struct dynamicbox_common *common)
+{
+       return common->gbar.type == GBAR_TYPE_TEXT;
+}
+
+void dbox_set_period(struct dynamicbox_common *common, double period)
+{
+       common->dbox.period = period;
+}
+
+dynamicbox_h dbox_ref(dynamicbox_h handler)
+{
+       if (!handler) {
+               return NULL;
+       }
+
+       handler->refcnt++;
+       return handler;
+}
+
+dynamicbox_h dbox_unref(dynamicbox_h handler, int destroy_common)
+{
+       if (!handler) {
+               return NULL;
+       }
+
+       handler->refcnt--;
+       if (handler->refcnt > 0) {
+               return handler;
+       }
+
+       if (handler->cbs.created.cb) {
+               handler->cbs.created.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.created.data);
+               handler->cbs.created.cb = NULL;
+               handler->cbs.created.data = NULL;
+       }
+
+       if (handler->cbs.deleted.cb) {
+               handler->cbs.deleted.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.deleted.data);
+               handler->cbs.deleted.cb = NULL;
+               handler->cbs.deleted.data = NULL;
+       }
+
+       if (handler->cbs.pinup.cb) {
+               handler->cbs.pinup.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.pinup.data);
+               handler->cbs.pinup.cb = NULL;
+               handler->cbs.pinup.data = NULL;
+       }
+
+       if (handler->cbs.group_changed.cb) {
+               handler->cbs.group_changed.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.group_changed.data);
+               handler->cbs.group_changed.cb = NULL;
+               handler->cbs.group_changed.data = NULL;
+       }
+
+       if (handler->cbs.period_changed.cb) {
+               handler->cbs.period_changed.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.period_changed.data);
+               handler->cbs.period_changed.cb = NULL;
+               handler->cbs.period_changed.data = NULL;
+       }
+
+       if (handler->cbs.size_changed.cb) {
+               handler->cbs.size_changed.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.size_changed.data);
+               handler->cbs.size_changed.cb = NULL;
+               handler->cbs.size_changed.data = NULL;
+       }
+
+       if (handler->cbs.gbar_created.cb) {
+               handler->cbs.gbar_created.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.gbar_created.data);
+               handler->cbs.gbar_created.cb = NULL;
+               handler->cbs.gbar_created.data = NULL;
+       }
+
+       if (handler->cbs.gbar_destroyed.cb) {
+               handler->cbs.gbar_destroyed.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.gbar_destroyed.data);
+               handler->cbs.gbar_destroyed.cb = NULL;
+               handler->cbs.gbar_destroyed.data = NULL;
+       }
+
+       if (handler->cbs.update_mode.cb) {
+               handler->cbs.update_mode.cb(handler, DBOX_STATUS_ERROR_FAULT, handler->cbs.update_mode.data);
+               handler->cbs.update_mode.cb = NULL;
+               handler->cbs.update_mode.data = NULL;
+       }
+
+       if (handler->cbs.access_event.cb) {
+               handler->cbs.access_event.cb(handler, DBOX_ACCESS_STATUS_ERROR, handler->cbs.access_event.data);
+               handler->cbs.access_event.cb = NULL;
+               handler->cbs.access_event.data = NULL;
+       }
+
+       if (handler->cbs.key_event.cb) {
+               handler->cbs.key_event.cb(handler, DBOX_KEY_STATUS_ERROR, handler->cbs.key_event.data);
+               handler->cbs.key_event.cb = NULL;
+               handler->cbs.key_event.data = NULL;
+       }
+
+       dlist_remove_data(s_info.dynamicbox_list, handler);
+
+       handler->state = DBOX_STATE_DESTROYED;
+       if (dbox_common_unref(handler->common, handler) == 0) {
+               if (destroy_common) {
+                       /*!
+                        * \note
+                        * Lock file should be deleted after all callbacks are processed.
+                        */
+                       dbox_destroy_lock_file(handler->common, 0);
+                       dbox_destroy_common_handle(handler->common);
+               }
+       }
+       free(handler);
+       DbgPrint("Handler is released\n");
+       return NULL;
+}
+
+int dbox_send_delete(dynamicbox_h handler, int type, dynamicbox_ret_cb cb, void *data)
+{
+       struct packet *packet;
+       struct cb_info *cbinfo;
+       int ret;
+
+       if (handler->common->request.deleted) {
+               ErrPrint("Already in-progress\n");
+               if (cb) {
+                       cb(handler, DBOX_STATUS_ERROR_NONE, data);
+               }
+               return DBOX_STATUS_ERROR_BUSY;
+       }
+
+       if (!cb) {
+               cb = default_delete_cb;
+       }
+
+       packet = packet_create("delete", "ssid", handler->common->pkgname, handler->common->id, type, handler->common->timestamp);
+       if (!packet) {
+               ErrPrint("Failed to build a param\n");
+               if (cb) {
+                       cb(handler, DBOX_STATUS_ERROR_FAULT, data);
+               }
+
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       cbinfo = dbox_create_cb_info(cb, data);
+       if (!cbinfo) {
+               packet_destroy(packet);
+               ErrPrint("Failed to create cbinfo\n");
+               if (cb) {
+                       cb(handler, DBOX_STATUS_ERROR_FAULT, data);
+               }
+
+               return DBOX_STATUS_ERROR_FAULT;
+       }
+
+       ret = master_rpc_async_request(handler, packet, 0, del_ret_cb, cbinfo);
+       if (ret < 0) {
+               /*!
+                * Packet is destroyed by master_rpc_async_request.
+                */
+               dbox_destroy_cb_info(cbinfo);
+
+               if (cb) {
+                       cb(handler, DBOX_STATUS_ERROR_FAULT, data);
+               }
+       } else {
+               handler->common->request.deleted = 1;
+       }
+
+       return ret;
+}
+
+int dbox_sync_dbox_fb(struct dynamicbox_common *common)
+{
+       int ret;
+
+       if (fb_type(dbox_get_dbox_fb(common)) == DBOX_FB_TYPE_FILE && common->dbox.lock_fd >= 0) {
+               (void)dbox_fb_lock(common->dbox.lock_fd);
+               ret = fb_sync(dbox_get_dbox_fb(common), common->dbox.last_damage.x, common->dbox.last_damage.y, common->dbox.last_damage.w, common->dbox.last_damage.h);
+               (void)dbox_fb_unlock(common->dbox.lock_fd);
+       } else {
+               ret = fb_sync(dbox_get_dbox_fb(common), common->dbox.last_damage.x, common->dbox.last_damage.y, common->dbox.last_damage.w, common->dbox.last_damage.h);
+       }
+
+       return ret;
+}
+
+int dbox_sync_gbar_fb(struct dynamicbox_common *common)
+{
+       int ret;
+
+       if (fb_type(dbox_get_gbar_fb(common)) == DBOX_FB_TYPE_FILE && common->gbar.lock_fd >= 0) {
+               (void)dbox_fb_lock(common->gbar.lock_fd);
+               ret = fb_sync(dbox_get_gbar_fb(common), common->gbar.last_damage.x, common->gbar.last_damage.y, common->gbar.last_damage.w, common->gbar.last_damage.h);
+               (void)dbox_fb_unlock(common->gbar.lock_fd);
+       } else {
+               ret = fb_sync(dbox_get_gbar_fb(common), common->gbar.last_damage.x, common->gbar.last_damage.y, common->gbar.last_damage.w, common->gbar.last_damage.h);
+       }
+
+       return ret;
+}
+
+int dbox_fb_lock(int fd)
+{
+        struct flock flock;
+       int ret;
+
+       flock.l_type = F_RDLCK;
+       flock.l_whence = SEEK_SET;
+       flock.l_start = 0;
+       flock.l_len = 0;
+       flock.l_pid = getpid();
+
+       do {
+               ret = fcntl(fd, F_SETLKW, &flock);
+               if (ret < 0) {
+                       ret = errno;
+                       ErrPrint("fcntl: %s\n", strerror(errno));
+               }
+       } while (ret == EINTR);
+
+       return ret;
+}
+
+int dbox_fb_unlock(int fd)
+{
+       struct flock flock;
+       int ret;
+
+       flock.l_type = F_UNLCK;
+       flock.l_whence = SEEK_SET;
+       flock.l_start = 0;
+       flock.l_len = 0;
+       flock.l_pid = getpid();
+
+       do {
+               ret = fcntl(fd, F_SETLKW, &flock);
+               if (ret < 0) {
+                       ret = errno;
+                       ErrPrint("fcntl: %s\n", strerror(errno));
+               }
+       } while (ret == EINTR);
+
+       return ret;
+}
+
+struct dynamicbox_common *dbox_find_sharable_common_handle(const char *pkgname, const char *content, int w, int h, const char *cluster, const char *category)
+{
+       struct dlist *l;
+       struct dynamicbox_common *common;
+
+       if (!conf_shared_content()) {
+               /*!
+                * Shared content option is turnned off.
+                */
+               return NULL;
+       }
+
+       dlist_foreach(s_info.dynamicbox_common_list, l, common) {
+               if (common->state != DBOX_STATE_CREATE) {
+                       continue;
+               }
+
+               if (strcmp(common->pkgname, pkgname)) {
+                       continue;
+               }
+
+               if (strcmp(common->cluster, cluster)) {
+                       DbgPrint("Cluster mismatched\n");
+                       continue;
+               }
+
+               if (strcmp(common->category, category)) {
+                       DbgPrint("Category mismatched\n");
+                       continue;
+               }
+
+               if (common->content && content) {
+                       if (strcmp(common->content, content)) {
+                               DbgPrint("%s Content ([%s] <> [%s])\n", common->pkgname, common->content, content);
+                               continue;       
+                       }
+               } else {
+                       int c1_len;
+                       int c2_len;
+
+                       /*!
+                        * \note
+                        * We assumes "" (ZERO length string) to NULL
+                        */
+                       c1_len = common->content ? strlen(common->content) : 0;
+                       c2_len = content ? strlen(content) : 0;
+                       if (c1_len != c2_len) {
+                               DbgPrint("%s Content %p <> %p\n", common->pkgname, common->content, content);
+                               continue;
+                       }
+               }
+
+               if (common->request.size_changed) {
+                       DbgPrint("Changing size\n");
+                       /*!
+                        * \note
+                        * Do not re-use resizing instance.
+                        * We will not use predicted size.
+                        */
+                       continue;
+               }
+
+               if (common->request.created) {
+                       DbgPrint("Creating now but re-use it (%s)\n", common->pkgname);
+               }
+
+               if (common->dbox.width != w || common->dbox.height != h) {
+                       DbgPrint("Size mismatched\n");
+                       continue;
+               }
+
+               DbgPrint("common handle is found: %p\n", common);
+               return common;
+       }
+
+       return NULL;
+}
+
+dynamicbox_h dbox_find_dbox_in_show(struct dynamicbox_common *common)
+{
+       struct dlist *l;
+       dynamicbox_h item;
+
+       dlist_foreach(common->dynamicbox_list, l, item) {
+               if (item->visible == DBOX_SHOW) {
+                       DbgPrint("%s visibility is not changed\n", common->pkgname);
+                       return item;
+               }
+       }
+
+       return NULL;
+}
+
+dynamicbox_h dbox_get_dbox_nth(struct dynamicbox_common *common, int nth)
+{
+       dynamicbox_h item;
+       struct dlist *l;
+
+       l = dlist_nth(common->dynamicbox_list, nth);
+       item = dlist_data(l);
+
+       return item;
+}
+
+int dbox_add_event_handler(dynamicbox_event_handler_cb dbox_cb, void *data)
+{
+       struct event_info *info;
+       info = malloc(sizeof(*info));
+       if (!info) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->handler = dbox_cb;
+       info->user_data = data;
+       info->is_deleted = 0;
+
+       s_info.event_list = dlist_append(s_info.event_list, info);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void *dbox_remove_event_handler(dynamicbox_event_handler_cb dbox_cb)
+{
+       struct event_info *info;
+       struct dlist *l;
+
+       dlist_foreach(s_info.event_list, l, info) {
+               if (info->handler == dbox_cb) {
+                       void *data;
+
+                       data = info->user_data;
+
+                       if (s_info.event_state == INFO_STATE_CALLBACK_IN_PROCESSING) {
+                               info->is_deleted = 1;
+                       } else {
+                               s_info.event_list = dlist_remove(s_info.event_list, l);
+                               free(info);
+                       }
+
+                       return data;
+               }
+       }
+
+       return NULL;
+}
+
+int dbox_add_fault_handler(dynamicbox_fault_handler_cb dbox_cb, void *data)
+{
+       struct fault_info *info;
+       info = malloc(sizeof(*info));
+       if (!info) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
+       }
+
+       info->handler = dbox_cb;
+       info->user_data = data;
+       info->is_deleted = 0;
+
+       s_info.fault_list = dlist_append(s_info.fault_list, info);
+       return DBOX_STATUS_ERROR_NONE;
+}
+
+void *dbox_remove_fault_handler(dynamicbox_fault_handler_cb dbox_cb)
+{
+       struct fault_info *info;
+       struct dlist *l;
+
+       dlist_foreach(s_info.fault_list, l, info) {
+               if (info->handler == dbox_cb) {
+                       void *data;
+
+                       data = info->user_data;
+
+                       if (s_info.fault_state == INFO_STATE_CALLBACK_IN_PROCESSING) {
+                               info->is_deleted = 1;
+                       } else {
+                               s_info.fault_list = dlist_remove(s_info.fault_list, l);
+                               free(info);
+                       }
+
+                       return data;
+               }
+       }
+
+       return NULL;
+}
+
+struct cb_info *dbox_create_cb_info(dynamicbox_ret_cb cb, void *data)
+{
+       struct cb_info *info;
+
+       info = malloc(sizeof(*info));
+       if (!info) {
+               ErrPrint("Heap: %s\n", strerror(errno));
+               return NULL;
+       }
+
+       info->cb = cb;
+       info->data = data;
+       return info;
+}
+
+void dbox_destroy_cb_info(struct cb_info *info)
+{
+       free(info);
+}
+
+/* End of a file */
index c05aa8c..041bf09 100644 (file)
--- a/src/fb.c
+++ b/src/fb.c
@@ -32,7 +32,8 @@
 #include <X11/Xutil.h>
 
 #include <dlog.h>
-#include <livebox-errno.h> /* For error code */
+#include <dynamicbox_errno.h> /* For error code */
+#include <dynamicbox_buffer.h>
 
 #include "debug.h"
 #include "util.h"
@@ -51,17 +52,6 @@ struct fb_info {
        int handle;
 };
 
-struct buffer { /*!< Must has to be sync with slave & provider */
-       enum {
-               CREATED = 0x00beef00,
-               DESTROYED = 0x00dead00
-       } state;
-       enum buffer_type type;
-       int refcnt;
-       void *info;
-       char data[];
-};
-
 static struct {
        Display *disp;
        int screen;
@@ -86,7 +76,7 @@ int fb_init(void *disp)
                s_info.visual = DefaultVisualOfScreen(screen);
        }
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_fini(void)
@@ -107,25 +97,25 @@ static inline void update_fb_size(struct fb_info *info)
        info->bufsz = info->w * info->h * info->pixels;
 }
 
-static int sync_for_file(struct fb_info *info)
+static int sync_for_file(struct fb_info *info, int x, int y, int w, int h)
 {
        int fd;
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
 
        buffer = info->buffer;
 
        if (!buffer) { /* Ignore this sync request */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
-       if (buffer->state != CREATED) {
+       if (buffer->state != DBOX_FB_STATE_CREATED) {
                ErrPrint("Invalid state of a FB\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       if (buffer->type != BUFFER_TYPE_FILE) {
+       if (buffer->type != DBOX_FB_TYPE_FILE) {
                ErrPrint("Invalid buffer\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        fd = open(util_uri_to_path(info->id), O_RDONLY);
@@ -133,57 +123,101 @@ static int sync_for_file(struct fb_info *info)
                ErrPrint("Failed to open a file (%s) because of (%s)\n",
                                        util_uri_to_path(info->id), strerror(errno));
 
-               /*!
-                * \note
+               /**
+                * @note
                 * But return ZERO, even if we couldn't get a buffer file,
                 * the viewer can draw empty screen.
                 *
                 * and then update it after it gots update events
                 */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
-       if (read(fd, buffer->data, info->bufsz) != info->bufsz) {
-               ErrPrint("read: %s\n", strerror(errno));
-               if (close(fd) < 0) {
-                       ErrPrint("close: %s\n", strerror(errno));
+       /**
+        * @note
+        * Could we get some advantage if we load a part of file instead of loading all of them?
+        */
+       if (x != 0 || y != 0 || info->w != w || info->h != h) {
+               int iy;
+               register int index;
+               register int width;
+
+               for (iy = y; iy < h; iy++) {
+                       index = iy * info->w + x;
+                       width = w * info->pixels;
+
+                       if (lseek(fd, index * info->pixels, SEEK_SET) != index * info->pixels) {
+                               ErrPrint("lseek: %s\n", strerror(errno));
+                               if (close(fd) < 0) {
+                                       ErrPrint("close: %s\n", strerror(errno));
+                               }
+                               /**
+                                * @note
+                                * But return ZERO, even if we couldn't get a buffer file,
+                                * the viewer can draw empty screen.
+                                *
+                                * and then update it after it gots update events
+                                */
+                               return DBOX_STATUS_ERROR_NONE;
+                       }
+
+                       if (read(fd, ((unsigned int *)buffer->data) + index, width) != width) {
+                               if (close(fd) < 0) {
+                                       ErrPrint("close: %s\n", strerror(errno));
+                               }
+                               /**
+                                * @note
+                                * But return ZERO, even if we couldn't get a buffer file,
+                                * the viewer can draw empty screen.
+                                *
+                                * and then update it after it gots update events
+                                */
+                               return DBOX_STATUS_ERROR_NONE;
+                       }
                }
+       } else {
+               if (read(fd, buffer->data, info->bufsz) != info->bufsz) {
+                       ErrPrint("read: %s\n", strerror(errno));
+                       if (close(fd) < 0) {
+                               ErrPrint("close: %s\n", strerror(errno));
+                       }
 
-               /*!
-                * \note
-                * But return ZERO, even if we couldn't get a buffer file,
-                * the viewer can draw empty screen.
-                *
-                * and then update it after it gots update events
-                */
-               return LB_STATUS_SUCCESS;
+                       /**
+                        * @note
+                        * But return ZERO, even if we couldn't get a buffer file,
+                        * the viewer can draw empty screen.
+                        *
+                        * and then update it after it gots update events
+                        */
+                       return DBOX_STATUS_ERROR_NONE;
+               }
        }
 
        if (close(fd) < 0) {
                ErrPrint("close: %s\n", strerror(errno));
        }
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-static int sync_for_pixmap(struct fb_info *info)
+static int sync_for_pixmap(struct fb_info *info, int x, int y, int w, int h)
 {
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
        XShmSegmentInfo si;
        XImage *xim;
 
        buffer = info->buffer;
        if (!buffer) { /*!< Ignore this sync request */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
-       if (buffer->state != CREATED) {
+       if (buffer->state != DBOX_FB_STATE_CREATED) {
                ErrPrint("Invalid state of a FB\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       if (buffer->type != BUFFER_TYPE_PIXMAP) {
+       if (buffer->type != DBOX_FB_TYPE_PIXMAP) {
                ErrPrint("Invalid buffer\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (!s_info.disp) {
@@ -199,13 +233,13 @@ static int sync_for_pixmap(struct fb_info *info)
                        s_info.visual = DefaultVisualOfScreen(screen);
                } else {
                        ErrPrint("Failed to open a display\n");
-                       return LB_STATUS_ERROR_FAULT;
+                       return DBOX_STATUS_ERROR_FAULT;
                }
        }
 
        if (info->handle == 0) {
                ErrPrint("Pixmap ID is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (info->bufsz == 0) {
@@ -216,13 +250,13 @@ static int sync_for_pixmap(struct fb_info *info)
                 * To sync its contents.
                 */
                DbgPrint("Nothing can be sync\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        si.shmid = shmget(IPC_PRIVATE, info->bufsz, IPC_CREAT | 0666);
        if (si.shmid < 0) {
                ErrPrint("shmget: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        si.readOnly = False;
@@ -232,7 +266,7 @@ static int sync_for_pixmap(struct fb_info *info)
                        ErrPrint("shmctl: %s\n", strerror(errno));
                }
 
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        /*!
@@ -252,7 +286,7 @@ static int sync_for_pixmap(struct fb_info *info)
                        ErrPrint("shmctl: %s\n", strerror(errno));
                }
 
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        xim->data = si.shmaddr;
@@ -261,7 +295,20 @@ static int sync_for_pixmap(struct fb_info *info)
        XShmGetImage(s_info.disp, info->handle, xim, 0, 0, 0xFFFFFFFF);
        XSync(s_info.disp, False);
 
-       memcpy(buffer->data, xim->data, info->bufsz);
+       if (x != 0 || y != 0 || info->w != w || info->h != h) {
+               int ix;
+               int iy;
+               register int index;
+
+               for (iy = y; iy < h; iy++) {
+                       for (ix = x; ix < w; ix++) {
+                               index = iy * info->w + x;
+                               *(((unsigned int *)buffer->data) + index) = *(((unsigned int *)xim->data) + index);
+                       }
+               }
+       } else {
+               memcpy(buffer->data, xim->data, info->bufsz);
+       }
 
        XShmDetach(s_info.disp, &si);
        XDestroyImage(xim);
@@ -274,31 +321,31 @@ static int sync_for_pixmap(struct fb_info *info)
                ErrPrint("shmctl: %s\n", strerror(errno));
        }
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-int fb_sync(struct fb_info *info)
+int fb_sync(struct fb_info *info, int x, int y, int w, int h)
 {
        if (!info) {
                ErrPrint("FB Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (!info->id || info->id[0] == '\0') {
                DbgPrint("Ingore sync\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (!strncasecmp(info->id, SCHEMA_FILE, strlen(SCHEMA_FILE))) {
-               return sync_for_file(info);
+               return sync_for_file(info, x, y, w, h);
        } else if (!strncasecmp(info->id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-               return sync_for_pixmap(info);
+               return sync_for_pixmap(info, x, y, w, h);
        } else if (!strncasecmp(info->id, SCHEMA_SHM, strlen(SCHEMA_SHM))) {
                /* No need to do sync */ 
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
-       return LB_STATUS_ERROR_INVALID;
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
 }
 
 struct fb_info *fb_create(const char *id, int w, int h)
@@ -330,7 +377,7 @@ struct fb_info *fb_create(const char *id, int w, int h)
        } else if (sscanf(info->id, SCHEMA_PIXMAP "%d:%d", &info->handle, &info->pixels) == 2) {
                DbgPrint("PIXMAP-SHMID: %d is gotten (%d)\n", info->handle, info->pixels);
        } else {
-               info->handle = LB_STATUS_ERROR_INVALID;
+               info->handle = DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        info->bufsz = 0;
@@ -345,11 +392,11 @@ int fb_destroy(struct fb_info *info)
 {
        if (!info) {
                ErrPrint("Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (info->buffer) {
-               struct buffer *buffer;
+               dynamicbox_fb_t buffer;
                buffer = info->buffer;
 
                buffer->info = NULL;
@@ -357,7 +404,7 @@ int fb_destroy(struct fb_info *info)
 
        free(info->id);
        free(info);
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_is_created(struct fb_info *info)
@@ -386,7 +433,7 @@ int fb_is_created(struct fb_info *info)
 
 void *fb_acquire_buffer(struct fb_info *info)
 {
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
 
        if (!info) {
                ErrPrint("info == NIL\n");
@@ -404,9 +451,9 @@ void *fb_acquire_buffer(struct fb_info *info)
                                return NULL;
                        }
 
-                       buffer->type = BUFFER_TYPE_PIXMAP;
+                       buffer->type = DBOX_FB_TYPE_PIXMAP;
                        buffer->refcnt = 0;
-                       buffer->state = CREATED;
+                       buffer->state = DBOX_FB_STATE_CREATED;
                        buffer->info = info;
                        info->buffer = buffer;
 
@@ -414,7 +461,7 @@ void *fb_acquire_buffer(struct fb_info *info)
                         * \note
                         * Just update from here.
                         */
-                       sync_for_pixmap(info);
+                       sync_for_pixmap(info, 0, 0, info->w, info->h);
                } else if (!strncasecmp(info->id, SCHEMA_FILE, strlen(SCHEMA_FILE))) {
                        update_fb_size(info);
 
@@ -425,13 +472,13 @@ void *fb_acquire_buffer(struct fb_info *info)
                                return NULL;
                        }
 
-                       buffer->type = BUFFER_TYPE_FILE;
+                       buffer->type = DBOX_FB_TYPE_FILE;
                        buffer->refcnt = 0;
-                       buffer->state = CREATED;
+                       buffer->state = DBOX_FB_STATE_CREATED;
                        buffer->info = info;
                        info->buffer = buffer;
 
-                       sync_for_file(info);
+                       sync_for_file(info, 0, 0, info->w, info->h);
                } else if (!strncasecmp(info->id, SCHEMA_SHM, strlen(SCHEMA_SHM))) {
                        buffer = shmat(info->handle, NULL, 0);
                        if (buffer == (void *)-1) {
@@ -449,10 +496,10 @@ void *fb_acquire_buffer(struct fb_info *info)
        buffer = info->buffer;
 
        switch (buffer->type) {
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_FB_TYPE_PIXMAP:
                buffer->refcnt++;
                break;
-       case BUFFER_TYPE_FILE:
+       case DBOX_FB_TYPE_FILE:
                buffer->refcnt++;
                break;
        default:
@@ -465,33 +512,33 @@ void *fb_acquire_buffer(struct fb_info *info)
 
 int fb_release_buffer(void *data)
 {
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
 
        if (!data) {
                ErrPrint("buffer data == NIL\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       buffer = container_of(data, struct buffer, data);
+       buffer = container_of(data, struct dynamicbox_fb, data);
 
-       if (buffer->state != CREATED) {
+       if (buffer->state != DBOX_FB_STATE_CREATED) {
                ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        switch (buffer->type) {
-       case BUFFER_TYPE_SHM:
+       case DBOX_FB_TYPE_SHM:
                if (shmdt(buffer) < 0) {
                        ErrPrint("shmdt: %s\n", strerror(errno));
                }
                break;
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_FB_TYPE_PIXMAP:
                buffer->refcnt--;
                if (buffer->refcnt == 0) {
                        struct fb_info *info;
                        info = buffer->info;
 
-                       buffer->state = DESTROYED;
+                       buffer->state = DBOX_FB_STATE_DESTROYED;
                        free(buffer);
                
                        if (info && info->buffer == buffer) {
@@ -499,13 +546,13 @@ int fb_release_buffer(void *data)
                        }
                }
                break;
-       case BUFFER_TYPE_FILE:
+       case DBOX_FB_TYPE_FILE:
                buffer->refcnt--;
                if (buffer->refcnt == 0) {
                        struct fb_info *info;
                        info = buffer->info;
 
-                       buffer->state = DESTROYED;
+                       buffer->state = DBOX_FB_STATE_DESTROYED;
                        free(buffer);
 
                        if (info && info->buffer == buffer) {
@@ -518,43 +565,43 @@ int fb_release_buffer(void *data)
                break;
        }
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_refcnt(void *data)
 {
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
        struct shmid_ds buf;
        int ret;
 
        if (!data) {
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       buffer = container_of(data, struct buffer, data);
+       buffer = container_of(data, struct dynamicbox_fb, data);
 
-       if (buffer->state != CREATED) {
+       if (buffer->state != DBOX_FB_STATE_CREATED) {
                ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        switch (buffer->type) {
-       case BUFFER_TYPE_SHM:
+       case DBOX_FB_TYPE_SHM:
                if (shmctl(buffer->refcnt, IPC_STAT, &buf) < 0) {
                        ErrPrint("Error: %s\n", strerror(errno));
-                       return LB_STATUS_ERROR_FAULT;
+                       return DBOX_STATUS_ERROR_FAULT;
                }
 
                ret = buf.shm_nattch;
                break;
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_FB_TYPE_PIXMAP:
                ret = buffer->refcnt;
                break;
-       case BUFFER_TYPE_FILE:
+       case DBOX_FB_TYPE_FILE:
                ret = buffer->refcnt;
                break;
        default:
-               ret = LB_STATUS_ERROR_INVALID;
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                break;
        }
 
@@ -570,12 +617,12 @@ int fb_get_size(struct fb_info *info, int *w, int *h)
 {
        if (!info) {
                ErrPrint("Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        *w = info->w;
        *h = info->h;
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_size(struct fb_info *info)
@@ -591,26 +638,26 @@ int fb_size(struct fb_info *info)
 
 int fb_type(struct fb_info *info)
 {
-       struct buffer *buffer;
+       dynamicbox_fb_t buffer;
 
        if (!info) {
-               return BUFFER_TYPE_ERROR;
+               return DBOX_FB_TYPE_ERROR;
        }
 
        buffer = info->buffer;
        if (!buffer) {
-               int type = BUFFER_TYPE_ERROR;
+               int type = DBOX_FB_TYPE_ERROR;
                /*!
                 * \note
                 * Try to get this from SCHEMA
                 */
                if (info->id) {
                        if (!strncasecmp(info->id, SCHEMA_FILE, strlen(SCHEMA_FILE))) {
-                               type = BUFFER_TYPE_FILE;
+                               type = DBOX_FB_TYPE_FILE;
                        } else if (!strncasecmp(info->id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-                               type = BUFFER_TYPE_PIXMAP;
+                               type = DBOX_FB_TYPE_PIXMAP;
                        } else if (!strncasecmp(info->id, SCHEMA_SHM, strlen(SCHEMA_SHM))) {
-                               type = BUFFER_TYPE_SHM;
+                               type = DBOX_FB_TYPE_SHM;
                        }
                }
 
index a38eb5f..e90f769 100644 (file)
@@ -28,7 +28,8 @@
 #include <sys/ipc.h>
 
 #include <dlog.h>
-#include <livebox-errno.h> /* For error code */
+#include <dynamicbox_errno.h> /* For error code */
+#include <dynamicbox_buffer.h>
 
 #include "debug.h"
 #include "util.h"
@@ -47,17 +48,6 @@ struct fb_info {
        int handle;
 };
 
-struct buffer { /*!< Must has to be sync with slave & provider */
-       enum {
-               CREATED = 0x00beef00,
-               DESTROYED = 0x00dead00
-       } state;
-       enum buffer_type type;
-       int refcnt;
-       void *info;
-       char data[];
-};
-
 static struct {
 } s_info = {
 };
@@ -85,17 +75,17 @@ static inline int sync_for_file(struct fb_info *info)
        buffer = info->buffer;
 
        if (!buffer) { /* Ignore this sync request */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (buffer->state != CREATED) {
                ErrPrint("Invalid state of a FB\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
-       if (buffer->type != BUFFER_TYPE_FILE) {
+       if (buffer->type != DBOX_BUFFER_TYPE_FILE) {
                ErrPrint("Invalid buffer\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        fd = open(util_uri_to_path(info->id), O_RDONLY);
@@ -110,7 +100,7 @@ static inline int sync_for_file(struct fb_info *info)
                 *
                 * and then update it after it gots update events
                 */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (read(fd, buffer->data, info->bufsz) != info->bufsz) {
@@ -126,25 +116,25 @@ static inline int sync_for_file(struct fb_info *info)
                 *
                 * and then update it after it gots update events
                 */
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (close(fd) < 0) {
                ErrPrint("close: %s\n", strerror(errno));
        }
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-int fb_sync(struct fb_info *info)
+int fb_sync(struct fb_info *info, int x, int y, int w, int h)
 {
        if (!info) {
                ErrPrint("FB Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (!info->id || info->id[0] == '\0') {
                DbgPrint("Ingore sync\n");
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
        if (!strncasecmp(info->id, SCHEMA_FILE, strlen(SCHEMA_FILE))) {
@@ -152,10 +142,10 @@ int fb_sync(struct fb_info *info)
        } else if (!strncasecmp(info->id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
        } else if (!strncasecmp(info->id, SCHEMA_SHM, strlen(SCHEMA_SHM))) {
                /* No need to do sync */ 
-               return LB_STATUS_SUCCESS;
+               return DBOX_STATUS_ERROR_NONE;
        }
 
-       return LB_STATUS_ERROR_INVALID;
+       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
 }
 
 struct fb_info *fb_create(const char *id, int w, int h)
@@ -190,7 +180,7 @@ struct fb_info *fb_create(const char *id, int w, int h)
                free(info);
                return NULL;
        } else {
-               info->handle = LB_STATUS_ERROR_INVALID;
+               info->handle = DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        info->bufsz = 0;
@@ -205,7 +195,7 @@ int fb_destroy(struct fb_info *info)
 {
        if (!info) {
                ErrPrint("Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        if (info->buffer) {
@@ -217,7 +207,7 @@ int fb_destroy(struct fb_info *info)
 
        free(info->id);
        free(info);
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_is_created(struct fb_info *info)
@@ -267,7 +257,7 @@ void *fb_acquire_buffer(struct fb_info *info)
                                return NULL;
                        }
 
-                       buffer->type = BUFFER_TYPE_FILE;
+                       buffer->type = DBOX_BUFFER_TYPE_FILE;
                        buffer->refcnt = 0;
                        buffer->state = CREATED;
                        buffer->info = info;
@@ -291,10 +281,10 @@ void *fb_acquire_buffer(struct fb_info *info)
        buffer = info->buffer;
 
        switch (buffer->type) {
-       case BUFFER_TYPE_FILE:
+       case DBOX_BUFFER_TYPE_FILE:
                buffer->refcnt++;
                break;
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_BUFFER_TYPE_PIXMAP:
        default:
                DbgPrint("Unknwon FP: %d\n", buffer->type);
                break;
@@ -309,29 +299,29 @@ int fb_release_buffer(void *data)
 
        if (!data) {
                ErrPrint("buffer data == NIL\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        buffer = container_of(data, struct buffer, data);
 
        if (buffer->state != CREATED) {
                ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        switch (buffer->type) {
-       case BUFFER_TYPE_SHM:
+       case DBOX_BUFFER_TYPE_SHM:
                if (shmdt(buffer) < 0) {
                        ErrPrint("shmdt: %s\n", strerror(errno));
                }
                break;
-       case BUFFER_TYPE_FILE:
+       case DBOX_BUFFER_TYPE_FILE:
                buffer->refcnt--;
                if (buffer->refcnt == 0) {
                        struct fb_info *info;
                        info = buffer->info;
 
-                       buffer->state = DESTROYED;
+                       buffer->state = DBOX_FB_STATE_DESTROYED;
                        free(buffer);
 
                        if (info && info->buffer == buffer) {
@@ -339,13 +329,13 @@ int fb_release_buffer(void *data)
                        }
                }
                break;
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_BUFFER_TYPE_PIXMAP:
        default:
                ErrPrint("Unknwon buffer type\n");
                break;
        }
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_refcnt(void *data)
@@ -355,31 +345,31 @@ int fb_refcnt(void *data)
        int ret;
 
        if (!data) {
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        buffer = container_of(data, struct buffer, data);
 
        if (buffer->state != CREATED) {
                ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        switch (buffer->type) {
-       case BUFFER_TYPE_SHM:
+       case DBOX_BUFFER_TYPE_SHM:
                if (shmctl(buffer->refcnt, IPC_STAT, &buf) < 0) {
                        ErrPrint("Error: %s\n", strerror(errno));
-                       return LB_STATUS_ERROR_FAULT;
+                       return DBOX_STATUS_ERROR_FAULT;
                }
 
                ret = buf.shm_nattch;
                break;
-       case BUFFER_TYPE_FILE:
+       case DBOX_BUFFER_TYPE_FILE:
                ret = buffer->refcnt;
                break;
-       case BUFFER_TYPE_PIXMAP:
+       case DBOX_BUFFER_TYPE_PIXMAP:
        default:
-               ret = LB_STATUS_ERROR_INVALID;
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                break;
        }
 
@@ -395,12 +385,12 @@ int fb_get_size(struct fb_info *info, int *w, int *h)
 {
        if (!info) {
                ErrPrint("Handle is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        *w = info->w;
        *h = info->h;
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int fb_size(struct fb_info *info)
@@ -419,23 +409,23 @@ int fb_type(struct fb_info *info)
        struct buffer *buffer;
 
        if (!info) {
-               return BUFFER_TYPE_ERROR;
+               return DBOX_BUFFER_TYPE_ERROR;
        }
 
        buffer = info->buffer;
        if (!buffer) {
-               int type = BUFFER_TYPE_ERROR;
+               int type = DBOX_BUFFER_TYPE_ERROR;
                /*!
                 * \note
                 * Try to get this from SCHEMA
                 */
                if (info->id) {
                        if (!strncasecmp(info->id, SCHEMA_FILE, strlen(SCHEMA_FILE))) {
-                               type = BUFFER_TYPE_FILE;
+                               type = DBOX_BUFFER_TYPE_FILE;
                        } else if (!strncasecmp(info->id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
                                /* Unsupported type */
                        } else if (!strncasecmp(info->id, SCHEMA_SHM, strlen(SCHEMA_SHM))) {
-                               type = BUFFER_TYPE_SHM;
+                               type = DBOX_BUFFER_TYPE_SHM;
                        }
                }
 
index e890d0b..04d75da 100644 (file)
@@ -31,7 +31,7 @@
 
 #include <dlog.h>
 #include <secure_socket.h>
-#include <livebox-errno.h>
+#include <dynamicbox_errno.h>
 
 #include "client.h"
 #include "debug.h"
@@ -207,7 +207,7 @@ static inline int file_service_open(void)
  */
 static void write_item_to_pipe(struct request_item *item, int ret)
 {
-       item->ret = LB_STATUS_ERROR_FAULT;
+       item->ret = DBOX_STATUS_ERROR_FAULT;
        if (write(s_info.evt_pipe[PIPE_WRITE], &item, sizeof(item)) != sizeof(item)) {
                ErrPrint("write: %s\n", strerror(errno));
                free(item->filename);
@@ -275,7 +275,7 @@ static void *file_service_main(void *data)
                                        head = malloc(recvsz);
                                        if (!head) {
                                                ErrPrint("Heap: %s\n", strerror(errno));
-                                               ret = LB_STATUS_ERROR_MEMORY;
+                                               ret = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -293,7 +293,7 @@ static void *file_service_main(void *data)
                                                free(head);
                                                head = NULL;
                                                recv_state = RECV_INIT;
-                                               ret = LB_STATUS_ERROR_FAULT;
+                                               ret = DBOX_STATUS_ERROR_FAULT;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -313,7 +313,7 @@ static void *file_service_main(void *data)
                                                head = NULL;
                                                recv_state = RECV_INIT;
 
-                                               ret = LB_STATUS_ERROR_MEMORY;
+                                               ret = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -328,7 +328,7 @@ static void *file_service_main(void *data)
                                                free(head);
                                                head = NULL;
                                                recv_state = RECV_INIT;
-                                               ret = LB_STATUS_ERROR_FAULT;
+                                               ret = DBOX_STATUS_ERROR_FAULT;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -341,7 +341,7 @@ static void *file_service_main(void *data)
                                                head = NULL;
                                                recv_state = RECV_INIT;
 
-                                               ret = LB_STATUS_ERROR_IO;
+                                               ret = DBOX_STATUS_ERROR_IO_ERROR;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -355,7 +355,7 @@ static void *file_service_main(void *data)
                                        free(head);
                                        head = NULL;
                                        recv_state = RECV_INIT;
-                                       ret = LB_STATUS_ERROR_INVALID;
+                                       ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                                        write_item_to_pipe(item, ret);
                                        item = NULL;
                                }
@@ -367,7 +367,7 @@ static void *file_service_main(void *data)
                                                free(head);
                                                head = NULL;
                                                recv_state = RECV_INIT;
-                                               ret = LB_STATUS_ERROR_MEMORY;
+                                               ret = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -386,7 +386,7 @@ static void *file_service_main(void *data)
                                        free(body);
                                        body = NULL;
                                        recv_state = RECV_INIT;
-                                       ret = LB_STATUS_ERROR_FAULT;
+                                       ret = DBOX_STATUS_ERROR_FAULT;
                                        write_item_to_pipe(item, ret);
                                        item = NULL;
                                        break;
@@ -402,7 +402,7 @@ static void *file_service_main(void *data)
                                                free(body);
                                                body = NULL;
                                                recv_state = RECV_INIT;
-                                               ret = LB_STATUS_ERROR_FAULT;
+                                               ret = DBOX_STATUS_ERROR_FAULT;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -420,7 +420,7 @@ static void *file_service_main(void *data)
                                                body = NULL;
                                                recv_state = RECV_INIT;
 
-                                               ret = LB_STATUS_ERROR_MEMORY;
+                                               ret = DBOX_STATUS_ERROR_OUT_OF_MEMORY;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -437,7 +437,7 @@ static void *file_service_main(void *data)
                                                body = NULL;
                                                recv_state = RECV_INIT;
 
-                                               ret = LB_STATUS_ERROR_IO;
+                                               ret = DBOX_STATUS_ERROR_IO_ERROR;
                                                write_item_to_pipe(item, ret);
                                                item = NULL;
                                                break;
@@ -452,7 +452,7 @@ static void *file_service_main(void *data)
                                                        if (close(file_fd) < 0) {
                                                                ErrPrint("close: %s\n", strerror(errno));
                                                        }
-                                                       ret = LB_STATUS_SUCCESS;
+                                                       ret = DBOX_STATUS_ERROR_NONE;
                                                        write_item_to_pipe(item, ret);
                                                        item = NULL;
                                                }
@@ -475,14 +475,14 @@ static void *file_service_main(void *data)
                                        head = NULL;
                                        recv_state = RECV_INIT;
 
-                                       ret = LB_STATUS_ERROR_FAULT;
+                                       ret = DBOX_STATUS_ERROR_FAULT;
                                        write_item_to_pipe(item, ret);
                                        item = NULL;
                                }
                                break;
                        default:
                                ErrPrint("Unknown event: %d\n", recv_state);
-                               ret = LB_STATUS_ERROR_FAULT;
+                               ret = DBOX_STATUS_ERROR_FAULT;
                                write_item_to_pipe(item, ret);
                                item = NULL;
                                break;
diff --git a/src/livebox.c b/src/livebox.c
deleted file mode 100644 (file)
index 586555e..0000000
+++ /dev/null
@@ -1,5055 +0,0 @@
-/*
- * Copyright 2013  Samsung Electronics Co., Ltd
- *
- * Licensed under the Flora License, Version 1.1 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://floralicense.org/license/
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <stdlib.h> /* malloc */
-#include <string.h> /* strdup */
-#include <math.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-
-#include <gio/gio.h>
-#include <aul.h>
-#include <dlog.h>
-
-#include <com-core_packet.h>
-#include <packet.h>
-#include <livebox-service.h>
-#include <livebox-errno.h>
-
-#include "debug.h"
-#include "fb.h"
-#include "livebox.h"
-#include "livebox_internal.h"
-#include "dlist.h"
-#include "util.h"
-#include "master_rpc.h"
-#include "client.h"
-#include "conf.h"
-#include "provider_cmd_list.h"
-
-#define EAPI __attribute__((visibility("default")))
-
-#if defined(FLOG)
-FILE *__file_log_fp;
-#endif
-
-#define ACCESS_TYPE_DOWN 0
-#define ACCESS_TYPE_MOVE 1
-#define ACCESS_TYPE_UP 2
-#define ACCESS_TYPE_CUR 0
-#define ACCESS_TYPE_NEXT 1
-#define ACCESS_TYPE_PREV 2
-#define ACCESS_TYPE_OFF 3
-
-static int default_launch_handler(struct livebox *handler, const char *appid, void *data);
-
-enum event_state {
-       INFO_STATE_CALLBACK_IN_IDLE = 0x00,
-       INFO_STATE_CALLBACK_IN_PROCESSING = 0x01,
-};
-
-static struct info {
-       struct dlist *livebox_list;
-       struct dlist *livebox_common_list;
-
-       struct dlist *event_list;
-       struct dlist *fault_list;
-
-       int init_count;
-       int prevent_overwrite;
-       enum event_state event_state;
-       enum event_state fault_state;
-       guint job_timer;
-       struct dlist *job_list;
-
-       struct launch {
-               int (*handler)(struct livebox *handler, const char *appid, void *data);
-               void *data;
-       } launch;
-} s_info = {
-       .livebox_list = NULL,
-       .event_list = NULL,
-       .fault_list = NULL,
-       .init_count = 0,
-       .prevent_overwrite = 0,
-       .event_state = INFO_STATE_CALLBACK_IN_IDLE,
-       .fault_state = INFO_STATE_CALLBACK_IN_IDLE,
-       .job_timer = 0,
-       .job_list = NULL,
-       .launch = {
-               .handler = default_launch_handler,
-               .data = NULL,
-       },
-};
-
-struct cb_info {
-       ret_cb_t cb;
-       void *data;
-};
-
-struct event_info {
-       int is_deleted;
-       int (*handler)(struct livebox *handler, enum livebox_event_type event, void *data);
-       void *user_data;
-};
-
-struct fault_info {
-       int is_deleted;
-       int (*handler)(enum livebox_fault_type event, const char *pkgname, const char *filename, const char *func, void *data);
-       void *user_data;
-};
-
-static void lb_pixmap_acquired_cb(struct livebox *handler, const struct packet *result, void *data);
-static void pd_pixmap_acquired_cb(struct livebox *handler, const struct packet *result, void *data);
-
-static int default_launch_handler(struct livebox *handler, const char *appid, void *data)
-{
-       int ret;
-
-       ret = aul_launch_app(appid, NULL);
-       if (ret <= 0) {
-               ErrPrint("Failed to launch an app %s (%d)\n", appid, ret);
-       }
-
-/*
-       app_control_h service;
-
-       DbgPrint("AUTO_LAUNCH [%s]\n", handler->common->lb.auto_launch);
-
-       ret = app_control_create(&service);
-       if (ret == APP_CONTROL_ERROR_NONE) {
-               app_control_set_package(service, handler->common->lb.auto_launch);
-               app_control_send_launch_request(service, NULL, NULL);
-               app_control_destroy(service);
-       } else {
-               ErrPrint("Failed to launch an app %s (%d)\n", handler->common->lb.auto_launch, ret);
-       }
-*/
-
-       return ret > 0 ? LB_STATUS_SUCCESS : LB_STATUS_ERROR_FAULT;
-}
-
-static inline void default_create_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default created event handler: %d\n", ret);
-}
-
-static inline void default_delete_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default deleted event handler: %d\n", ret);
-}
-
-static inline void default_pinup_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default pinup event handler: %d\n", ret);
-}
-
-static inline void default_group_changed_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default group changed event handler: %d\n", ret);
-}
-
-static inline void default_period_changed_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default period changed event handler: %d\n", ret);
-}
-
-static inline void default_pd_created_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default PD created event handler: %d\n", ret);
-}
-
-static inline void default_pd_destroyed_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default PD destroyed event handler: %d\n", ret);
-}
-
-static inline void default_lb_size_changed_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default LB size changed event handler: %d\n", ret);
-}
-
-static inline void default_update_mode_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default update mode set event handler: %d\n", ret);
-}
-
-static inline void default_access_event_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default access event handler: %d\n", ret);
-}
-
-static inline void default_key_event_cb(struct livebox *handler, int ret, void *data)
-{
-       DbgPrint("Default key event handler: %d\n", ret);
-}
-
-static inline __attribute__((always_inline)) struct cb_info *create_cb_info(ret_cb_t cb, void *data)
-{
-       struct cb_info *info;
-
-       info = malloc(sizeof(*info));
-       if (!info) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return NULL;
-       }
-
-       info->cb = cb;
-       info->data = data;
-       return info;
-}
-
-static inline void destroy_cb_info(struct cb_info *info)
-{
-       free(info);
-}
-
-static int do_fb_lock(int fd)
-{
-        struct flock flock;
-       int ret;
-
-       flock.l_type = F_RDLCK;
-       flock.l_whence = SEEK_SET;
-       flock.l_start = 0;
-       flock.l_len = 0;
-       flock.l_pid = getpid();
-
-       do {
-               ret = fcntl(fd, F_SETLKW, &flock);
-               if (ret < 0) {
-                       ret = errno;
-                       ErrPrint("fcntl: %s\n", strerror(errno));
-               }
-       } while (ret == EINTR);
-
-       return ret;
-}
-
-static int do_fb_unlock(int fd)
-{
-       struct flock flock;
-       int ret;
-
-       flock.l_type = F_UNLCK;
-       flock.l_whence = SEEK_SET;
-       flock.l_start = 0;
-       flock.l_len = 0;
-       flock.l_pid = getpid();
-
-       do {
-               ret = fcntl(fd, F_SETLKW, &flock);
-               if (ret < 0) {
-                       ret = errno;
-                       ErrPrint("fcntl: %s\n", strerror(errno));
-               }
-       } while (ret == EINTR);
-
-       return ret;
-}
-
-int lb_destroy_lock_file(struct livebox_common *common, int is_pd)
-{
-       if (is_pd) {
-               if (!common->pd.lock) {
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (close(common->pd.lock_fd) < 0) {
-                       ErrPrint("close: %s\n", strerror(errno));
-               }
-               common->pd.lock_fd = -1;
-
-               if (unlink(common->pd.lock) < 0) {
-                       ErrPrint("unlink: %s\n", strerror(errno));
-               }
-
-               free(common->pd.lock);
-               common->pd.lock = NULL;
-       } else {
-               if (!common->lb.lock) {
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (close(common->lb.lock_fd) < 0) {
-                       ErrPrint("close: %s\n", strerror(errno));
-               }
-               common->lb.lock_fd = -1;
-
-               if (unlink(common->lb.lock) < 0) {
-                       ErrPrint("unlink: %s\n", strerror(errno));
-               }
-
-               free(common->lb.lock);
-               common->lb.lock = NULL;
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-int lb_create_lock_file(struct livebox_common *common, int is_pd)
-{
-       int len;
-       char *file;
-
-       len = strlen(common->id);
-       file = malloc(len + 20);
-       if (!file) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       snprintf(file, len + 20, "%s.%s.lck", util_uri_to_path(common->id), is_pd ? "pd" : "lb");
-
-       if (is_pd) {
-               common->pd.lock_fd = open(file, O_RDONLY);
-               if (common->pd.lock_fd < 0) {
-                       ErrPrint("open: %s\n", strerror(errno));
-                       free(file);
-                       return LB_STATUS_ERROR_IO;
-               }
-
-               common->pd.lock = file;
-       } else {
-               common->lb.lock_fd = open(file, O_RDONLY);
-               if (common->lb.lock_fd < 0) {
-                       ErrPrint("open: %s\n", strerror(errno));
-                       free(file);
-                       return LB_STATUS_ERROR_IO;
-               }
-
-               common->lb.lock = file;
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-static void update_mode_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-               goto errout;
-       }
-
-       if (ret < 0) {
-               ErrPrint("Resize request is failed: %d\n", ret);
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.update_mode.cb(handler, ret, handler->cbs.update_mode.data);
-       handler->cbs.update_mode.cb = NULL;
-       handler->cbs.update_mode.data = NULL;
-       handler->common->request.update_mode = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void resize_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-               goto errout;
-       }
-
-       /*!
-        * \note
-        * In case of resize request,
-        * The livebox handler will not have resized value right after this callback,
-        * It can only get the new size when it makes updates.
-        *
-        * So the user can only get the resized value(result) from the first update event
-        * after this request.
-        */
-       if (ret < 0) {
-               ErrPrint("Resize request is failed: %d\n", ret);
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.size_changed.cb(handler, ret, handler->cbs.size_changed.data);
-       handler->cbs.size_changed.cb = NULL;
-       handler->cbs.size_changed.data = NULL;
-       handler->common->request.size_changed = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void text_signal_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-       void *cbdata;
-       struct cb_info *info = data;
-       ret_cb_t cb;
-
-       cbdata = info->data;
-       cb = info->cb;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (cb) {
-               cb(handler, ret, cbdata);
-       }
-       return;
-}
-
-static void set_group_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-               goto errout;
-       }
-
-       if (ret < 0) {
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.group_changed.cb(handler, ret, handler->cbs.group_changed.data);
-       handler->cbs.group_changed.cb = NULL;
-       handler->cbs.group_changed.data = NULL;
-       handler->common->request.group_changed = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void period_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-               goto errout;
-       }
-
-       if (ret < 0) {
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.period_changed.cb(handler, ret, handler->cbs.period_changed.data);
-       handler->cbs.period_changed.cb = NULL;
-       handler->cbs.period_changed.data = NULL;
-       handler->common->request.period_changed = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void del_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       struct cb_info *info = data;
-       int ret;
-       ret_cb_t cb;
-       void *cbdata;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ErrPrint("Connection lost?\n");
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid argument\n");
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (ret == 0) {
-               handler->cbs.deleted.cb = cb;
-               handler->cbs.deleted.data = cbdata;
-       } else if (cb) {
-               cb(handler, ret, cbdata);
-       }
-
-       /*!
-        * \note
-        * Do not call the deleted callback from here.
-        * master will send the "deleted" event.
-        * Then invoke this callback.
-        *
-        * if (handler->cbs.deleted.cb)
-        *      handler->cbs.deleted.cb(handler, ret, handler->cbs.deleted.data);
-        */
-}
-
-static void new_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-       struct cb_info *info = data;
-       ret_cb_t cb;
-       void *cbdata;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (ret >= 0) {
-               handler->cbs.created.cb = cb;
-               handler->cbs.created.data = cbdata;
-
-               /*!
-                * \note
-                * Don't go anymore ;)
-                */
-               return;
-       } else if (cb) {
-               /*!
-                * \note
-                * It means the current instance is not created,
-                * so user has to know about this.
-                * notice it to user using "deleted" event.
-                */
-               cb(handler, ret, cbdata);
-       }
-
-       lb_unref(handler, 1);
-}
-
-static void pd_create_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-               goto errout;
-       }
-
-       if (ret < 0) {
-               ErrPrint("Failed to create a PD[%d]\n", ret);
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.pd_created.cb(handler, ret, handler->cbs.pd_created.data);
-       handler->cbs.pd_created.cb = NULL;
-       handler->cbs.pd_created.data = NULL;
-       handler->common->request.pd_created = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void activated_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-       struct cb_info *info = data;
-       void *cbdata;
-       ret_cb_t cb;
-       const char *pkgname = "";
-
-       cbdata = info->data;
-       cb = info->cb;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "is", &ret, &pkgname) != 2) {
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (cb) {
-               cb(handler, ret, cbdata);
-       }
-}
-
-static void pd_destroy_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-       ret_cb_t cb;
-       void *cbdata;
-       struct cb_info *info = data;
-
-       cbdata = info->data;
-       cb = info->cb;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ErrPrint("Result is NIL (may connection lost)\n");
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ErrPrint("Invalid parameter\n");
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.pd_destroyed.cb = cb;
-               handler->cbs.pd_destroyed.data = cbdata;
-       } else {
-               handler->common->is_pd_created = 0;
-               handler->common->request.pd_destroyed = 0;
-
-               if (cb) {
-                       cb(handler, ret, cbdata);
-               }
-       }
-}
-
-static void delete_cluster_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       struct cb_info *info = data;
-       int ret;
-       ret_cb_t cb;
-       void *cbdata;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (cb) {
-               cb(handler, ret, cbdata);
-       }
-}
-
-static void delete_category_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       struct cb_info *info = data;
-       int ret;
-       ret_cb_t cb;
-       void *cbdata;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (cb) {
-               cb(handler, ret, cbdata);
-       }
-}
-
-static int lb_acquire_lb_pixmap(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       const char *id;
-       int ret;
-       unsigned int cmd = CMD_LB_ACQUIRE_PIXMAP;
-
-       id = fb_id(handler->common->lb.fb);
-       if (!id || strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, lb_pixmap_acquired_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-static void lb_pixmap_acquired_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int pixmap;
-       int ret = LB_STATUS_ERROR_INVALID;
-       ret_cb_t cb;
-       void *cbdata;
-       struct cb_info *info = data;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               pixmap = 0; /* PIXMAP 0 means error */
-       } else if (packet_get(result, "ii", &pixmap, &ret) != 2) {
-               pixmap = 0;
-       }
-
-       if (ret == (int)LB_STATUS_ERROR_BUSY) {
-               ret = lb_acquire_lb_pixmap(handler, cb, cbdata);
-               DbgPrint("Busy, Try again: %d\n", ret);
-               /* Try again */
-       } else if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               if (cb) {
-                       cb(handler, pixmap, cbdata);
-               }
-
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       } else {
-               if (cb) {
-                       cb(handler, pixmap, cbdata);
-               }
-       }
-}
-
-static int lb_acquire_pd_pixmap(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       const char *id;
-       int ret;
-       unsigned int cmd = CMD_PD_ACQUIRE_PIXMAP;
-
-       id = fb_id(handler->common->pd.fb);
-       if (!id || strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, pd_pixmap_acquired_cb, cbinfo);
-       if (ret < 0) {
-               /*!
-                * \note
-                * Packet will be destroyed by master_rpc_async_request
-                */
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-static void pd_pixmap_acquired_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int pixmap;
-       int ret;
-       ret_cb_t cb;
-       void *cbdata;
-       struct cb_info *info = data;
-
-       cb = info->cb;
-       cbdata = info->data;
-       destroy_cb_info(info);
-
-       if (!result) {
-               pixmap = 0; /* PIXMAP 0 means error */
-               ret = LB_STATUS_ERROR_FAULT;
-       } else if (packet_get(result, "ii", &pixmap, &ret) != 2) {
-               pixmap = 0;
-               ret = LB_STATUS_ERROR_INVALID;
-       }
-
-       if (ret == (int)LB_STATUS_ERROR_BUSY) {
-               ret = lb_acquire_pd_pixmap(handler, cb, cbdata);
-               DbgPrint("Busy, Try again: %d\n", ret);
-               /* Try again */
-       } else if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               if (cb) {
-                       cb(handler, pixmap, cbdata);
-               }
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       } else {
-               if (cb) {
-                       DbgPrint("ret: %d, pixmap: %d\n", ret, pixmap);
-                       cb(handler, pixmap, cbdata);
-               }
-       }
-}
-
-static void pinup_done_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               goto errout;
-       } else if (packet_get(result, "i", &ret) != 1) {
-               goto errout;
-       }
-
-       if (ret < 0) {
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.pinup.cb(handler, ret, handler->cbs.pinup.data);
-       handler->cbs.pinup.cb = NULL;
-       handler->cbs.pinup.data = NULL;
-       handler->common->request.pinup = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void key_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               return;
-       }
-
-       if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-               return;
-       }
-
-       if (ret != LB_STATUS_SUCCESS) {
-               goto errout;
-       }
-
-       return;
-errout:
-       handler->cbs.key_event.cb(handler, ret, handler->cbs.key_event.data);
-       handler->cbs.key_event.cb = NULL;
-       handler->cbs.key_event.data = NULL;
-       handler->common->request.key_event = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static void access_ret_cb(struct livebox *handler, const struct packet *result, void *data)
-{
-       int ret;
-
-       if (!result) {
-               ret = LB_STATUS_ERROR_FAULT;
-               return;
-       }
-
-       if (packet_get(result, "i", &ret) != 1) {
-               ret = LB_STATUS_ERROR_INVALID;
-               return;
-       }
-
-       if (ret != LB_STATUS_SUCCESS) {
-               goto errout;
-       }
-
-       return;
-
-errout:
-       handler->cbs.access_event.cb(handler, ret, handler->cbs.access_event.data);
-       handler->cbs.access_event.cb = NULL;
-       handler->cbs.access_event.data = NULL;
-       handler->common->request.access_event = 0;
-
-       if (ret == (int)LB_STATUS_ERROR_NOT_EXIST && handler->refcnt == 2) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-}
-
-static int send_access_event(struct livebox *handler, const char *event, int x, int y, int type)
-{
-       struct packet *packet;
-       double timestamp;
-
-       timestamp = util_timestamp();
-
-       packet = packet_create(event, "ssdiii", handler->common->pkgname, handler->common->id, timestamp, x, y, type);
-       if (!packet) {
-               ErrPrint("Failed to build packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_async_request(handler, packet, 0, access_ret_cb, NULL);
-}
-
-static int send_key_event(struct livebox *handler, const char *event, unsigned int keycode)
-{
-       struct packet *packet;
-       double timestamp;
-
-       timestamp = util_timestamp();
-       packet = packet_create(event, "ssdi", handler->common->pkgname, handler->common->id, timestamp, keycode);
-       if (!packet) {
-               ErrPrint("Failed to build packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_async_request(handler, packet, 0, key_ret_cb, NULL);
-}
-
-static int send_mouse_event(struct livebox *handler, const char *event, int x, int y)
-{
-       struct packet *packet;
-       double timestamp;
-
-       timestamp = util_timestamp();
-       packet = packet_create_noack(event, "ssdii", handler->common->pkgname, handler->common->id, timestamp, x, y);
-       if (!packet) {
-               ErrPrint("Failed to build param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(handler, packet);
-}
-
-static int initialize_livebox(void *disp, int use_thread)
-{
-       int ret;
-#if defined(FLOG)
-       char filename[BUFSIZ];
-       snprintf(filename, sizeof(filename), "/tmp/%d.box.log", getpid());
-       __file_log_fp = fopen(filename, "w+t");
-       if (!__file_log_fp) {
-               __file_log_fp = fdopen(1, "w+t");
-       }
-#endif
-       ret = livebox_service_init();
-       if (ret != LB_STATUS_SUCCESS) {
-               return ret;
-       }
-
-       ret = fb_init(disp);
-       if (ret != LB_STATUS_SUCCESS) {
-               livebox_service_fini();
-               return ret;
-       }
-
-       ret = client_init(use_thread);
-       if (ret != LB_STATUS_SUCCESS) {
-               fb_fini();
-               livebox_service_fini();
-               return ret;
-       }
-
-       s_info.init_count++;
-       return ret;
-}
-
-EAPI int livebox_init_with_options(void *disp, int prevent_overwrite, double event_filter, int use_thread)
-{
-       if (s_info.init_count > 0) {
-               s_info.init_count++;
-               return LB_STATUS_SUCCESS;
-       }
-
-       /*!
-        * \note
-        * Some application doesn't want to use the environment value.
-        * So set them using arguments.
-        */
-       s_info.prevent_overwrite = prevent_overwrite;
-       conf_set_event_filter(event_filter);
-
-       return initialize_livebox(disp, use_thread);
-}
-
-EAPI int livebox_init(void *disp)
-{
-       const char *env;
-
-       if (s_info.init_count > 0) {
-               s_info.init_count++;
-               return LB_STATUS_SUCCESS;
-       }
-
-       env = getenv("PROVIDER_DISABLE_PREVENT_OVERWRITE");
-       if (env && !strcasecmp(env, "true")) {
-               s_info.prevent_overwrite = 1;
-       }
-
-       env = getenv("PROVIDER_EVENT_FILTER");
-       if (env) {
-               double event_filter;
-               if (sscanf(env, "%lf", &event_filter) == 1) {
-                       conf_set_event_filter(event_filter);
-               }
-       }
-
-       return initialize_livebox(disp, 0);
-}
-
-EAPI int livebox_fini(void)
-{
-       if (s_info.init_count <= 0) {
-               ErrPrint("Doesn't initialized\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       s_info.init_count--;
-       if (s_info.init_count > 0) {
-               ErrPrint("init count : %d\n", s_info.init_count);
-               return LB_STATUS_SUCCESS;
-       }
-
-       client_fini();
-       fb_fini();
-       livebox_service_fini();
-       return LB_STATUS_SUCCESS;
-}
-
-static inline char *lb_pkgname(const char *pkgname)
-{
-       char *lb;
-
-       lb = livebox_service_pkgname(pkgname);
-       if (!lb) {
-               if (util_validate_livebox_package(pkgname) == 0) {
-                       return strdup(pkgname);
-               }
-       }
-
-       return lb;
-}
-
-static struct livebox_common *find_sharable_common_handle(const char *pkgname, const char *content, int w, int h, const char *cluster, const char *category)
-{
-       struct dlist *l;
-       struct livebox_common *common;
-
-       if (!conf_shared_content()) {
-               /*!
-                * Shared content option is turnned off.
-                */
-               return NULL;
-       }
-
-       dlist_foreach(s_info.livebox_common_list, l, common) {
-               if (common->state != CREATE) {
-                       continue;
-               }
-
-               if (strcmp(common->pkgname, pkgname)) {
-                       continue;
-               }
-
-               if (strcmp(common->cluster, cluster)) {
-                       DbgPrint("Cluster mismatched\n");
-                       continue;
-               }
-
-               if (strcmp(common->category, category)) {
-                       DbgPrint("Category mismatched\n");
-                       continue;
-               }
-
-               if (common->content && content) {
-                       if (strcmp(common->content, content)) {
-                               DbgPrint("%s Content ([%s] <> [%s])\n", common->pkgname, common->content, content);
-                               continue;       
-                       }
-               } else {
-                       int c1_len;
-                       int c2_len;
-
-                       /*!
-                        * \note
-                        * We assumes "" (ZERO length string) to NULL
-                        */
-                       c1_len = common->content ? strlen(common->content) : 0;
-                       c2_len = content ? strlen(content) : 0;
-                       if (c1_len != c2_len) {
-                               DbgPrint("%s Content %p <> %p\n", common->pkgname, common->content, content);
-                               continue;
-                       }
-               }
-
-               if (common->request.size_changed) {
-                       DbgPrint("Changing size\n");
-                       /*!
-                        * \note
-                        * Do not re-use resizing instance.
-                        * We will not use predicted size.
-                        */
-                       continue;
-               }
-
-               if (common->request.created) {
-                       DbgPrint("Creating now but re-use it (%s)\n", common->pkgname);
-               }
-
-               if (common->lb.width != w || common->lb.height != h) {
-                       DbgPrint("Size mismatched\n");
-                       continue;
-               }
-
-               DbgPrint("common handle is found: %p\n", common);
-               return common;
-       }
-
-       return NULL;
-}
-
-static gboolean job_execute_cb(void *data)
-{
-       struct job_item *item;
-       struct dlist *l;
-
-       l = dlist_nth(s_info.job_list, 0);
-       if (!l) {
-               s_info.job_timer = 0;
-               return FALSE;
-       }
-
-       item = dlist_data(l);
-       s_info.job_list = dlist_remove(s_info.job_list, l);
-
-       if (item) {
-               item->cb(item->handle, item->ret, item->data);
-               lb_unref(item->handle, 1);
-               free(item);
-       }
-
-       return TRUE;
-}
-
-static int job_add(struct livebox *handle, ret_cb_t job_cb, int ret, void *data)
-{
-       struct job_item *item;
-
-       if (!job_cb) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       item = malloc(sizeof(*item));
-       if (!item) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       item->handle = lb_ref(handle);
-       item->cb = job_cb;
-       item->data = data;
-       item->ret = ret;
-
-       s_info.job_list = dlist_append(s_info.job_list, item);
-
-       if (!s_info.job_timer) {
-               s_info.job_timer = g_timeout_add(1, job_execute_cb, NULL);
-               if (!s_info.job_timer) {
-                       ErrPrint("Failed to create a job timer\n");
-               }
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-static int create_real_instance(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       struct cb_info *cbinfo;
-       struct packet *packet;
-       struct livebox_common *common;
-       int ret;
-       unsigned int cmd = CMD_NEW;
-
-       common = handler->common;
-
-       packet = packet_create((const char *)&cmd, "dssssdii",
-                               common->timestamp, common->pkgname, common->content,
-                               common->cluster, common->category,
-                               common->lb.period, common->lb.width, common->lb.height);
-       if (!packet) {
-               ErrPrint("Failed to create a new packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               ErrPrint("Failed to create a cbinfo\n");
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       /*!
-        * \note
-        * master_rpc_async_request will destroy the packet (decrease the refcnt)
-        * So be aware the packet object after return from master_rpc_async_request.
-        */
-       ret = master_rpc_async_request(handler, packet, 0, new_ret_cb, cbinfo);
-       if (ret < 0) {
-               ErrPrint("Failed to send a new packet\n");
-               destroy_cb_info(cbinfo);
-               return LB_STATUS_ERROR_FAULT;
-       }
-       handler->common->request.created = 1;
-       return LB_STATUS_SUCCESS;
-}
-
-static void create_cb(struct livebox *handle, int ret, void *data)
-{
-       struct cb_info *cbinfo = data;
-
-       if (cbinfo->cb) {
-               cbinfo->cb(handle, ret, cbinfo->data);
-       }
-
-       destroy_cb_info(cbinfo);
-
-       /*!
-        * \note
-        * Forcely generate "updated" event
-        */
-       lb_invoke_event_handler(handle, LB_EVENT_LB_UPDATED);
-}
-
-static int create_fake_instance(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       struct cb_info *cbinfo;
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               ErrPrint("Failed to create a cbinfo\n");
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       if (job_add(handler, create_cb, LB_STATUS_SUCCESS, cbinfo) != LB_STATUS_SUCCESS) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-struct livebox_common *lb_create_common_handle(struct livebox *handle, const char *pkgname, const char *cluster, const char *category)
-{
-       struct livebox_common *common;
-
-       common = calloc(1, sizeof(*common));
-       if (!common) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return NULL;
-       }
-
-       common->pkgname = strdup(pkgname);
-       if (!common->pkgname) {
-               free(common);
-               return NULL;
-       }
-
-       common->cluster = strdup(cluster);
-       if (!common->cluster) {
-               ErrPrint("Error: %s\n", strerror(errno));
-               free(common->pkgname);
-               free(common);
-               return NULL;
-       }
-
-       common->category = strdup(category);
-       if (!common->category) {
-               ErrPrint("Error: %s\n", strerror(errno));
-               free(common->cluster);
-               free(common->pkgname);
-               free(common);
-               return NULL;
-       }
-
-       /* Data provider will set this */
-       common->lb.type = _LB_TYPE_FILE;
-       common->pd.type = _PD_TYPE_SCRIPT;
-
-       /* Used for handling the mouse event on a box */
-       common->lb.mouse_event = 0;
-
-       /* Cluster infomration is not determined yet */
-       common->nr_of_sizes = 0x01;
-
-       common->timestamp = util_timestamp();
-       common->is_user = 1;
-       common->delete_type = LB_DELETE_PERMANENTLY;
-       common->pd.lock = NULL;
-       common->pd.lock_fd = -1;
-       common->lb.lock = NULL;
-       common->lb.lock_fd = -1;
-
-       common->state = CREATE;
-       common->visible = LB_SHOW;
-
-       s_info.livebox_common_list = dlist_append(s_info.livebox_common_list, common);
-       return common;
-}
-
-int lb_destroy_common_handle(struct livebox_common *common)
-{
-       dlist_remove_data(s_info.livebox_common_list, common);
-
-       common->state = DESTROYED;
-
-       if (common->filename) {
-               (void)util_unlink(common->filename);
-       }
-
-       free(common->cluster);
-       free(common->category);
-       free(common->id);
-       free(common->pkgname);
-       free(common->filename);
-       free(common->lb.auto_launch);
-       free(common->alt.icon);
-       free(common->alt.name);
-
-       if (common->lb.fb) {
-               fb_destroy(common->lb.fb);
-               common->lb.fb = NULL;
-       }
-
-       if (common->pd.fb) {
-               fb_destroy(common->pd.fb);
-               common->pd.fb = NULL;
-       }
-
-       return 0;
-}
-
-int lb_common_ref(struct livebox_common *common, struct livebox *handle)
-{
-       common->livebox_list = dlist_append(common->livebox_list, handle);
-       common->refcnt++;
-
-       return common->refcnt;
-}
-
-int lb_common_unref(struct livebox_common *common, struct livebox *handle)
-{
-       int refcnt;
-       dlist_remove_data(common->livebox_list, handle);
-       refcnt = --common->refcnt;
-
-       return refcnt;
-}
-
-static void refresh_for_paused_updating_cb(struct livebox *handle, int ret, void *data)
-{
-       if (handle->paused_updating == 0) {
-               DbgPrint("Paused updates are cleared\n");
-               return;
-       }
-
-       DbgPrint("Pending updates are found\n");
-       lb_invoke_event_handler(handle, LB_EVENT_LB_UPDATED);
-}
-
-static int lb_set_visibility(struct livebox *handler, enum livebox_visible_state state)
-{
-       struct packet *packet;
-       int need_to_add_job = 0;
-       int ret;
-       unsigned int cmd = CMD_CHANGE_VISIBILITY;
-
-       if (handler->common->visible != LB_SHOW && state == LB_SHOW) {
-               need_to_add_job = !!handler->paused_updating;
-       } else if (handler->common->visible == LB_SHOW && state != LB_SHOW) {
-               struct dlist *l;
-               struct livebox *item;
-
-               dlist_foreach(handler->common->livebox_list, l, item) {
-                       if (item->visible == LB_SHOW) {
-                               DbgPrint("%s visibility is not changed\n", handler->common->pkgname);
-                               return LB_STATUS_SUCCESS;
-                       }
-               }
-       } else if (handler->common->visible == LB_SHOW && state == LB_SHOW && handler->paused_updating) {
-               if (job_add(handler, refresh_for_paused_updating_cb, LB_STATUS_SUCCESS, NULL) < 0) {
-                       ErrPrint("Unable to add a new job for refreshing box\n");
-               }
-
-               return LB_STATUS_SUCCESS;
-       } else {
-               /*!
-                * \brief
-                * No need to send this to the master
-                */
-               return LB_STATUS_SUCCESS;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, (int)state);
-       if (!packet) {
-               ErrPrint("Failed to create a packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_request_only(handler, packet);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               DbgPrint("[%s] visibility is changed 0x[%x]\n", handler->common->pkgname, state);
-               handler->common->visible = state;
-
-               if (need_to_add_job) {
-                       if (job_add(handler, refresh_for_paused_updating_cb, LB_STATUS_SUCCESS, NULL) < 0) {
-                               ErrPrint("Unable to add a new job for refreshing box\n");
-                       }
-               }
-       }
-
-       return ret;
-}
-
-EAPI struct livebox *livebox_add(const char *pkgname, const char *content, const char *cluster, const char *category, double period, int type, ret_cb_t cb, void *data)
-{
-       char *lbid;
-       struct livebox *handler;
-       int w = 0;
-       int h = 0;
-
-       if (!pkgname || !cluster || !category) {
-               ErrPrint("Invalid arguments: pkgname[%p], cluster[%p], category[%p]\n",
-                                                               pkgname, cluster, category);
-               return NULL;
-       }
-
-       lbid = lb_pkgname(pkgname);
-       if (!lbid) {
-               ErrPrint("Invalid package: %s\n", pkgname);
-               return NULL;
-       }
-
-       if (livebox_service_is_enabled(lbid) == 0) {
-               DbgPrint("Livebox [%s](%s) is disabled package\n", lbid, pkgname);
-               free(lbid);
-               return NULL;
-       }
-
-       if (type != LB_SIZE_TYPE_UNKNOWN) {
-               (void)livebox_service_get_size(type, &w, &h);
-       }
-
-       handler = calloc(1, sizeof(*handler));
-       if (!handler) {
-               ErrPrint("Error: %s\n", strerror(errno));
-               free(lbid);
-               return NULL;
-       }
-
-       if (!cb) {
-               cb = default_create_cb;
-       }
-
-       handler->common = find_sharable_common_handle(lbid, content, w, h, cluster, category);
-       if (!handler->common) {
-               handler->common = lb_create_common_handle(handler, lbid, cluster, category);
-               free(lbid);
-               if (!handler->common) {
-                       ErrPrint("Failed to find common handle\n");
-                       free(handler);
-                       return NULL;
-               }
-
-               if (!content || !strlen(content)) {
-                       char *pc;
-                       /*!
-                        * \note
-                        * I know the content should not be modified. use it temporarly without "const"
-                        */
-                       pc = livebox_service_content(handler->common->pkgname);
-                       lb_set_content(handler->common, pc);
-                       free(pc);
-               } else {
-                       lb_set_content(handler->common, content);
-               }
-
-               lb_set_period(handler->common, period);
-               lb_set_size(handler->common, w, h);
-               lb_common_ref(handler->common, handler);
-
-               if (create_real_instance(handler, cb, data) < 0) {
-                       if (lb_common_unref(handler->common, handler) == 0) {
-                               /*!
-                                * Delete common
-                                */
-                               lb_destroy_common_handle(handler->common);
-                               handler->common = NULL;
-                       }
-                       free(handler);
-                       return NULL;
-               }
-       } else {
-               free(lbid);
-
-               lb_common_ref(handler->common, handler);
-
-               if (handler->common->request.created) {
-                       /*!
-                        * If a box is in creating, wait its result too
-                        */
-                       handler->cbs.created.cb = cb;
-                       handler->cbs.created.data = data;
-               } else {
-                       /*!
-                        * or fire the fake created_event
-                        */
-                       if (create_fake_instance(handler, cb, data) < 0) {
-                               if (lb_common_unref(handler->common, handler) == 0) {
-                                       /*!
-                                        * Delete common
-                                        */
-                                       lb_destroy_common_handle(handler->common);
-                               }
-                               free(handler);
-                               return NULL;
-                       }
-               }
-       }
-
-       handler->visible = LB_SHOW;
-       handler->state = CREATE;
-       handler = lb_ref(handler);
-
-       if (handler->common->visible != LB_SHOW) {
-               lb_set_visibility(handler, LB_SHOW);
-       }
-
-       return handler;
-}
-
-EAPI double livebox_period(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return 0.0f;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return 0.0f;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Hnalder is not valid\n");
-               return 0.0f;
-       }
-
-       return handler->common->lb.period;
-}
-
-EAPI int livebox_set_period(struct livebox *handler, double period, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       int ret;
-       unsigned int cmd = CMD_SET_PERIOD;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.period_changed) {
-               ErrPrint("Previous request for changing period is not finished\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (!handler->common->is_user) {
-               ErrPrint("CA Livebox is not able to change the period\n");
-               return LB_STATUS_ERROR_PERMISSION;
-       }
-
-       if (handler->common->lb.period == period) {
-               DbgPrint("No changes\n");
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       packet = packet_create((const char *)&cmd, "ssd", handler->common->pkgname, handler->common->id, period);
-       if (!packet) {
-               ErrPrint("Failed to build a packet %s\n", handler->common->pkgname);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_period_changed_cb;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, period_ret_cb, NULL);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.period_changed.cb = cb;
-               handler->cbs.period_changed.data = data;
-               handler->common->request.period_changed = 1;
-       }
-
-       return ret;
-}
-
-static void lb_update_visibility(struct livebox_common *old_common)
-{
-       struct dlist *l;
-       struct livebox *item;
-
-       item = NULL;
-       dlist_foreach(old_common->livebox_list, l, item) {
-               if (item->visible == LB_SHOW) {
-                       break;
-               }
-
-               item = NULL;
-       }
-
-       if (!item) {
-               l = dlist_nth(old_common->livebox_list, 0);
-               item = dlist_data(l);
-
-               if (item) {
-                       lb_set_visibility(item, LB_HIDE_WITH_PAUSE);
-               } else {
-                       ErrPrint("Unable to get the valid handle from common handler\n");
-               }
-       } else {
-               lb_set_visibility(item, LB_SHOW);
-       }
-}
-
-/*!
- * \note
- * The second parameter should be the "return value",
- * But in this case, we will use it for "type of deleting instance".
- */
-static void job_del_cb(struct livebox *handle, int type, void *data)
-{
-       struct cb_info *cbinfo = data;
-       ret_cb_t cb;
-
-       if (handle->visible == LB_SHOW) {
-               lb_update_visibility(handle->common);
-       }
-
-       cb = cbinfo->cb;
-       data = cbinfo->data;
-       destroy_cb_info(cbinfo);
-
-       if (handle->common->state != CREATE) {
-               DbgPrint("[%s] %d\n", handle->common->pkgname, handle->refcnt);
-               if (cb) {
-                       cb(handle, LB_STATUS_SUCCESS, data);
-               }
-
-               return;
-       }
-
-       if (handle->common->refcnt == 1) {
-               handle->common->delete_type = type;
-               handle->common->state = DELETE;
-
-               if (!handle->common->id) {
-                       /*!
-                        * \note
-                        * The id is not determined yet.
-                        * It means a user didn't receive created event yet.
-                        * Then just stop to delete procedure from here.
-                        * Because the "created" event handle will release this.
-                        * By the way, if the user adds any callback for getting return status of this,
-                        * call it at here.
-                        */
-                       if (cb) {
-                               cb(handle, LB_STATUS_SUCCESS, data);
-                       }
-               }
-
-               DbgPrint("Send delete request\n");
-               lb_send_delete(handle, type, cb, data);
-       } else {
-               if (cb) {
-                       cb(handle, LB_STATUS_SUCCESS, data);
-               }
-
-               DbgPrint("Before unref: %d\n", handle->common->refcnt);
-               lb_unref(handle, 1);
-       }
-}
-
-EAPI int livebox_del(struct livebox *handler, int type, ret_cb_t cb, void *data)
-{
-       struct cb_info *cbinfo;
-
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is already deleted\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       handler->state = DELETE;
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               ErrPrint("Failed to create a cbinfo\n");
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       if (job_add(handler, job_del_cb, type, cbinfo) != LB_STATUS_SUCCESS) {
-               ErrPrint("Failed to add a new job\n");
-               destroy_cb_info(cbinfo);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI int livebox_set_fault_handler(int (*cb)(enum livebox_fault_type, const char *, const char *, const char *, void *), void *data)
-{
-       struct fault_info *info;
-
-       if (!cb) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       info = malloc(sizeof(*info));
-       if (!info) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       info->handler = cb;
-       info->user_data = data;
-       info->is_deleted = 0;
-
-       s_info.fault_list = dlist_append(s_info.fault_list, info);
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI void *livebox_unset_fault_handler(int (*cb)(enum livebox_fault_type, const char *, const char *, const char *, void *))
-{
-       struct fault_info *info;
-       struct dlist *l;
-
-       dlist_foreach(s_info.fault_list, l, info) {
-               if (info->handler == cb) {
-                       void *data;
-
-                       data = info->user_data;
-
-                       if (s_info.fault_state == INFO_STATE_CALLBACK_IN_PROCESSING) {
-                               info->is_deleted = 1;
-                       } else {
-                               s_info.fault_list = dlist_remove(s_info.fault_list, l);
-                               free(info);
-                       }
-
-                       return data;
-               }
-       }
-
-       return NULL;
-}
-
-EAPI int livebox_set_event_handler(int (*cb)(struct livebox *, enum livebox_event_type, void *), void *data)
-{
-       struct event_info *info;
-
-       if (!cb) {
-               ErrPrint("Invalid argument cb is nil\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       info = malloc(sizeof(*info));
-       if (!info) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       info->handler = cb;
-       info->user_data = data;
-       info->is_deleted = 0;
-
-       s_info.event_list = dlist_append(s_info.event_list, info);
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI void *livebox_unset_event_handler(int (*cb)(struct livebox *, enum livebox_event_type, void *))
-{
-       struct event_info *info;
-       struct dlist *l;
-
-       dlist_foreach(s_info.event_list, l, info) {
-               if (info->handler == cb) {
-                       void *data;
-
-                       data = info->user_data;
-
-                       if (s_info.event_state == INFO_STATE_CALLBACK_IN_PROCESSING) {
-                               info->is_deleted = 1;
-                       } else {
-                               s_info.event_list = dlist_remove(s_info.event_list, l);
-                               free(info);
-                       }
-
-                       return data;
-               }
-       }
-
-       return NULL;
-}
-
-EAPI int livebox_set_update_mode(struct livebox *handler, int active_update, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       int ret;
-       unsigned int cmd = CMD_UPDATE_MODE;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is Invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is Invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is Invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.update_mode) {
-               ErrPrint("Previous update_mode cb is not finished yet\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (handler->common->is_active_update == active_update) {
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       if (!handler->common->is_user) {
-               return LB_STATUS_ERROR_PERMISSION;
-       }
-
-       packet = packet_create((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, active_update);
-       if (!packet) {
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_update_mode_cb;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, update_mode_cb, NULL);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.update_mode.cb = cb;
-               handler->cbs.update_mode.data = data;
-               handler->common->request.update_mode = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_is_active_update(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is Invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is Invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return handler->common->is_active_update;
-}
-
-static void resize_job_cb(struct livebox *handler, int ret, void *data)
-{
-       struct cb_info *info = data;
-
-       if (info->cb) {
-               info->cb(handler, ret, info->data);
-       }
-
-       free(info);
-
-       /*!
-        * \note
-        * Forcely update the box
-        */
-       lb_invoke_event_handler(handler, LB_EVENT_LB_UPDATED);
-}
-
-EAPI int livebox_resize(struct livebox *handler, int type, ret_cb_t cb, void *data)
-{
-       struct livebox_common *common;
-       int w;
-       int h;
-       int ret;
-
-       /*!
-        * \TODO
-        * If this handle is host instance or link instance,
-        * Create a new instance or find another linkable instance.
-        */
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       /*!
-        * \note
-        * resize operation should be separated by each handler.
-        * If a handler is resizing, the other handler can request resize too.
-        * So we should not use the common->request.size_changed flag.
-        */
-       if (handler->cbs.size_changed.cb) {
-               ErrPrint("Previous resize request is not finished yet\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (livebox_service_get_size(type, &w, &h) != 0) {
-               ErrPrint("Invalid size type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->lb.width == w && handler->common->lb.height == h) {
-               DbgPrint("No changes\n");
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       if (!handler->common->is_user) {
-               ErrPrint("CA Livebox is not able to be resized\n");
-               return LB_STATUS_ERROR_PERMISSION;
-       }
-
-       if (handler->common->refcnt <= 1) {
-               struct packet *packet;
-               unsigned int cmd = CMD_RESIZE;
-
-               /* Only 1 instance */
-               packet = packet_create((const char *)&cmd, "ssii", handler->common->pkgname, handler->common->id, w, h);
-               if (!packet) {
-                       ErrPrint("Failed to build param\n");
-                       return LB_STATUS_ERROR_FAULT;
-               }
-
-               if (!cb) {
-                       cb = default_lb_size_changed_cb;
-               }
-
-               ret = master_rpc_async_request(handler, packet, 0, resize_cb, NULL);
-               if (ret == (int)LB_STATUS_SUCCESS) {
-                       handler->cbs.size_changed.cb = cb;
-                       handler->cbs.size_changed.data = data;
-                       handler->common->request.size_changed = 1;
-               }
-       } else {
-               common = find_sharable_common_handle(handler->common->pkgname, handler->common->content, w, h, handler->common->cluster, handler->common->category);
-               if (!common) {
-                       struct livebox_common *old_common;
-                       /*!
-                        * \note
-                        * If the common handler is in resizing,
-                        * if user tries to resize a hander, then simply create new one even if the requested size is same with this.
-
-                       if (handler->common->request.size_changed) {
-                       }
-
-                        */
-
-                       old_common = handler->common;
-
-                       common = lb_create_common_handle(handler, old_common->pkgname, old_common->cluster, old_common->category);
-                       if (!common) {
-                               ErrPrint("Failed to create common handle\n");
-                               return LB_STATUS_ERROR_FAULT;
-                       }
-
-                       lb_set_size(common, w, h);
-                       lb_set_content(common, old_common->content);
-                       lb_set_period(common, old_common->lb.period);
-
-                       /*!
-                        * \note
-                        * Disconnecting from old one.
-                        */
-                       if (lb_common_unref(old_common, handler) == 0) {
-                               /*!
-                                * \note
-                                * Impossible
-                                */
-                               ErrPrint("Common has no associated handler\n");
-                       }
-
-                       lb_common_ref(common, handler);
-
-                       /*!
-                        * Connect to a new one
-                        */
-                       handler->common = common;
-
-                       /*!
-                        * \TODO
-                        * Need to care, if it fails to create a common handle,
-                        * the resize operation will be failed.
-                        * in that case, we should reuse the old common handle
-                        */
-                       ret = create_real_instance(handler, cb, data);
-                       if (ret < 0) {
-                               lb_common_unref(common, handler);
-                               lb_destroy_common_handle(common);
-
-                               lb_common_ref(old_common, handler);
-                               handler->common = old_common;
-                       } else {
-                               /*!
-                                * In this case, we should update visibility of old_common's liveboxes
-                                */
-                               if (handler->visible == LB_SHOW) {
-                                       lb_update_visibility(old_common);
-                               }
-                       }
-               } else {
-                       struct cb_info *cbinfo;
-
-                       cbinfo = create_cb_info(cb, data);
-                       if (!cbinfo) {
-                               ErrPrint("Failed to create a cbinfo\n");
-                               ret = LB_STATUS_ERROR_MEMORY;
-                       } else {
-                               ret = job_add(handler, resize_job_cb, LB_STATUS_SUCCESS, cbinfo);
-                               if (ret == (int)LB_STATUS_SUCCESS) {
-                                       struct livebox_common *old_common;
-
-                                       old_common = handler->common;
-
-                                       if (lb_common_unref(handler->common, handler) == 0) {
-                                               ErrPrint("Old common has no associated handler\n");
-                                       }
-
-                                       lb_common_ref(common, handler);
-                                       handler->common = common;
-
-                                       if (handler->visible == LB_SHOW) {
-                                               lb_update_visibility(old_common); /* To update visibility: Show --> Paused */
-                                               lb_update_visibility(common);   /* To update visibility: Paused --> Show */
-                                       }
-                               } else {
-                                       destroy_cb_info(cbinfo);
-                               }
-                       }
-               }
-       }
-
-       return ret;
-}
-
-EAPI int livebox_click(struct livebox *handler, double x, double y)
-{
-       struct packet *packet;
-       double timestamp;
-       int ret;
-       unsigned int cmd = CMD_CLICKED;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->lb.auto_launch) {
-               if (s_info.launch.handler) {
-                       ret = s_info.launch.handler(handler, handler->common->lb.auto_launch, s_info.launch.data);
-                       if (ret < 0) {
-                               ErrPrint("launch handler app %s (%d)\n", handler->common->lb.auto_launch, ret);
-                       }
-               }
-       }
-
-       timestamp = util_timestamp();
-       DbgPrint("CLICKED: %lf\n", timestamp);
-
-       packet = packet_create_noack((const char *)&cmd, "sssddd", handler->common->pkgname, handler->common->id, "clicked", timestamp, x, y);
-       if (!packet) {
-               ErrPrint("Failed to build param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_request_only(handler, packet);
-
-       return ret;
-}
-
-EAPI int livebox_has_pd(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return !!handler->common->pd.fb;
-}
-
-EAPI int livebox_pd_is_created(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->pd.fb || !handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return handler->common->is_pd_created;
-}
-
-EAPI int livebox_create_pd(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       return livebox_create_pd_with_position(handler, -1.0, -1.0, cb, data);
-}
-
-static void turn_off_pd_destroyed_flag_cb(struct livebox *handler, int ret, void *data)
-{
-       if (handler->common->request.pd_destroyed) {
-               ret_cb_t cb;
-               void *data;
-
-               DbgPrint("pd_destroyed request is canceled\n");
-               handler->common->request.pd_destroyed = 0;
-               cb = handler->cbs.pd_destroyed.cb;
-               data = handler->cbs.pd_destroyed.data;
-               handler->cbs.pd_destroyed.cb = NULL;
-               handler->cbs.pd_destroyed.data = NULL;
-
-               if (cb) {
-                       cb(handler, ret, data);
-               }
-       }
-}
-
-EAPI int livebox_create_pd_with_position(struct livebox *handler, double x, double y, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       int ret;
-       unsigned int cmd = CMD_CREATE_PD;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->pd.fb || !handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       /*!
-        * \note
-        * Only one handler can have a PD
-        */
-       if (handler->common->is_pd_created) {
-               DbgPrint("PD is already created\n");
-               return LB_STATUS_SUCCESS;
-       }
-
-       if (handler->common->request.pd_created) {
-               ErrPrint("Previous request is not completed yet\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       /*!
-        * \note
-        * Turn off the pd_destroyed request flag
-        */
-       if (handler->common->request.pd_destroyed) {
-               if (job_add(handler, turn_off_pd_destroyed_flag_cb, LB_STATUS_ERROR_CANCEL, NULL) < 0) {
-                       ErrPrint("Failed to add pd_destroyed job\n");
-               }
-       }
-
-       packet = packet_create((const char *)&cmd, "ssdd", handler->common->pkgname, handler->common->id, x, y);
-       if (!packet) {
-               ErrPrint("Failed to build param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_pd_created_cb;
-       }
-
-       DbgPrint("PERF_DBOX\n");
-       ret = master_rpc_async_request(handler, packet, 0, pd_create_cb, NULL);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.pd_created.cb = cb;
-               handler->cbs.pd_created.data = data;
-               handler->common->request.pd_created = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_move_pd(struct livebox *handler, double x, double y)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_PD_MOVE;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->pd.fb || !handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->is_pd_created) {
-               ErrPrint("PD is not created\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssdd", handler->common->pkgname, handler->common->id, x, y);
-       if (!packet) {
-               ErrPrint("Failed to build param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(handler, packet);
-}
-
-EAPI int livebox_activate(const char *pkgname, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       unsigned int cmd = CMD_ACTIVATE_PACKAGE;
-       int ret;
-
-       if (!pkgname) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create((const char *)&cmd, "s", pkgname);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               ErrPrint("Unable to create cbinfo\n");
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(NULL, packet, 0, activated_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-static void turn_off_pd_created_flag_cb(struct livebox *handler, int ret, void *data)
-{
-       if (handler->common->request.pd_created) {
-               ret_cb_t cb;
-               void *data;
-
-               DbgPrint("pd_created request is canceled\n");
-               handler->common->request.pd_created = 0;
-               cb = handler->cbs.pd_created.cb;
-               data = handler->cbs.pd_created.data;
-               handler->cbs.pd_created.cb = NULL;
-               handler->cbs.pd_created.data = NULL;
-
-               if (cb) {
-                       cb(handler, ret, data);
-               }
-       }
-}
-
-EAPI int livebox_destroy_pd(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       int ret;
-       unsigned int cmd = CMD_DESTROY_PD;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->pd.fb || !handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       /*!
-        * \FIXME
-        * Replace the callback check code.
-        * Use the flag instead of callback.
-        * the flag should be in the ADT "common"
-        */
-       if (!handler->common->is_pd_created && !handler->common->request.pd_created) {
-               ErrPrint("PD is not created\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.pd_destroyed) {
-               ErrPrint("PD destroy request is already sent\n");
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       /*!
-        * \note
-        * Disable the pd_created request flag
-        */
-       if (handler->common->request.pd_created) {
-               if (job_add(handler, turn_off_pd_created_flag_cb, LB_STATUS_ERROR_CANCEL, NULL) < 0) {
-                       ErrPrint("Failed to add a new job\n");
-               }
-       }
-
-       DbgPrint("[%s]\n", handler->common->pkgname);
-
-       packet = packet_create((const char *)&cmd, "ss", handler->common->pkgname, handler->common->id);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_pd_destroyed_cb;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, pd_destroy_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       } else {
-               handler->common->request.pd_destroyed = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_access_event(struct livebox *handler, enum access_event_type type, double x, double y, ret_cb_t cb, void *data)
-{
-       int w = 1;
-       int h = 1;
-       int ret = 0;    /* re-used for sending event type */
-       unsigned int cmd;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.access_event) {
-               ErrPrint("Previous access event is not yet done\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (type & ACCESS_EVENT_PD_MASK) {
-               if (!handler->common->is_pd_created) {
-                       ErrPrint("PD is not created\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-               switch (type & ~(ACCESS_EVENT_PD_MASK | ACCESS_EVENT_LB_MASK)) {
-               case ACCESS_EVENT_HIGHLIGHT:
-                       cmd = CMD_PD_ACCESS_HL;
-                       ret = ACCESS_TYPE_CUR;
-                       break;
-               case ACCESS_EVENT_HIGHLIGHT_NEXT:
-                       cmd = CMD_PD_ACCESS_HL;
-                       ret = ACCESS_TYPE_NEXT;
-                       break;
-               case ACCESS_EVENT_HIGHLIGHT_PREV:
-                       cmd = CMD_PD_ACCESS_HL;
-                       ret = ACCESS_TYPE_PREV;
-                       break;
-               case ACCESS_EVENT_UNHIGHLIGHT:
-                       cmd = CMD_PD_ACCESS_HL;
-                       ret = ACCESS_TYPE_OFF;
-                       break;
-               case ACCESS_EVENT_ACTIVATE:
-                       cmd = CMD_PD_ACCESS_ACTIVATE;
-                       break;
-               case ACCESS_EVENT_ACTION_DOWN:
-                       cmd = CMD_PD_ACCESS_ACTION;
-                       ret = ACCESS_TYPE_DOWN;
-                       break;
-               case ACCESS_EVENT_ACTION_UP:
-                       cmd = CMD_PD_ACCESS_ACTION;
-                       ret = ACCESS_TYPE_UP;
-                       break;
-               case ACCESS_EVENT_SCROLL_DOWN:
-                       cmd = CMD_PD_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_DOWN;
-                       break;
-               case ACCESS_EVENT_SCROLL_MOVE:
-                       cmd = CMD_PD_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_MOVE;
-                       break;
-               case ACCESS_EVENT_SCROLL_UP:
-                       cmd = CMD_PD_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_UP;
-                       break;
-               case ACCESS_EVENT_VALUE_CHANGE:
-                       cmd = CMD_PD_ACCESS_VALUE_CHANGE;
-                       break;
-               case ACCESS_EVENT_MOUSE:
-                       cmd = CMD_PD_ACCESS_MOUSE;
-                       break;
-               case ACCESS_EVENT_BACK:
-                       cmd = CMD_PD_ACCESS_BACK;
-                       break;
-               case ACCESS_EVENT_OVER:
-                       cmd = CMD_PD_ACCESS_OVER;
-                       break;
-               case ACCESS_EVENT_READ:
-                       cmd = CMD_PD_ACCESS_READ;
-                       break;
-               case ACCESS_EVENT_ENABLE:
-                       cmd = CMD_PD_ACCESS_ENABLE;
-                       ret = 1;
-                       break;
-               case ACCESS_EVENT_DISABLE:
-                       cmd = CMD_PD_ACCESS_ENABLE;
-                       ret = 0;
-                       break;
-               default:
-                       return LB_STATUS_ERROR_INVALID;
-               }
-               w = handler->common->pd.width;
-               h = handler->common->pd.height;
-       } else if (type & ACCESS_EVENT_LB_MASK) {
-               switch (type & ~(ACCESS_EVENT_PD_MASK | ACCESS_EVENT_LB_MASK)) {
-               case ACCESS_EVENT_HIGHLIGHT:
-                       cmd = CMD_LB_ACCESS_HL;
-                       ret = ACCESS_TYPE_CUR;
-                       break;
-               case ACCESS_EVENT_HIGHLIGHT_NEXT:
-                       cmd = CMD_LB_ACCESS_HL;
-                       ret = ACCESS_TYPE_NEXT;
-                       break;
-               case ACCESS_EVENT_HIGHLIGHT_PREV:
-                       cmd = CMD_LB_ACCESS_HL;
-                       ret = ACCESS_TYPE_PREV;
-                       break;
-               case ACCESS_EVENT_UNHIGHLIGHT:
-                       cmd = CMD_LB_ACCESS_HL;
-                       ret = ACCESS_TYPE_OFF;
-                       break;
-               case ACCESS_EVENT_ACTIVATE:
-                       cmd = CMD_LB_ACCESS_ACTIVATE;
-                       break;
-               case ACCESS_EVENT_ACTION_DOWN:
-                       cmd = CMD_LB_ACCESS_ACTION;
-                       ret = ACCESS_TYPE_DOWN;
-                       break;
-               case ACCESS_EVENT_ACTION_UP:
-                       cmd = CMD_LB_ACCESS_ACTION;
-                       ret = ACCESS_TYPE_UP;
-                       break;
-               case ACCESS_EVENT_SCROLL_DOWN:
-                       cmd = CMD_LB_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_DOWN;
-                       break;
-               case ACCESS_EVENT_SCROLL_MOVE:
-                       cmd = CMD_LB_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_MOVE;
-                       break;
-               case ACCESS_EVENT_SCROLL_UP:
-                       cmd = CMD_LB_ACCESS_SCROLL;
-                       ret = ACCESS_TYPE_UP;
-                       break;
-               case ACCESS_EVENT_VALUE_CHANGE:
-                       cmd = CMD_LB_ACCESS_VALUE_CHANGE;
-                       break;
-               case ACCESS_EVENT_MOUSE:
-                       cmd = CMD_LB_ACCESS_MOUSE;
-                       break;
-               case ACCESS_EVENT_BACK:
-                       cmd = CMD_LB_ACCESS_BACK;
-                       break;
-               case ACCESS_EVENT_OVER:
-                       cmd = CMD_LB_ACCESS_OVER;
-                       break;
-               case ACCESS_EVENT_READ:
-                       cmd = CMD_LB_ACCESS_READ;
-                       break;
-               case ACCESS_EVENT_ENABLE:
-                       cmd = CMD_LB_ACCESS_ENABLE;
-                       ret = 1;
-                       break;
-               case ACCESS_EVENT_DISABLE:
-                       cmd = CMD_LB_ACCESS_ENABLE;
-                       ret = 0;
-                       break;
-               default:
-                       return LB_STATUS_ERROR_INVALID;
-               }
-               w = handler->common->lb.width;
-               h = handler->common->lb.height;
-       } else {
-               ErrPrint("Invalid event type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-
-       if (!cb) {
-               cb = default_access_event_cb;
-       }
-
-       ret = send_access_event(handler, (const char *)&cmd, x * w, y * h, ret);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.access_event.cb = cb;
-               handler->cbs.access_event.data = data;
-               handler->common->request.access_event = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_mouse_event(struct livebox *handler, enum content_event_type type, double x, double y)
-{
-       int w = 1;
-       int h = 1;
-       unsigned int cmd;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!(type & CONTENT_EVENT_MOUSE_MASK)) {
-               ErrPrint("Invalid content event is used\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (type & CONTENT_EVENT_PD_MASK) {
-               int flag = 1;
-
-               if (!handler->common->is_pd_created) {
-                       ErrPrint("PD is not created\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (!handler->common->pd.fb) {
-                       ErrPrint("Handler is not valid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (type & CONTENT_EVENT_MOUSE_MOVE) {
-                       if (fabs(x - handler->common->pd.x) < conf_event_filter() && fabs(y - handler->common->pd.y) < conf_event_filter()) {
-                               return LB_STATUS_ERROR_BUSY;
-                       }
-               } else if (type & CONTENT_EVENT_MOUSE_SET) {
-                       flag = 0;
-               }
-
-               if (flag) {
-                       w = handler->common->pd.width;
-                       h = handler->common->pd.height;
-                       handler->common->pd.x = x;
-                       handler->common->pd.y = y;
-               }
-
-               switch ((type & ~(CONTENT_EVENT_PD_MASK | CONTENT_EVENT_LB_MASK))) {
-               case CONTENT_EVENT_MOUSE_ENTER | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_ENTER;
-                       break;
-               case CONTENT_EVENT_MOUSE_LEAVE | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_LEAVE;
-                       break;
-               case CONTENT_EVENT_MOUSE_UP | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_UP;
-                       break;
-               case CONTENT_EVENT_MOUSE_DOWN | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_DOWN;
-                       break;
-               case CONTENT_EVENT_MOUSE_MOVE | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_MOVE;
-                       break;
-               case CONTENT_EVENT_MOUSE_SET | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_SET;
-                       break;
-               case CONTENT_EVENT_MOUSE_UNSET | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_UNSET;
-                       break;
-               case CONTENT_EVENT_ON_SCROLL | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_ON_SCROLL;
-                       break;
-               case CONTENT_EVENT_ON_HOLD | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_ON_HOLD;
-                       break;
-               case CONTENT_EVENT_OFF_SCROLL | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_OFF_SCROLL;
-                       break;
-               case CONTENT_EVENT_OFF_HOLD | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_PD_MOUSE_OFF_HOLD;
-                       break;
-               default:
-                       ErrPrint("Invalid event type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-       } else if (type & CONTENT_EVENT_LB_MASK) {
-               int flag = 1;
-
-               if (!handler->common->lb.fb) {
-                       ErrPrint("Handler is not valid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (type & CONTENT_EVENT_MOUSE_MOVE) {
-                       if (fabs(x - handler->common->lb.x) < conf_event_filter() && fabs(y - handler->common->lb.y) < conf_event_filter()) {
-                               return LB_STATUS_ERROR_BUSY;
-                       }
-               } else if (type & CONTENT_EVENT_MOUSE_SET) {
-                       flag = 0;
-               }
-
-               if (flag) {
-                       w = handler->common->lb.width;
-                       h = handler->common->lb.height;
-                       handler->common->lb.x = x;
-                       handler->common->lb.y = y;
-               }
-
-               switch ((type & ~(CONTENT_EVENT_PD_MASK | CONTENT_EVENT_LB_MASK))) {
-               case CONTENT_EVENT_MOUSE_ENTER | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_ENTER;
-                       break;
-               case CONTENT_EVENT_MOUSE_LEAVE | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_LEAVE;
-                       break;
-               case CONTENT_EVENT_MOUSE_UP | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_UP;
-                       break;
-               case CONTENT_EVENT_MOUSE_DOWN | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_DOWN;
-                       break;
-               case CONTENT_EVENT_MOUSE_MOVE | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_MOVE;
-                       if (!handler->common->lb.mouse_event) {
-                               return LB_STATUS_ERROR_INVALID;
-                       }
-                       break;
-               case CONTENT_EVENT_MOUSE_SET | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_SET;
-                       if (!handler->common->lb.mouse_event) {
-                               return LB_STATUS_ERROR_INVALID;
-                       }
-                       break;
-               case CONTENT_EVENT_MOUSE_UNSET | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_UNSET;
-                       if (!handler->common->lb.mouse_event) {
-                               return LB_STATUS_ERROR_INVALID;
-                       }
-                       break;
-               case CONTENT_EVENT_ON_SCROLL | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_ON_SCROLL;
-                       break;
-               case CONTENT_EVENT_ON_HOLD | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_ON_HOLD;
-                       break;
-               case CONTENT_EVENT_OFF_SCROLL | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_OFF_SCROLL;
-                       break;
-               case CONTENT_EVENT_OFF_HOLD | CONTENT_EVENT_MOUSE_MASK:
-                       cmd = CMD_LB_MOUSE_OFF_HOLD;
-                       break;
-               default:
-                       ErrPrint("Invalid event type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-       } else {
-               ErrPrint("Invalid event type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return send_mouse_event(handler, (const char *)&cmd, x * w, y * h);
-}
-
-EAPI int livebox_key_event(struct livebox *handler, enum content_event_type type, unsigned int keycode, ret_cb_t cb, void *data)
-{
-       unsigned int cmd;
-       int ret;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!(type & CONTENT_EVENT_KEY_MASK)) {
-               ErrPrint("Invalid key event is used\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.key_event) {
-               ErrPrint("Previous key event is not completed yet\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (type & CONTENT_EVENT_PD_MASK) {
-               if (!handler->common->is_pd_created) {
-                       ErrPrint("PD is not created\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (!handler->common->pd.fb) {
-                       ErrPrint("Handler is not valid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (type & CONTENT_EVENT_KEY_DOWN) {
-                       /*!
-                        * \TODO
-                        * filtering the reproduced events if it is too fast
-                        */
-               } else if (type & CONTENT_EVENT_KEY_SET) {
-                       /*!
-                        * \TODO
-                        * What can I do for this case?
-                        */
-               }
-
-               switch ((type & ~(CONTENT_EVENT_PD_MASK | CONTENT_EVENT_LB_MASK))) {
-               case CONTENT_EVENT_KEY_FOCUS_IN | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_FOCUS_IN;
-                       break;
-               case CONTENT_EVENT_KEY_FOCUS_OUT | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_FOCUS_OUT;
-                       break;
-               case CONTENT_EVENT_KEY_UP | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_UP;
-                       break;
-               case CONTENT_EVENT_KEY_DOWN | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_DOWN;
-                       break;
-               case CONTENT_EVENT_KEY_SET | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_SET;
-                       break;
-               case CONTENT_EVENT_KEY_UNSET | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_PD_KEY_UNSET;
-                       break;
-               default:
-                       ErrPrint("Invalid event type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-       } else if (type & CONTENT_EVENT_LB_MASK) {
-               if (!handler->common->lb.fb) {
-                       ErrPrint("Handler is not valid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (type & CONTENT_EVENT_KEY_DOWN) {
-                       /*!
-                        * \TODO
-                        * filtering the reproduced events if it is too fast
-                        */
-               } else if (type & CONTENT_EVENT_KEY_SET) {
-                       /*!
-                        * What can I do for this case?
-                        */
-               }
-
-               switch ((type & ~(CONTENT_EVENT_PD_MASK | CONTENT_EVENT_LB_MASK))) {
-               case CONTENT_EVENT_KEY_FOCUS_IN | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_FOCUS_IN;
-                       break;
-               case CONTENT_EVENT_KEY_FOCUS_OUT | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_FOCUS_OUT;
-                       break;
-               case CONTENT_EVENT_KEY_UP | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_UP;
-                       break;
-               case CONTENT_EVENT_KEY_DOWN | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_DOWN;
-                       break;
-               case CONTENT_EVENT_KEY_SET | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_SET;
-                       break;
-               case CONTENT_EVENT_KEY_UNSET | CONTENT_EVENT_KEY_MASK:
-                       cmd = CMD_LB_KEY_UNSET;
-                       break;
-               default:
-                       ErrPrint("Invalid event type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-       } else {
-               ErrPrint("Invalid event type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!cb) {
-               cb = default_key_event_cb;
-       }
-
-       ret = send_key_event(handler, (const char *)&cmd, keycode);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.key_event.cb = cb;
-               handler->cbs.key_event.data = data;
-               handler->common->request.key_event = 1;
-       }
-
-       return ret;
-}
-
-EAPI const char *livebox_filename(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return NULL;
-       }
-
-       if (handler->common->filename) {
-               return handler->common->filename;
-       }
-
-       /* Oooops */
-       return util_uri_to_path(handler->common->id);
-}
-
-EAPI int livebox_get_pdsize(struct livebox *handler, int *w, int *h)
-{
-       int _w;
-       int _h;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!w) {
-               w = &_w;
-       }
-       if (!h) {
-               h = &_h;
-       }
-
-       if (!handler->common->is_pd_created) {
-               *w = handler->common->pd.default_width;
-               *h = handler->common->pd.default_height;
-       } else {
-               *w = handler->common->pd.width;
-               *h = handler->common->pd.height;
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI int livebox_size(struct livebox *handler)
-{
-       int w;
-       int h;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       w = handler->common->lb.width;
-       h = handler->common->lb.height;
-
-       switch (handler->common->lb.type) {
-       case _LB_TYPE_BUFFER:
-       case _LB_TYPE_SCRIPT:
-               if (!fb_is_created(handler->common->lb.fb)) {
-                       w = 0;
-                       h = 0;
-               }
-               break;
-       default:
-               break;
-       }
-
-       return livebox_service_size_type(w, h);
-}
-
-EAPI int livebox_set_group(struct livebox *handler, const char *cluster, const char *category, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       int ret;
-       unsigned int cmd = CMD_CHANGE_GROUP;
-
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!cluster || !category || handler->state != CREATE) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.group_changed) {
-               ErrPrint("Previous group changing request is not finished yet\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (!handler->common->is_user) {
-               ErrPrint("CA Livebox is not able to change the group\n");
-               return LB_STATUS_ERROR_PERMISSION;
-       }
-
-       if (!strcmp(handler->common->cluster, cluster) && !strcmp(handler->common->category, category)) {
-               DbgPrint("No changes\n");
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       packet = packet_create((const char *)&cmd, "ssss", handler->common->pkgname, handler->common->id, cluster, category);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_group_changed_cb;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, set_group_ret_cb, NULL);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.group_changed.cb = cb;
-               handler->cbs.group_changed.data = data; 
-               handler->common->request.group_changed = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_get_group(struct livebox *handler, const char **cluster, const char **category)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!cluster || !category || handler->state != CREATE) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       *cluster = handler->common->cluster;
-       *category = handler->common->category;
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI int livebox_get_supported_sizes(struct livebox *handler, int *cnt, int *size_list)
-{
-       register int i;
-       register int j;
-
-       if (!handler || !size_list) {
-               ErrPrint("Invalid argument, handler(%p), size_list(%p)\n", handler, size_list);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!cnt || handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       for (j = i = 0; i < NR_OF_SIZE_LIST; i++) {
-               if (handler->common->lb.size_list & (0x01 << i)) {
-                       if (j == *cnt) {
-                               break;
-                       }
-
-                       size_list[j++] = (0x01 << i);
-               }
-       }
-
-       *cnt = j;
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI const char *livebox_pkgname(struct livebox *handler)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return NULL;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return NULL;
-       }
-
-       return handler->common->pkgname;
-}
-
-EAPI double livebox_priority(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return -1.0f;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return -1.0f;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid (%p)\n", handler);
-               return -1.0f;
-       }
-
-       return handler->common->lb.priority;
-}
-
-EAPI int livebox_delete_cluster(const char *cluster, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       unsigned int cmd = CMD_DELETE_CLUSTER;
-       int ret;
-
-       packet = packet_create((const char *)&cmd, "s", cluster);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(NULL, packet, 0, delete_cluster_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-EAPI int livebox_delete_category(const char *cluster, const char *category, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       unsigned int cmd = CMD_DELETE_CATEGORY;
-       int ret;
-
-       packet = packet_create((const char *)&cmd, "ss", cluster, category);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(NULL, packet, 0, delete_category_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-EAPI enum livebox_lb_type livebox_lb_type(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_TYPE_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_TYPE_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_TYPE_INVALID;
-       }
-
-       switch (handler->common->lb.type) {
-       case _LB_TYPE_FILE:
-               return LB_TYPE_IMAGE;
-       case _LB_TYPE_BUFFER:
-       case _LB_TYPE_SCRIPT:
-               {
-                       const char *id;
-                       id = fb_id(handler->common->lb.fb);
-                       if (id && !strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-                               return LB_TYPE_PIXMAP;
-                       }
-               }
-               return LB_TYPE_BUFFER;
-       case _LB_TYPE_TEXT:
-               return LB_TYPE_TEXT;
-       case _LB_TYPE_ELEMENTARY:
-               return LB_TYPE_ELEMENTARY;
-       default:
-               break;
-       }
-
-       return LB_TYPE_INVALID;
-}
-
-EAPI enum livebox_pd_type livebox_pd_type(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return PD_TYPE_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return PD_TYPE_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return PD_TYPE_INVALID;
-       }
-
-       switch (handler->common->pd.type) {
-       case _PD_TYPE_TEXT:
-               return PD_TYPE_TEXT;
-       case _PD_TYPE_BUFFER:
-       case _PD_TYPE_SCRIPT:
-               {
-                       const char *id;
-                       id = fb_id(handler->common->pd.fb);
-                       if (id && !strncasecmp(id, SCHEMA_PIXMAP, strlen(SCHEMA_PIXMAP))) {
-                               return PD_TYPE_PIXMAP;
-                       }
-               }
-               return PD_TYPE_BUFFER;
-       case _PD_TYPE_ELEMENTARY:
-               return PD_TYPE_ELEMENTARY;
-       default:
-               break;
-       }
-
-       return PD_TYPE_INVALID;
-}
-
-EAPI int livebox_set_pd_text_handler(struct livebox *handler, struct livebox_script_operators *ops)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       memcpy(&handler->cbs.pd_ops, ops, sizeof(*ops));
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI int livebox_set_text_handler(struct livebox *handler, struct livebox_script_operators *ops)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       memcpy(&handler->cbs.lb_ops, ops, sizeof(*ops));
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI int livebox_acquire_lb_pixmap(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->lb.type != _LB_TYPE_SCRIPT && handler->common->lb.type != _LB_TYPE_BUFFER) {
-               ErrPrint("Handler is not valid type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return lb_acquire_lb_pixmap(handler, cb, data);
-}
-
-/*!
- * \note
- * Do not check the state of handler and common-handler.
- * If this function is used in the deleted callback,
- * the handler and common-handler's state would be DELETE
- * if this function check the state of handles,
- * user cannot release the pixmap.
- */
-EAPI int livebox_release_lb_pixmap(struct livebox *handler, int pixmap)
-{
-       struct packet *packet;
-       const char *pkgname;
-       const char *id;
-       unsigned int cmd = CMD_LB_RELEASE_PIXMAP;
-
-       if (pixmap == 0 /* || handler->state != CREATE */ ) {
-               ErrPrint("Handler is invalid [%d]\n", pixmap);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler) {
-               /*!
-                * \note
-                * Even though the handler is NULL, we should send the release request to the master.
-                * Because the pixmap resource can be released after the handler is destroyed.
-                * Pixmap resource is used by client. and it cannot be guaranteed to release pixmap.
-                * In some cases, the pixmap can be released after the handler is deleted.
-                *
-                * Its implementation is up to the viewer app.
-                * But we cannot force it to use only with valid handler.
-                */
-               DbgPrint("Using NULL handler\n");
-               pkgname = NULL;
-               id = NULL;
-               /*!
-                * \note
-                * Master will try to find the buffer handler using given pixmap. if the pkgname and id is not valid.
-                */
-       } else {
-               if (!handler->common /* || handler->common->state != CREATE */) {
-                       ErrPrint("Handler is invalid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (!handler->common->id) {
-                       ErrPrint("Invalid handle\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (handler->common->lb.type != _LB_TYPE_SCRIPT && handler->common->lb.type != _LB_TYPE_BUFFER) {
-                       ErrPrint("Handler is not valid type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               pkgname = handler->common->pkgname;
-               id = handler->common->id;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssi", pkgname, id, pixmap);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return master_rpc_request_only(handler, packet);
-}
-
-EAPI int livebox_acquire_pd_pixmap(struct livebox *handler, ret_cb_t cb, void *data)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->pd.type != _PD_TYPE_SCRIPT && handler->common->pd.type != _PD_TYPE_BUFFER) {
-               ErrPrint("Handler is not valid type\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return lb_acquire_pd_pixmap(handler, cb, data);
-}
-
-EAPI int livebox_pd_pixmap(const struct livebox *handler)
-{
-       const char *id;
-       int pixmap = 0;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return 0;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return 0;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return 0;
-       }
-
-       if (handler->common->pd.type != _PD_TYPE_SCRIPT && handler->common->pd.type != _PD_TYPE_BUFFER) {
-               ErrPrint("Invalid handler\n");
-               return 0;
-       }
-
-       id = fb_id(handler->common->pd.fb);
-       if (id && sscanf(id, SCHEMA_PIXMAP "%u", (unsigned int *)&pixmap) != 1) {
-               ErrPrint("PIXMAP Id is not valid\n");
-               return 0;
-       }
-
-       return pixmap;
-}
-
-EAPI int livebox_lb_pixmap(const struct livebox *handler)
-{
-       const char *id;
-       int pixmap = 0;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return 0;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return 0;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return 0;
-       }
-
-       if (handler->common->lb.type != _LB_TYPE_SCRIPT && handler->common->lb.type != _LB_TYPE_BUFFER) {
-               ErrPrint("Invalid handler\n");
-               return 0;
-       }
-
-       id = fb_id(handler->common->lb.fb);
-       if (id && sscanf(id, SCHEMA_PIXMAP "%u", (unsigned int *)&pixmap) != 1) {
-               ErrPrint("PIXMAP Id is not valid\n");
-               return 0;
-       }
-
-       return pixmap;
-}
-
-/*!
- * \note
- * Do not check the state of handler and common-handler.
- * If this function is used in the deleted callback,
- * the handler and common-handler's state would be DELETE
- * if this function check the state of handles,
- * user cannot release the pixmap.
- */
-EAPI int livebox_release_pd_pixmap(struct livebox *handler, int pixmap)
-{
-       struct packet *packet;
-       const char *pkgname;
-       const char *id;
-       unsigned int cmd = CMD_PD_RELEASE_PIXMAP;
-
-       if (pixmap == 0 /* || handler->state != CREATE */) {
-               ErrPrint("Pixmap is invalid [%d]\n", pixmap);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler) {
-               /*!
-                * \note
-                * Even though the handler is NULL, we should send the release request to the master.
-                * Because the pixmap resource can be released after the handler is destroyed.
-                * Pixmap resource is used by client. and it cannot be guaranteed to release pixmap.
-                * In some cases, the pixmap can be released after the handler is deleted.
-                *
-                * Its implementation is up to the viewer app.
-                * But we cannot force it to use only with valid handler.
-                */
-               DbgPrint("Using NULL handler\n");
-               pkgname = NULL;
-               id = NULL;
-               /*!
-                * \note
-                * Master will try to find the buffer handler using given pixmap. if the pkgname and id is not valid.
-                */
-       } else {
-               if (!handler->common /* || handler-common->state != CREATE */) {
-                       ErrPrint("Handler is invalid\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (!handler->common->id) {
-                       ErrPrint("Invalid handle\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (handler->common->pd.type != _PD_TYPE_SCRIPT && handler->common->pd.type != _PD_TYPE_BUFFER) {
-                       ErrPrint("Handler is not valid type\n");
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               pkgname = handler->common->pkgname;
-               id = handler->common->id;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssi", pkgname, id, pixmap);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(handler, packet);
-}
-
-EAPI void *livebox_acquire_fb(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handle\n");
-               return NULL;
-       }
-
-       if (handler->common->lb.type != _LB_TYPE_SCRIPT && handler->common->lb.type != _LB_TYPE_BUFFER) {
-               ErrPrint("Handler is not valid type\n");
-               return NULL;
-       }
-
-       return fb_acquire_buffer(handler->common->lb.fb);
-}
-
-EAPI int livebox_release_fb(void *buffer)
-{
-       return fb_release_buffer(buffer);
-}
-
-EAPI int livebox_fb_refcnt(void *buffer)
-{
-       return fb_refcnt(buffer);
-}
-
-EAPI void *livebox_acquire_pdfb(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return NULL;
-       }
-
-       if (handler->common->pd.type != _PD_TYPE_SCRIPT && handler->common->pd.type != _PD_TYPE_BUFFER) {
-               ErrPrint("Handler is not valid type\n");
-               return NULL;
-       }
-
-       return fb_acquire_buffer(handler->common->pd.fb);
-}
-
-EAPI int livebox_release_pdfb(void *buffer)
-{
-       return fb_release_buffer(buffer);
-}
-
-EAPI int livebox_pdfb_refcnt(void *buffer)
-{
-       return fb_refcnt(buffer);
-}
-
-EAPI int livebox_pdfb_bufsz(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return fb_size(handler->common->pd.fb);
-}
-
-EAPI int livebox_lbfb_bufsz(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return fb_size(handler->common->lb.fb);
-}
-
-EAPI int livebox_is_user(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return handler->common->is_user;
-}
-
-EAPI int livebox_set_pinup(struct livebox *handler, int flag, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       int ret;
-       unsigned int cmd = CMD_PINUP_CHANGED;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->common->request.pinup) {
-               ErrPrint("Previous pinup request is not finished\n");
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (handler->common->is_pinned_up == flag) {
-               DbgPrint("No changes\n");
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       packet = packet_create((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, flag);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (!cb) {
-               cb = default_pinup_cb;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, pinup_done_cb, NULL);
-       if (ret == (int)LB_STATUS_SUCCESS) {
-               handler->cbs.pinup.cb = cb;
-               handler->cbs.pinup.data = data;
-               handler->common->request.pinup = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_is_pinned_up(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return handler->common->is_pinned_up;
-}
-
-EAPI int livebox_has_pinup(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handler\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return handler->common->lb.pinup_supported;
-}
-
-EAPI int livebox_set_data(struct livebox *handler, void *data)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       handler->data = data;
-       return LB_STATUS_SUCCESS;
-}
-
-EAPI void *livebox_get_data(struct livebox *handler)
-{
-       if (!handler) {
-               ErrPrint("Handler is NIL\n");
-               return NULL;
-       }
-
-       if (handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       return handler->data;
-}
-
-EAPI int livebox_is_exists(const char *pkgname)
-{
-       char *lb;
-
-       lb = lb_pkgname(pkgname);
-       if (lb) {
-               free(lb);
-               return 1;
-       }
-
-       return 0;
-}
-
-EAPI const char *livebox_content(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return NULL;
-       }
-
-       return handler->common->content;
-}
-
-EAPI const char *livebox_category_title(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return NULL;
-       }
-
-       return handler->common->title;
-}
-
-EAPI int livebox_emit_text_signal(struct livebox *handler, const char *emission, const char *source, double sx, double sy, double ex, double ey, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       int ret;
-       unsigned int cmd = CMD_TEXT_SIGNAL;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if ((handler->common->lb.type != _LB_TYPE_TEXT && handler->common->pd.type != _PD_TYPE_TEXT) || !handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!emission) {
-               emission = "";
-       }
-
-       if (!source) {
-               source = "";
-       }
-
-       packet = packet_create((const char *)&cmd, "ssssdddd",
-                               handler->common->pkgname, handler->common->id, emission, source, sx, sy, ex, ey);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, text_signal_cb, cbinfo);
-       if (ret < 0) {
-               destroy_cb_info(cbinfo);
-       }
-
-       return ret;
-}
-
-EAPI int livebox_subscribe_group(const char *cluster, const char *category)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_SUBSCRIBE;
-
-       /*!
-        * \todo
-        * Validate the group info using DB
-        * If the group info is not valid, do not send this request
-        */
-
-       packet = packet_create_noack((const char *)&cmd, "ss", cluster ? cluster : "", category ? category : "");
-       if (!packet) {
-               ErrPrint("Failed to create a packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(NULL, packet);
-}
-
-EAPI int livebox_unsubscribe_group(const char *cluster, const char *category)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_UNSUBSCRIBE;
-
-       /*!
-        * \todo
-        * Validate the group info using DB
-        * If the group info is not valid, do not send this request
-        * AND Check the subscribed or not too
-        */
-
-       packet = packet_create_noack((const char *)&cmd, "ss", cluster ? cluster : "", category ? category : "");
-       if (!packet) {
-               ErrPrint("Failed to create a packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(NULL, packet);
-}
-
-EAPI int livebox_refresh(struct livebox *handler, int force)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_UPDATE;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssi", handler->common->pkgname, handler->common->id, force);
-       if (!packet) {
-               ErrPrint("Failed to create a packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(handler, packet);
-}
-
-EAPI int livebox_refresh_group(const char *cluster, const char *category, int force)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_REFRESH_GROUP;
-
-       if (!cluster || !category) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       packet = packet_create_noack((const char *)&cmd, "ssi", cluster, category, force);
-       if (!packet) {
-               ErrPrint("Failed to create a packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(NULL, packet);
-}
-
-EAPI int livebox_set_visibility(struct livebox *handler, enum livebox_visible_state state)
-{
-       int old_state;
-       int ret;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->is_user) {
-               /* System cluster livebox cannot be changed its visible states */
-               if (state == LB_HIDE_WITH_PAUSE) {
-                       ErrPrint("CA Livebox is not able to change the visibility\n");
-                       return LB_STATUS_ERROR_PERMISSION;
-               }
-       }
-
-       if (handler->visible == state) {
-               DbgPrint("%s has no changes\n", handler->common->pkgname);
-               return LB_STATUS_ERROR_ALREADY;
-       }
-
-       old_state = handler->visible;
-       handler->visible = state;
-
-       ret = lb_set_visibility(handler, state);
-       if (ret < 0) {
-               handler->visible = old_state;
-       }
-
-       return ret;
-}
-
-EAPI enum livebox_visible_state livebox_visibility(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is invalid\n");
-               return LB_VISIBLE_ERROR;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_VISIBLE_ERROR;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid\n");
-               return LB_VISIBLE_ERROR;
-       }
-
-       return handler->visible;
-}
-
-int lb_set_group(struct livebox_common *common, const char *cluster, const char *category)
-{
-       void *pc = NULL;
-       void *ps = NULL;
-
-       if (cluster) {
-               pc = strdup(cluster);
-               if (!pc) {
-                       ErrPrint("Heap: %s (cluster: %s)\n", strerror(errno), cluster);
-                       return LB_STATUS_ERROR_MEMORY;
-               }
-       }
-
-       if (category) {
-               ps = strdup(category);
-               if (!ps) {
-                       ErrPrint("Heap: %s (category: %s)\n", strerror(errno), category);
-                       free(pc);
-                       return LB_STATUS_ERROR_MEMORY;
-               }
-       }
-
-       if (common->cluster) {
-               free(common->cluster);
-       }
-
-       if (common->category) {
-               free(common->category);
-       }
-
-       common->cluster = pc;
-       common->category = ps;
-
-       return LB_STATUS_SUCCESS;
-}
-
-void lb_set_size(struct livebox_common *common, int w, int h)
-{
-       int size_type;
-
-       common->lb.width = w;
-       common->lb.height = h;
-
-       size_type = livebox_service_size_type(w, h);
-       if (size_type != LB_SIZE_TYPE_UNKNOWN) {
-               common->lb.mouse_event = livebox_service_mouse_event(common->pkgname, size_type);
-       }
-}
-
-void lb_set_update_mode(struct livebox_common *common, int active_mode)
-{
-       common->is_active_update = active_mode;
-}
-
-void lb_set_pdsize(struct livebox_common *common, int w, int h)
-{
-       common->pd.width = w;
-       common->pd.height = h;
-}
-
-void lb_set_default_pdsize(struct livebox_common *common, int w, int h)
-{
-       common->pd.default_width = w;
-       common->pd.default_height = h;
-}
-
-void lb_invoke_fault_handler(enum livebox_fault_type event, const char *pkgname, const char *file, const char *func)
-{
-       struct dlist *l;
-       struct dlist *n;
-       struct fault_info *info;
-
-       s_info.fault_state = INFO_STATE_CALLBACK_IN_PROCESSING;
-
-       dlist_foreach_safe(s_info.fault_list, l, n, info) {
-               if (!info->is_deleted && info->handler(event, pkgname, file, func, info->user_data) == EXIT_FAILURE) {
-                       info->is_deleted = 1;
-               }
-
-               if (info->is_deleted) {
-                       s_info.fault_list = dlist_remove(s_info.fault_list, l);
-                       free(info);
-               }
-       }
-
-       s_info.fault_state &= ~INFO_STATE_CALLBACK_IN_PROCESSING;
-}
-
-void lb_invoke_event_handler(struct livebox *handler, enum livebox_event_type event)
-{
-       struct dlist *l;
-       struct dlist *n;
-       struct event_info *info;
-
-       if (event == LB_EVENT_LB_UPDATED && handler->common->refcnt > 1) {
-               if (handler->visible != LB_SHOW) {
-                       DbgPrint("Update requested(pending) - %s\n", handler->common->pkgname);
-                       handler->paused_updating++;
-                       return;
-               } else {
-                       handler->paused_updating = 0;
-               }
-       }
-
-       s_info.event_state = INFO_STATE_CALLBACK_IN_PROCESSING;
-
-       dlist_foreach_safe(s_info.event_list, l, n, info) {
-               if (!info->is_deleted && info->handler(handler, event, info->user_data) == EXIT_FAILURE) {
-                       DbgPrint("Event handler returns EXIT_FAILURE\n");
-                       info->is_deleted = 1;
-               }
-
-               if (info->is_deleted) {
-                       s_info.event_list = dlist_remove(s_info.event_list, l);
-                       free(info);
-               }
-       }
-
-       s_info.event_state &= ~INFO_STATE_CALLBACK_IN_PROCESSING;
-}
-
-struct livebox_common *lb_find_common_handle(const char *pkgname, const char *id)
-{
-       struct dlist *l;
-       struct livebox_common *common;
-
-       dlist_foreach(s_info.livebox_common_list, l, common) {
-               if (!common->id) {
-                       continue;
-               }
-
-               if (!strcmp(common->pkgname, pkgname) && !strcmp(common->id, id)) {
-                       return common;
-               }
-       }
-
-       return NULL;
-}
-
-struct livebox_common *lb_find_common_handle_by_timestamp(double timestamp)
-{
-       struct dlist *l;
-       struct livebox_common *common;
-
-       dlist_foreach(s_info.livebox_common_list, l, common) {
-               if (common->timestamp == timestamp) {
-                       return common;
-               }
-       }
-
-       return NULL;
-}
-
-struct livebox *lb_new_livebox(const char *pkgname, const char *id, double timestamp, const char *cluster, const char *category)
-{
-       struct livebox *handler;
-
-       handler = calloc(1, sizeof(*handler));
-       if (!handler) {
-               ErrPrint("Failed to create a new livebox\n");
-               return NULL;
-       }
-
-       handler->common = lb_create_common_handle(handler, pkgname, cluster, category);
-       if (!handler->common) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               free(handler);
-               return NULL;
-       }
-
-       lb_common_ref(handler->common, handler);
-       lb_set_id(handler->common, id);
-       handler->common->timestamp = timestamp;
-       handler->common->state = CREATE;
-       handler->visible = LB_SHOW;
-       s_info.livebox_list = dlist_append(s_info.livebox_list, handler);
-
-       return lb_ref(handler);
-}
-
-int lb_delete_all(void)
-{
-       struct dlist *l;
-       struct dlist *n;
-       struct livebox *handler;
-
-       dlist_foreach_safe(s_info.livebox_list, l, n, handler) {
-               lb_invoke_event_handler(handler, LB_EVENT_DELETED);
-               lb_unref(handler, 1);
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-int lb_set_content(struct livebox_common *common, const char *content)
-{
-       char *pc = NULL;
-
-       if (content) {
-               pc = strdup(content);
-               if (!pc) {
-                       ErrPrint("heap: %s [%s]\n", strerror(errno), content);
-                       return LB_STATUS_ERROR_MEMORY;
-               }
-       }
-
-       free(common->content);
-       common->content = pc;
-       return LB_STATUS_SUCCESS;
-}
-
-int lb_set_title(struct livebox_common *common, const char *title)
-{
-       char *pt = NULL;
-
-       if (title) {
-               pt = strdup(title);
-               if (!pt) {
-                       ErrPrint("heap: %s [%s]\n", strerror(errno), title);
-                       return LB_STATUS_ERROR_MEMORY;
-               }
-       }
-
-       free(common->title);
-       common->title = pt;
-       return LB_STATUS_SUCCESS;
-}
-
-void lb_set_size_list(struct livebox_common *common, int size_list)
-{
-       common->lb.size_list = size_list;
-}
-
-void lb_set_auto_launch(struct livebox_common *common, const char *auto_launch)
-{
-       char *pa = NULL;
-
-       if (!auto_launch || !strlen(auto_launch)) {
-               return;
-       }
-
-       pa = strdup(auto_launch);
-       if (!pa) {
-               ErrPrint("heap: %s, [%s]\n", strerror(errno), auto_launch);
-               return;
-       }
-
-       free(common->lb.auto_launch);
-       common->lb.auto_launch = pa;
-}
-
-void lb_set_priority(struct livebox_common *common, double priority)
-{
-       common->lb.priority = priority;
-}
-
-void lb_set_id(struct livebox_common *common, const char *id)
-{
-       char *pi = NULL;
-
-       if (id) {
-               pi = strdup(id);
-               if (!pi) {
-                       ErrPrint("heap: %s [%s]\n", strerror(errno), pi);
-                       return;
-               }
-       }
-
-       free(common->id);
-       common->id = pi;
-}
-
-void lb_set_filename(struct livebox_common *common, const char *filename)
-{
-       if (common->filename) {
-               if (common->lb.type == _LB_TYPE_FILE || common->lb.type == _LB_TYPE_TEXT) {
-                       if (common->filename[0] && unlink(common->filename) < 0) {
-                               ErrPrint("unlink: %s (%s)\n", strerror(errno), common->filename);
-                       }
-               }
-
-               free(common->filename);
-       }
-
-       common->filename = strdup(filename);
-       if (!common->filename) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-       }
-}
-
-void lb_set_alt_icon(struct livebox_common *common, const char *icon)
-{
-       char *_icon = NULL;
-
-       if (icon && strlen(icon)) {
-               _icon = strdup(icon);
-               if (!_icon) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-               }
-       }
-
-       free(common->alt.icon);
-       common->alt.icon = _icon;
-}
-
-void lb_set_alt_name(struct livebox_common *common, const char *name)
-{
-       char *_name = NULL;
-
-       if (name && strlen(name)) {
-               _name = strdup(name);
-               if (!_name) {
-                       ErrPrint("Heap: %s\n", strerror(errno));
-               }
-       }
-
-       free(common->alt.name);
-       common->alt.name = _name;
-}
-
-int lb_set_lb_fb(struct livebox_common *common, const char *filename)
-{
-       struct fb_info *fb;
-
-       if (!common) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       fb = common->lb.fb;
-       if (fb && !strcmp(fb_id(fb), filename)) { /*!< BUFFER is not changed, */
-               return LB_STATUS_SUCCESS;
-       }
-
-       common->lb.fb = NULL;
-
-       if (!filename || filename[0] == '\0') {
-               if (fb) {
-                       fb_destroy(fb);
-               }
-               return LB_STATUS_SUCCESS;
-       }
-
-       common->lb.fb = fb_create(filename, common->lb.width, common->lb.height);
-       if (!common->lb.fb) {
-               ErrPrint("Faield to create a FB\n");
-               if (fb) {
-                       fb_destroy(fb);
-               }
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (fb) {
-               fb_destroy(fb);
-       }
-
-       return LB_STATUS_SUCCESS;
-}
-
-int lb_set_pd_fb(struct livebox_common *common, const char *filename)
-{
-       struct fb_info *fb;
-
-       if (!common || common->state != CREATE) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       fb = common->pd.fb;
-       if (fb && !strcmp(fb_id(fb), filename)) {
-               /* BUFFER is not changed, just update the content */
-               return LB_STATUS_ERROR_EXIST;
-       }
-       common->pd.fb = NULL;
-
-       if (!filename || filename[0] == '\0') {
-               if (fb) {
-                       fb_destroy(fb);
-               }
-               return LB_STATUS_SUCCESS;
-       }
-
-       common->pd.fb = fb_create(filename, common->pd.width, common->pd.height);
-       if (!common->pd.fb) {
-               ErrPrint("Failed to create a FB\n");
-               if (fb) {
-                       fb_destroy(fb);
-               }
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       if (fb) {
-               fb_destroy(fb);
-       }
-       return LB_STATUS_SUCCESS;
-}
-
-struct fb_info *lb_get_lb_fb(struct livebox_common *common)
-{
-       return common->lb.fb;
-}
-
-struct fb_info *lb_get_pd_fb(struct livebox_common *common)
-{
-       return common->pd.fb;
-}
-
-void lb_set_user(struct livebox_common *common, int user)
-{
-       common->is_user = user;
-}
-
-void lb_set_pinup(struct livebox_common *common, int pinup_supported)
-{
-       common->lb.pinup_supported = pinup_supported;
-}
-
-void lb_set_text_lb(struct livebox_common *common)
-{
-       common->lb.type = _LB_TYPE_TEXT;
-}
-
-void lb_set_text_pd(struct livebox_common *common)
-{
-       common->pd.type = _PD_TYPE_TEXT;
-}
-
-int lb_text_lb(struct livebox_common *common)
-{
-       return common->lb.type == _LB_TYPE_TEXT;
-}
-
-int lb_text_pd(struct livebox_common *common)
-{
-       return common->pd.type == _PD_TYPE_TEXT;
-}
-
-void lb_set_period(struct livebox_common *common, double period)
-{
-       common->lb.period = period;
-}
-
-struct livebox *lb_ref(struct livebox *handler)
-{
-       if (!handler) {
-               return NULL;
-       }
-
-       handler->refcnt++;
-       return handler;
-}
-
-struct livebox *lb_unref(struct livebox *handler, int destroy_common)
-{
-       if (!handler) {
-               return NULL;
-       }
-
-       handler->refcnt--;
-       if (handler->refcnt > 0) {
-               return handler;
-       }
-
-       if (handler->cbs.created.cb) {
-               handler->cbs.created.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.created.data);
-               handler->cbs.created.cb = NULL;
-               handler->cbs.created.data = NULL;
-       }
-
-       if (handler->cbs.deleted.cb) {
-               handler->cbs.deleted.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.deleted.data);
-               handler->cbs.deleted.cb = NULL;
-               handler->cbs.deleted.data = NULL;
-       }
-
-       if (handler->cbs.pinup.cb) {
-               handler->cbs.pinup.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.pinup.data);
-               handler->cbs.pinup.cb = NULL;
-               handler->cbs.pinup.data = NULL;
-       }
-
-       if (handler->cbs.group_changed.cb) {
-               handler->cbs.group_changed.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.group_changed.data);
-               handler->cbs.group_changed.cb = NULL;
-               handler->cbs.group_changed.data = NULL;
-       }
-
-       if (handler->cbs.period_changed.cb) {
-               handler->cbs.period_changed.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.period_changed.data);
-               handler->cbs.period_changed.cb = NULL;
-               handler->cbs.period_changed.data = NULL;
-       }
-
-       if (handler->cbs.size_changed.cb) {
-               handler->cbs.size_changed.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.size_changed.data);
-               handler->cbs.size_changed.cb = NULL;
-               handler->cbs.size_changed.data = NULL;
-       }
-
-       if (handler->cbs.pd_created.cb) {
-               handler->cbs.pd_created.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.pd_created.data);
-               handler->cbs.pd_created.cb = NULL;
-               handler->cbs.pd_created.data = NULL;
-       }
-
-       if (handler->cbs.pd_destroyed.cb) {
-               handler->cbs.pd_destroyed.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.pd_destroyed.data);
-               handler->cbs.pd_destroyed.cb = NULL;
-               handler->cbs.pd_destroyed.data = NULL;
-       }
-
-       if (handler->cbs.update_mode.cb) {
-               handler->cbs.update_mode.cb(handler, LB_STATUS_ERROR_FAULT, handler->cbs.update_mode.data);
-               handler->cbs.update_mode.cb = NULL;
-               handler->cbs.update_mode.data = NULL;
-       }
-
-       if (handler->cbs.access_event.cb) {
-               handler->cbs.access_event.cb(handler, LB_ACCESS_STATUS_ERROR, handler->cbs.access_event.data);
-               handler->cbs.access_event.cb = NULL;
-               handler->cbs.access_event.data = NULL;
-       }
-
-       if (handler->cbs.key_event.cb) {
-               handler->cbs.key_event.cb(handler, LB_KEY_STATUS_ERROR, handler->cbs.key_event.data);
-               handler->cbs.key_event.cb = NULL;
-               handler->cbs.key_event.data = NULL;
-       }
-
-       dlist_remove_data(s_info.livebox_list, handler);
-
-       handler->state = DESTROYED;
-       if (lb_common_unref(handler->common, handler) == 0) {
-               if (destroy_common) {
-                       /*!
-                        * \note
-                        * Lock file should be deleted after all callbacks are processed.
-                        */
-                       lb_destroy_lock_file(handler->common, 0);
-                       lb_destroy_common_handle(handler->common);
-               }
-       }
-       free(handler);
-       DbgPrint("Handler is released\n");
-       return NULL;
-}
-
-int lb_send_delete(struct livebox *handler, int type, ret_cb_t cb, void *data)
-{
-       struct packet *packet;
-       struct cb_info *cbinfo;
-       int ret;
-       unsigned int cmd = CMD_DELETE;
-
-       if (handler->common->request.deleted) {
-               ErrPrint("Already in-progress\n");
-               if (cb) {
-                       cb(handler, LB_STATUS_SUCCESS, data);
-               }
-               return LB_STATUS_ERROR_BUSY;
-       }
-
-       if (!cb) {
-               cb = default_delete_cb;
-       }
-
-       packet = packet_create((const char *)&cmd, "ssid", handler->common->pkgname, handler->common->id, type, handler->common->timestamp);
-       if (!packet) {
-               ErrPrint("Failed to build a param\n");
-               if (cb) {
-                       cb(handler, LB_STATUS_ERROR_FAULT, data);
-               }
-
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       cbinfo = create_cb_info(cb, data);
-       if (!cbinfo) {
-               packet_destroy(packet);
-               ErrPrint("Failed to create cbinfo\n");
-               if (cb) {
-                       cb(handler, LB_STATUS_ERROR_FAULT, data);
-               }
-
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       ret = master_rpc_async_request(handler, packet, 0, del_ret_cb, cbinfo);
-       if (ret < 0) {
-               /*!
-                * Packet is destroyed by master_rpc_async_request.
-                */
-               destroy_cb_info(cbinfo);
-
-               if (cb) {
-                       cb(handler, LB_STATUS_ERROR_FAULT, data);
-               }
-       } else {
-               handler->common->request.deleted = 1;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_client_paused(void)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_CLIENT_PAUSED;
-
-       packet = packet_create_noack((const char *)&cmd, "d", util_timestamp());
-       if (!packet) {
-               ErrPrint("Failed to create a pause packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(NULL, packet);
-}
-
-EAPI int livebox_client_resumed(void)
-{
-       struct packet *packet;
-       unsigned int cmd = CMD_CLIENT_RESUMED;
-
-       packet = packet_create_noack((const char *)&cmd, "d", util_timestamp());
-       if (!packet) {
-               ErrPrint("Failed to create a resume packet\n");
-               return LB_STATUS_ERROR_FAULT;
-       }
-
-       return master_rpc_request_only(NULL, packet);
-}
-
-EAPI int livebox_sync_lb_fb(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return lb_sync_lb_fb(handler->common);
-}
-
-int lb_sync_lb_fb(struct livebox_common *common)
-{
-       int ret;
-
-       if (fb_type(lb_get_lb_fb(common)) == BUFFER_TYPE_FILE && common->lb.lock_fd >= 0) {
-               (void)do_fb_lock(common->lb.lock_fd);
-               ret = fb_sync(lb_get_lb_fb(common));
-               (void)do_fb_unlock(common->lb.lock_fd);
-       } else {
-               ret = fb_sync(lb_get_lb_fb(common));
-       }
-
-       return ret;
-}
-
-int lb_sync_pd_fb(struct livebox_common *common)
-{
-       int ret;
-
-       if (fb_type(lb_get_pd_fb(common)) == BUFFER_TYPE_FILE && common->pd.lock_fd >= 0) {
-               (void)do_fb_lock(common->pd.lock_fd);
-               ret = fb_sync(lb_get_pd_fb(common));
-               (void)do_fb_unlock(common->pd.lock_fd);
-       } else {
-               ret = fb_sync(lb_get_pd_fb(common));
-       }
-
-       return ret;
-}
-
-EAPI int livebox_sync_pd_fb(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       return lb_sync_pd_fb(handler->common);
-}
-
-EAPI const char *livebox_alt_icon(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid[%p]\n", handler);
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return NULL;
-       }
-
-       return handler->common->alt.icon;
-}
-
-EAPI const char *livebox_alt_name(struct livebox *handler)
-{
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid[%p]\n", handler);
-               return NULL;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return NULL;
-       }
-
-       return handler->common->alt.name;
-}
-
-EAPI int livebox_acquire_fb_lock(struct livebox *handler, int is_pd)
-{
-       int ret = LB_STATUS_SUCCESS;
-       int fd;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Handler is not valid[%p]\n", handler);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Handler is not valid\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid[%p]\n", handler);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (is_pd) {
-               if (!handler->common->pd.lock || handler->common->pd.lock_fd < 0) {
-                       DbgPrint("Lock: %s (%d)\n", handler->common->pd.lock, handler->common->pd.lock_fd);
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (fb_type(lb_get_pd_fb(handler->common)) == BUFFER_TYPE_FILE) {
-                       return LB_STATUS_SUCCESS;
-               }
-
-               fd = handler->common->pd.lock_fd;
-       } else {
-               if (!handler->common->lb.lock || handler->common->lb.lock_fd < 0) {
-                       DbgPrint("Lock: %s (%d)\n", handler->common->lb.lock, handler->common->lb.lock_fd);
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (fb_type(lb_get_lb_fb(handler->common)) == BUFFER_TYPE_FILE) {
-                       return LB_STATUS_SUCCESS;
-               }
-
-               fd = handler->common->lb.lock_fd;
-       }
-
-       ret = do_fb_lock(fd);
-
-       return ret == 0 ? LB_STATUS_SUCCESS : LB_STATUS_ERROR_FAULT;
-}
-
-EAPI int livebox_release_fb_lock(struct livebox *handler, int is_pd)
-{
-       int ret = LB_STATUS_SUCCESS;
-       int fd;
-
-       if (!handler || handler->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common || handler->common->state != CREATE) {
-               ErrPrint("Invalid handle\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!handler->common->id) {
-               ErrPrint("Handler is not valid[%p]\n", handler);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (is_pd) {
-               if (!handler->common->pd.lock || handler->common->pd.lock_fd < 0) {
-                       DbgPrint("Unlock: %s (%d)\n", handler->common->pd.lock, handler->common->pd.lock_fd);
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (fb_type(lb_get_pd_fb(handler->common)) == BUFFER_TYPE_FILE) {
-                       return LB_STATUS_SUCCESS;
-               }
-
-               fd = handler->common->pd.lock_fd;
-       } else {
-               if (!handler->common->lb.lock || handler->common->lb.lock_fd < 0) {
-                       DbgPrint("Unlock: %s (%d)\n", handler->common->lb.lock, handler->common->lb.lock_fd);
-                       return LB_STATUS_ERROR_INVALID;
-               }
-
-               if (fb_type(lb_get_lb_fb(handler->common)) == BUFFER_TYPE_FILE) {
-                       return LB_STATUS_SUCCESS;
-               }
-
-               fd = handler->common->lb.lock_fd;
-       }
-
-       ret = do_fb_unlock(fd);
-
-       return ret == 0 ? LB_STATUS_SUCCESS : LB_STATUS_ERROR_FAULT;
-}
-
-EAPI int livebox_set_option(enum livebox_option_type option, int state)
-{
-       int ret = LB_STATUS_SUCCESS;
-
-       switch (option) {
-       case LB_OPTION_MANUAL_SYNC:
-               conf_set_manual_sync(state);
-               break;
-       case LB_OPTION_FRAME_DROP_FOR_RESIZE:
-               conf_set_frame_drop_for_resizing(state);
-               break;
-       case LB_OPTION_SHARED_CONTENT:
-               conf_set_shared_content(state);
-               break;
-       case LB_OPTION_DIRECT_UPDATE:
-               if (s_info.init_count) {
-                       DbgPrint("Already intialized, this option is not applied\n");
-               }
-               conf_set_direct_update(state);
-               break;
-       default:
-               ret = LB_STATUS_ERROR_INVALID;
-               break;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_option(enum livebox_option_type option)
-{
-       int ret;
-
-       switch (option) {
-       case LB_OPTION_MANUAL_SYNC:
-               ret = conf_manual_sync();
-               break;
-       case LB_OPTION_FRAME_DROP_FOR_RESIZE:
-               ret = conf_frame_drop_for_resizing();
-               break;
-       case LB_OPTION_SHARED_CONTENT:
-               ret = conf_shared_content();
-               break;
-       case LB_OPTION_DIRECT_UPDATE:
-               ret = conf_direct_update();
-               break;
-       default:
-               ret = LB_STATUS_ERROR_INVALID;
-               break;
-       }
-
-       return ret;
-}
-
-EAPI int livebox_set_auto_launch_handler(int (*launch_handler)(struct livebox *handler, const char *appid, void *data), void *data)
-{
-       s_info.launch.handler = launch_handler;
-       s_info.launch.data = data;
-
-       return LB_STATUS_SUCCESS;
-}
-
-/* End of a file */
index ec3b4cb..5e182a0 100644 (file)
 
 #include <packet.h>
 #include <com-core_packet.h>
-#include <livebox-errno.h>
-#include <livebox-service.h>
+#include <dynamicbox_errno.h>
+#include <dynamicbox_service.h>
 
 #include "debug.h"
 #include "dlist.h"
-#include "livebox.h"
-#include "livebox_internal.h"
+#include "dynamicbox.h"
+#include "dynamicbox_internal.h"
 #include "master_rpc.h"
 #include "client.h"
 #include "util.h"
@@ -41,8 +41,8 @@
 struct command {
        int ttl;
        struct packet *packet;
-       struct livebox *handler;
-       void (*ret_cb)(struct livebox *handler, const struct packet *result, void *data);
+       dynamicbox_h handler;
+       void (*ret_cb)(dynamicbox_h handler, const struct packet *result, void *data);
        void *data;
        enum {
                TYPE_ACK,
@@ -77,7 +77,7 @@ static inline struct command *pop_command(void)
        return command;
 }
 
-static inline struct command *create_command(struct livebox *handler, struct packet *packet)
+static inline struct command *create_command(dynamicbox_h handler, struct packet *packet)
 {
        struct command *command;
 
@@ -87,7 +87,7 @@ static inline struct command *create_command(struct livebox *handler, struct pac
                return NULL;
        }
 
-       command->handler = lb_ref(handler);
+       command->handler = dbox_ref(handler);
        command->packet = packet_ref(packet);
        return command;
 }
@@ -95,7 +95,7 @@ static inline struct command *create_command(struct livebox *handler, struct pac
 static inline void destroy_command(struct command *command)
 {
        packet_unref(command->packet);
-       lb_unref(command->handler, 1);
+       dbox_unref(command->handler, 1);
        free(command);
 }
 
@@ -176,7 +176,7 @@ static int done_cb(pid_t pid, int handle, const struct packet *packet, void *dat
 
        if (packet_get(packet, "i", &ret) != 1) {
                ErrPrint("Invalid result packet\n");
-               ret = LB_STATUS_ERROR_INVALID;
+               ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
 out:
@@ -198,7 +198,7 @@ static inline void push_command(struct command *command)
  * \note
  * "handler" could be NULL
  */
-int master_rpc_async_request(struct livebox *handler, struct packet *packet, int urgent, void (*ret_cb)(struct livebox *handler, const struct packet *result, void *data), void *data)
+int master_rpc_async_request(dynamicbox_h handler, struct packet *packet, int urgent, void (*ret_cb)(dynamicbox_h handler, const struct packet *result, void *data), void *data)
 {
        struct command *command;
 
@@ -206,7 +206,7 @@ int master_rpc_async_request(struct livebox *handler, struct packet *packet, int
        if (!command) {
                ErrPrint("Failed to create a command\n");
                packet_unref(packet);
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        command->ret_cb = ret_cb;
@@ -221,10 +221,10 @@ int master_rpc_async_request(struct livebox *handler, struct packet *packet, int
        }
 
        packet_unref(packet);
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
-int master_rpc_request_only(struct livebox *handler, struct packet *packet)
+int master_rpc_request_only(dynamicbox_h handler, struct packet *packet)
 {
        struct command *command;
 
@@ -232,7 +232,7 @@ int master_rpc_request_only(struct livebox *handler, struct packet *packet)
        if (!command) {
                ErrPrint("Failed to create a command\n");
                packet_unref(packet);
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        command->ret_cb = NULL;
@@ -242,7 +242,7 @@ int master_rpc_request_only(struct livebox *handler, struct packet *packet)
 
        push_command(command);
        packet_unref(packet);
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 int master_rpc_clear_fault_package(const char *pkgname)
@@ -252,7 +252,7 @@ int master_rpc_clear_fault_package(const char *pkgname)
        struct command *command;
 
        if (!pkgname) {
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        dlist_foreach_safe(s_info.cmd_list, l, n, command) {
@@ -301,13 +301,13 @@ int master_rpc_sync_request(struct packet *packet)
        if (result) {
                if (packet_get(result, "i", &ret) != 1) {
                        ErrPrint("Invalid result packet\n");
-                       ret = LB_STATUS_ERROR_INVALID;
+                       ret = DBOX_STATUS_ERROR_INVALID_PARAMETER;
                }
 
                packet_unref(result);
        } else {
                ErrPrint("Failed to send a sync request\n");
-               ret = LB_STATUS_ERROR_FAULT;
+               ret = DBOX_STATUS_ERROR_FAULT;
        }
 
        packet_unref(packet);
index 66431c6..002a5f4 100644 (file)
@@ -23,7 +23,7 @@
 #include <time.h>
 
 #include <dlog.h>
-#include <livebox-errno.h> /* For error code */
+#include <dynamicbox_errno.h> /* For error code */
 
 #include "debug.h"
 #include "util.h"
@@ -44,7 +44,7 @@ int util_check_extension(const char *filename, const char *check_ptr)
        name_len = strlen(filename);
        while (--name_len >= 0 && *check_ptr) {
                if (filename[name_len] != *check_ptr) {
-                       return LB_STATUS_ERROR_INVALID;
+                       return DBOX_STATUS_ERROR_INVALID_PARAMETER;
                }
 
                check_ptr ++;
@@ -104,70 +104,6 @@ const char *util_basename(const char *name)
        return length <= 0 ? name : name + length + (name[length] == '/');
 }
 
-static inline int check_native_livebox(const char *pkgname)
-{
-       int len;
-       char *path;
-
-       len = strlen(pkgname) * 2;
-       len += strlen("/opt/usr/live/%s/libexec/liblive-%s.so");
-
-       path = malloc(len + 1);
-       if (!path) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       snprintf(path, len, "/opt/usr/live/%s/libexec/liblive-%s.so", pkgname, pkgname);
-       if (access(path, F_OK | R_OK) != 0) {
-               ErrPrint("%s is not a valid package\n", pkgname);
-               free(path);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       free(path);
-       return 0;
-}
-
-static inline int check_web_livebox(const char *pkgname)
-{
-       int len;
-       char *path;
-
-       len = strlen(pkgname) * 2;
-       len += strlen("/opt/usr/apps/%s/res/wgt/livebox/index.html");
-
-       path = malloc(len + 1);
-       if (!path) {
-               ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
-       }
-
-       snprintf(path, len, "/opt/usr/apps/%s/res/wgt/livebox/index.html", pkgname);
-       if (access(path, F_OK | R_OK) != 0) {
-               ErrPrint("%s is not a valid package\n", pkgname);
-               free(path);
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       free(path);
-       return 0;
-}
-
-int util_validate_livebox_package(const char *pkgname)
-{
-       if (!pkgname) {
-               ErrPrint("Invalid argument\n");
-               return LB_STATUS_ERROR_INVALID;
-       }
-
-       if (!check_native_livebox(pkgname) || !check_web_livebox(pkgname)) {
-               return 0;
-       }
-
-       return LB_STATUS_ERROR_INVALID;
-}
-
 const char *util_uri_to_path(const char *uri)
 {
        int len;
@@ -187,28 +123,28 @@ int util_unlink(const char *filename)
        int ret;
 
        if (!filename) {
-               return LB_STATUS_ERROR_INVALID;
+               return DBOX_STATUS_ERROR_INVALID_PARAMETER;
        }
 
        desclen = strlen(filename) + 6; /* .desc */
        descfile = malloc(desclen);
        if (!descfile) {
                ErrPrint("Heap: %s\n", strerror(errno));
-               return LB_STATUS_ERROR_MEMORY;
+               return DBOX_STATUS_ERROR_OUT_OF_MEMORY;
        }
 
        ret = snprintf(descfile, desclen, "%s.desc", filename);
        if (ret < 0) {
                ErrPrint("Error: %s\n", strerror(errno));
                free(descfile);
-               return LB_STATUS_ERROR_FAULT;
+               return DBOX_STATUS_ERROR_FAULT;
        }
 
        (void)unlink(descfile);
        free(descfile);
        (void)unlink(filename);
 
-       return LB_STATUS_SUCCESS;
+       return DBOX_STATUS_ERROR_NONE;
 }
 
 /* End of a file */