Merge examples from upstream
authorMike McCormack <mj.mccormack@samsung.com>
Tue, 8 Nov 2011 06:52:13 +0000 (15:52 +0900)
committerMike McCormack <mj.mccormack@samsung.com>
Tue, 8 Nov 2011 06:52:13 +0000 (15:52 +0900)
92 files changed:
src/examples/Makefile.am
src/examples/actionslider_example_01.c
src/examples/anchorblock_example_01.c
src/examples/bg_example_01.c
src/examples/bg_example_02.c
src/examples/bg_example_03.c
src/examples/box_example_02.c
src/examples/bubble_example_01.c
src/examples/button_example_01.c
src/examples/calendar_example_01.c [new file with mode: 0644]
src/examples/calendar_example_02.c [new file with mode: 0644]
src/examples/calendar_example_03.c [new file with mode: 0644]
src/examples/calendar_example_04.c [new file with mode: 0644]
src/examples/calendar_example_05.c [new file with mode: 0644]
src/examples/calendar_example_06.c [new file with mode: 0644]
src/examples/check_example_01.c
src/examples/clock_example.c
src/examples/colorselector_example_01.c
src/examples/conformant_example_01.c [new file with mode: 0644]
src/examples/conformant_example_02.c [new file with mode: 0644]
src/examples/ctxpopup_example_01.c [new file with mode: 0644]
src/examples/dict.txt [new file with mode: 0644]
src/examples/diskselector_example_01.c [new file with mode: 0644]
src/examples/diskselector_example_02.c [new file with mode: 0644]
src/examples/efl_thread_1.c [new file with mode: 0644]
src/examples/efl_thread_2.c [new file with mode: 0644]
src/examples/efl_thread_3.c [new file with mode: 0644]
src/examples/efl_thread_4.c [new file with mode: 0644]
src/examples/efl_thread_5.c [new file with mode: 0644]
src/examples/efl_thread_6.c [new file with mode: 0644]
src/examples/entry_example.c [new file with mode: 0644]
src/examples/fileselector_button_example.c [new file with mode: 0644]
src/examples/fileselector_entry_example.c [new file with mode: 0644]
src/examples/fileselector_example.c [new file with mode: 0644]
src/examples/flip_example_01.c [new file with mode: 0644]
src/examples/flipselector_example.c
src/examples/frame_example_01.c
src/examples/general_funcs_example.c
src/examples/gengrid_example.c [new file with mode: 0644]
src/examples/genlist_example_01.c [new file with mode: 0644]
src/examples/genlist_example_02.c [new file with mode: 0644]
src/examples/genlist_example_03.c [new file with mode: 0644]
src/examples/genlist_example_04.c [new file with mode: 0644]
src/examples/genlist_example_05.c [new file with mode: 0644]
src/examples/hover_example_01.c [new file with mode: 0644]
src/examples/hoversel_example_01.c [new file with mode: 0644]
src/examples/icon_example_01.c [new file with mode: 0644]
src/examples/image_example_01.c [new file with mode: 0644]
src/examples/index_example_01.c [new file with mode: 0644]
src/examples/index_example_02.c [new file with mode: 0644]
src/examples/inwin_example.c [new file with mode: 0644]
src/examples/label_example_01.c [new file with mode: 0644]
src/examples/layout_example.edc [new file with mode: 0644]
src/examples/layout_example_01.c [new file with mode: 0644]
src/examples/layout_example_02.c [new file with mode: 0644]
src/examples/layout_example_03.c [new file with mode: 0644]
src/examples/list_example_01.c [new file with mode: 0644]
src/examples/list_example_02.c [new file with mode: 0644]
src/examples/list_example_03.c [new file with mode: 0644]
src/examples/map_example_01.c [new file with mode: 0644]
src/examples/map_example_02.c [new file with mode: 0644]
src/examples/map_example_03.c [new file with mode: 0644]
src/examples/mapbuf_example.c [new file with mode: 0644]
src/examples/menu_example_01.c [new file with mode: 0644]
src/examples/notify_example_01.c [new file with mode: 0644]
src/examples/pager_example_01.c [new file with mode: 0644]
src/examples/panel_example_01.c [new file with mode: 0644]
src/examples/panes_example.c [new file with mode: 0644]
src/examples/photocam_example_01.c [new file with mode: 0644]
src/examples/progressbar_example.c [new file with mode: 0644]
src/examples/radio_example_01.c [new file with mode: 0644]
src/examples/scroller_example_01.c [new file with mode: 0644]
src/examples/segment_control_example.c [new file with mode: 0644]
src/examples/separator_example_01.c [new file with mode: 0644]
src/examples/slider_example.c [new file with mode: 0644]
src/examples/slideshow_example.c [new file with mode: 0644]
src/examples/spinner_example.c [new file with mode: 0644]
src/examples/table_example_01.c [new file with mode: 0644]
src/examples/table_example_02.c [new file with mode: 0644]
src/examples/theme_example_01.c
src/examples/theme_example_02.c
src/examples/thumb_example_01.c [new file with mode: 0644]
src/examples/toggle_example_01.c [new file with mode: 0644]
src/examples/toolbar_example_01.c [new file with mode: 0644]
src/examples/toolbar_example_02.c [new file with mode: 0644]
src/examples/toolbar_example_03.c [new file with mode: 0644]
src/examples/transit_example_01.c
src/examples/transit_example_02.c
src/examples/transit_example_03.c
src/examples/transit_example_04.c
src/examples/web_example.c [new file with mode: 0644]
src/examples/win_example.c [new file with mode: 0644]

index 92348d3..533f035 100644 (file)
@@ -3,6 +3,8 @@ MAINTAINERCLEANFILES = Makefile.in
 .PHONY: screenshots
 
 pkglibdir = $(datadir)/$(PACKAGE)/examples
+filesdir = $(datadir)/$(PACKAGE)/examples
+files_DATA =
 
 AM_CPPFLAGS = \
 -I. \
@@ -14,10 +16,14 @@ AM_CPPFLAGS = \
 @ELEMENTARY_EDBUS_CFLAGS@ \
 @ELEMENTARY_EFREET_CFLAGS@ \
 @ELEMENTARY_ETHUMB_CFLAGS@ \
+@ELEMENTARY_EMAP_CFLAGS@ \
+@ELEMENTARY_X_CFLAGS@ \
 @ELEMENTARY_CFLAGS@
 
 LDADD = \
        @ELEMENTARY_LIBS@ \
+       @ELEMENTARY_ETHUMB_LIBS@ \
+       @ELEMENTARY_X_LIBS@ \
        $(top_builddir)/src/lib/libelementary.la
 
 EDJE_CC = @edje_cc@
@@ -29,11 +35,10 @@ EDJE_FLAGS = $(EDJE_FLAGS_$(V))
 SRCS = \
        actionslider_example_01.c \
        anchorblock_example_01.c \
-       animator_example_01.c \
        bubble_example_01.c \
        button_example_01.c \
        check_example_01.c \
-       colorselector_example_01.c
+       colorselector_example_01.c \
        frame_example_01.c \
        transit_example_01.c \
        transit_example_02.c \
@@ -43,24 +48,96 @@ SRCS = \
        bg_example_02.c \
        bg_example_03.c \
        box_example_02.c \
+       flip_example_01.c \
        general_funcs_example.c \
+       hover_example_01.c \
+       hoversel_example_01.c \
+       label_example_01.c \
        theme_example_01.c \
        theme_example_02.c \
+       calendar_example_01.c \
+       calendar_example_02.c \
+       calendar_example_03.c \
+       calendar_example_04.c \
+       calendar_example_05.c \
+       calendar_example_06.c \
+       map_example_01.c \
+       map_example_02.c \
+       map_example_03.c \
+       toolbar_example_01.c \
+       toolbar_example_02.c \
+       toolbar_example_03.c \
+       spinner_example.c \
        clock_example.c \
-       theme_example.edc
+       mapbuf_example.c \
+       conformant_example_01.c \
+       conformant_example_02.c \
+       image_example_01.c \
+       icon_example_01.c \
+       layout_example_01.c \
+       layout_example_02.c \
+       layout_example_03.c \
+       list_example_01.c \
+       list_example_02.c \
+       list_example_03.c \
+       segment_control_example.c \
+       flipselector_example.c \
+       fileselector_example.c \
+       fileselector_button_example.c \
+       fileselector_entry_example.c \
+       diskselector_example_01.c \
+       diskselector_example_02.c \
+       index_example_01.c \
+       index_example_02.c \
+       genlist_example_01.c \
+       genlist_example_02.c \
+       genlist_example_03.c \
+       genlist_example_04.c \
+       genlist_example_05.c \
+       theme_example.edc \
+       layout_example.edc \
+       slider_example.c \
+       panes_example.c \
+       ctxpopup_example_01.c \
+       pager_example_01.c \
+       separator_example_01.c \
+       radio_example_01.c \
+       panel_example_01.c \
+       gengrid_example.c \
+       entry_example.c \
+       slideshow_example.c \
+       progressbar_example.c \
+       notify_example_01.c \
+       photocam_example_01.c \
+       inwin_example.c \
+       scroller_example_01.c \
+       table_example_01.c \
+       table_example_02.c \
+       menu_example_01.c \
+       thumb_example_01.c \
+       web_example.c \
+       win_example.c \
+        efl_thread_1.c \
+        efl_thread_2.c \
+        efl_thread_3.c \
+        efl_thread_4.c \
+        efl_thread_5.c \
+        efl_thread_6.c
 
 pkglib_PROGRAMS =
 
+.edc.edj:
+       $(EDJE_CC) $(EDJE_FLAGS) $< $@
+
 if EFL_INSTALL_EXAMPLES
-filesdir = $(datadir)/$(PACKAGE)/examples
-files_DATA = $(SRCS)
+files_DATA += $(SRCS) \
+       dict.txt
 endif
 
 if EFL_BUILD_EXAMPLES
-theme_example.edj: Makefile theme_example.edc
-       $(EDJE_CC) $(EDJE_FLAGS) \
-       $(top_srcdir)/src/examples/theme_example.edc \
-       $(top_builddir)/src/examples/theme_example.edj
+files_DATA += \
+       theme_example.edj \
+       layout_example.edj
 
 clean-local:
        rm -f *.edj
@@ -68,7 +145,6 @@ clean-local:
 pkglib_PROGRAMS += \
        actionslider_example_01 \
        anchorblock_example_01 \
-       animator_example_01 \
        bubble_example_01 \
        button_example_01 \
        check_example_01 \
@@ -82,12 +158,80 @@ pkglib_PROGRAMS += \
        bg_example_02 \
        bg_example_03 \
        box_example_02 \
+       flip_example_01 \
        general_funcs_example \
+       hover_example_01 \
+       hoversel_example_01 \
+       label_example_01 \
        theme_example_01 \
        theme_example_02 \
+       calendar_example_01 \
+       calendar_example_02 \
+       calendar_example_03 \
+       calendar_example_04 \
+       calendar_example_05 \
+       calendar_example_06 \
+       map_example_01 \
+       map_example_02 \
+       map_example_03 \
+       toolbar_example_01 \
+       toolbar_example_02 \
+       toolbar_example_03 \
+       spinner_example \
        clock_example \
+       mapbuf_example \
+       conformant_example_01 \
+       conformant_example_02 \
+       image_example_01 \
+       diskselector_example_01 \
+       diskselector_example_02 \
+       icon_example_01 \
+       layout_example_01 \
+       layout_example_02 \
+       layout_example_03 \
+       list_example_01 \
+       list_example_02 \
+       list_example_03 \
+       segment_control_example \
+       slider_example \
+       panes_example \
+       ctxpopup_example_01 \
        flipselector_example \
-       theme_example.edj
+       fileselector_example \
+       fileselector_button_example \
+       fileselector_entry_example \
+       index_example_01 \
+       index_example_02 \
+       pager_example_01 \
+       separator_example_01 \
+       radio_example_01 \
+       toggle_example_01 \
+       panel_example_01 \
+       gengrid_example \
+       genlist_example_01 \
+       genlist_example_02 \
+       genlist_example_03 \
+       genlist_example_04 \
+       genlist_example_05 \
+       entry_example \
+       slideshow_example \
+       progressbar_example \
+       notify_example_01 \
+       photocam_example_01 \
+       inwin_example \
+       scroller_example_01 \
+       table_example_01 \
+       table_example_02 \
+       menu_example_01 \
+       thumb_example_01 \
+       web_example \
+       win_example \
+        efl_thread_1 \
+        efl_thread_2 \
+        efl_thread_3 \
+        efl_thread_4 \
+        efl_thread_5 \
+        efl_thread_6
 
 # This variable will hold the list of screenshots that will be made
 # by "make screenshots". Each item in the list is of the form:
@@ -103,20 +247,83 @@ SCREENSHOTS = \
        animator_example_01:animator_example_01.png:0.2 \
        animator_example_01:animator_example_02.png:0.5 \
        animator_example_01:animator_example_03.png:0.9 \
+       flip_example_01:flip_example_01.png:0.0 \
        frame_example_01:frame_example_01.png:0.0 \
+       hover_example_01:hover_example_01.png:0.0 \
+       hoversel_example_01:hoversel_example_01.png:0.0 \
+       label_example_01:label_example_01.png:0.0 \
        theme_example_01:theme_example_01.png:0.0 \
+       conformant_example_01:conformant_example_01.png:0.0 \
+       conformant_example_02:conformant_example_02.png:0.0 \
+       calendar_example_01:calendar_example_01.png:0.0 \
+       calendar_example_02:calendar_example_02.png:0.0 \
+       calendar_example_03:calendar_example_03.png:0.0 \
+       calendar_example_04:calendar_example_04.png:0.0 \
+       calendar_example_05:calendar_example_05.png:0.0 \
+       calendar_example_06:calendar_example_06.png:0.0 \
+       map_example_01:map_example_01.png:2 \
+       map_example_02:map_example_02.png:2.5 \
+       map_example_03:map_example_03.png:2 \
+       toolbar_example_01:toolbar_example_01.png:0.0 \
+       toolbar_example_02:toolbar_example_02.png:1 \
+       toolbar_example_03:toolbar_example_03.png:1 \
+       spinner_example:spinner_example.png:0.0 \
        clock_example:clock_example.png:0.5 \
-       flipselector_example:flipselector_example.png:0.0
+       mapbuf_example:mapbuf_example.png:0.0 \
+       image_example_01:image_example_01.png:0.0 \
+       diskselector_example_01:diskselector_example_01.png:0.2 \
+       diskselector_example_02:diskselector_example_02.png:0.2 \
+       icon_example_01:icon_example_01.png:0.0 \
+       layout_example_01:layout_example_01.png:0.0 \
+       layout_example_02:layout_example_02.png:0.0 \
+       layout_example_03:layout_example_03.png:0.0 \
+       list_example_01:list_example_01.png:0.0 \
+       list_example_02:list_example_02.png:0.0 \
+       list_example_03:list_example_03.png:0.0 \
+       segment_control_example:segment_control_example.png:0.0 \
+       flipselector_example:flipselector_example.png:0.0 \
+       fileselector_example:fileselector_example.png:0.0 \
+       index_example_02:index_example_03.png:0.3 \
+       slider_example:slider_example.png:0.0 \
+       panes_example:panes_example.png:0.0 \
+       ctxpopup_example_01:ctxpopup_example_01.png:0.0 \
+       pager_example_01:pager_example_01.png:0.0 \
+       separator_example_01:separator_example_01.png:0.0 \
+       radio_example_01:radio_example_01.png:0.0 \
+       toggle_example_01:toggle_example_01.png:0.0 \
+       panel_example_01:panel_example_01.png:0.0 \
+       gengrid_example:gengrid_example.png:0.0 \
+       genlist_example_01:genlist_example_01.png:0.1 \
+       genlist_example_02:genlist_example_02.png:0.1 \
+       genlist_example_03:genlist_example_03.png:0.1 \
+       genlist_example_04:genlist_example_04.png:0.1 \
+       genlist_example_05:genlist_example_05.png:0.1 \
+       thumb_example_01:thumb_example_01.png:0.5 \
+       entry_example:entry_example.png:0.0 \
+       progressbar_example:progressbar_example.png:0.0 \
+       notify_example_01:notify_example_01.png:0.0 \
+       notify_example_01:notify_example_01_a.png:6.0 \
+       slideshow_example:slideshow_example.png:1.0 \
+       photocam_example_01:photocam_example_01.png:3 \
+       scroller_example_01:scroller_example_01.png:0.0 \
+       inwin_example:inwin_example.png:0.0 \
+       inwin_example:inwin_example_a.png:0.2 \
+       table_example_01:table_example_01.png:0.0 \
+       table_example_02:table_example_02.png:0.0 \
+       menu_example_01:menu_example_01.png:0.5
 
+HTML_SS_DIR=$(top_builddir)/doc/html/screenshots
+LATEX_SS_DIR=$(top_builddir)/doc/latex/screenshots
 screenshots: all
-       @mkdir -p $(top_srcdir)/doc/img/screenshots
+       @mkdir -p $(HTML_SS_DIR)
+       @mkdir -p $(LATEX_SS_DIR)
        @for ss in $(SCREENSHOTS); do \
                SS_ENTRY=($${ss//:/ }) ; \
                EXAMPLE=$${SS_ENTRY[0]} ; \
                SS_FILE=$${SS_ENTRY[1]} ; \
                SS_DELAY=$${SS_ENTRY[2]} ; \
-               ELM_ENGINE="shot:delay=$${SS_DELAY}:file=$(top_srcdir)/doc/img/screenshots/$${SS_FILE}" ./$${EXAMPLE} ; \
-               convert $(top_srcdir)/doc/img/screenshots/$${SS_FILE} $(top_srcdir)/doc/img/screenshots/$${SS_FILE/.png/.eps} ; \
+               ILLUME_KBD=0,0,240,123 ILLUME_IND=0,0,240,32 ILLUME_STK=0,288,240,32 ELM_ENGINE="shot:delay=$${SS_DELAY}:file=$(HTML_SS_DIR)/$${SS_FILE}" ./$${EXAMPLE} ; \
+               convert $(HTML_SS_DIR)/$${SS_FILE} $(LATEX_SS_DIR)/$${SS_FILE/.png/.eps} ; \
        done
 
 else
index a996198..d518436 100644 (file)
@@ -38,7 +38,7 @@ on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __U
    elm_exit();
 }
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 {
    Evas_Object *win, *bg, *bx, *as;
@@ -62,7 +62,8 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
    elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_RIGHT);
    elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_RIGHT);
-   elm_actionslider_labels_set(as, "Snooze", NULL, "Stop");
+   elm_object_text_part_set(as, "left", "Snooze");
+   elm_object_text_part_set(as, "right", "Stop");
    elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT |
                                     ELM_ACTIONSLIDER_RIGHT);
    evas_object_smart_callback_add(as, "pos_changed",
@@ -76,7 +77,8 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
    elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER);
    elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER);
-   elm_actionslider_labels_set(as, "Snooze", NULL, "Stop");
+   elm_object_text_part_set(as, "left", "Snooze");
+   elm_object_text_part_set(as, "right", "Stop");
    elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_LEFT |
                                     ELM_ACTIONSLIDER_RIGHT);
    evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
@@ -92,7 +94,8 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
                                    ELM_ACTIONSLIDER_RIGHT);
    elm_actionslider_enabled_pos_set(as, ELM_ACTIONSLIDER_CENTER |
                                     ELM_ACTIONSLIDER_RIGHT);
-   elm_actionslider_labels_set(as, NULL, "Accept", "Reject");
+   elm_object_text_part_set(as, "center", "Accept");
+   elm_object_text_part_set(as, "right", "Reject");
    evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
    evas_object_show(as);
    elm_box_pack_end(bx, as);
@@ -103,8 +106,9 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
    elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT);
    elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_LEFT);
-   elm_actionslider_labels_set(as, NULL, "Accept", "Reject");
-   elm_actionslider_indicator_label_set(as, "Go");
+   elm_object_text_part_set(as, "center", "Accept");
+   elm_object_text_part_set(as, "right", "Reject");
+   elm_object_text_set(as, "Go");
    evas_object_smart_callback_add(as, "pos_changed",
                                   _position_change_magnetic_cb, NULL);
    evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
@@ -117,8 +121,10 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
    elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_LEFT);
    elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_ALL);
-   elm_actionslider_labels_set(as, "Left", "Center", "Right");
-   elm_actionslider_indicator_label_set(as, "Go");
+   elm_object_text_part_set(as, "left", "Left");
+   elm_object_text_part_set(as, "center", "Center");
+   elm_object_text_part_set(as, "right", "Right");
+   elm_object_text_set(as, "Go");
    evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
    evas_object_show(as);
    elm_box_pack_end(bx, as);
@@ -128,7 +134,9 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_size_hint_align_set(as, EVAS_HINT_FILL, 0);
    elm_actionslider_indicator_pos_set(as, ELM_ACTIONSLIDER_CENTER);
    elm_actionslider_magnet_pos_set(as, ELM_ACTIONSLIDER_CENTER);
-   elm_actionslider_labels_set(as, "Enable", "Magnet", "Disable");
+   elm_object_text_part_set(as, "left", "Enable");
+   elm_object_text_part_set(as, "center", "Magnet");
+   elm_object_text_part_set(as, "right", "Disable");
    evas_object_smart_callback_add(as, "pos_changed",
                                   _magnet_enable_disable_cb, NULL);
    evas_object_smart_callback_add(as, "selected", _pos_selected_cb, NULL);
index ecf7831..628319e 100644 (file)
@@ -49,7 +49,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(box);
 
    frame = elm_frame_add(win);
-   elm_frame_label_set(frame, "Anchorblock");
+   elm_object_text_set(frame, "Anchorblock");
    evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_show(frame);
    elm_box_pack_end(box, frame);
@@ -61,10 +61,10 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_smart_callback_add(o, "anchor,clicked", _anchorblock_clicked_cb,
                                   NULL);
    evas_object_show(o);
-   elm_frame_content_set(frame, o);
+   elm_object_content_set(frame, o);
 
    frame = elm_frame_add(win);
-   elm_frame_label_set(frame, "Anchorview");
+   elm_object_text_set(frame, "Anchorview");
    evas_object_size_hint_weight_set(frame, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_show(frame);
@@ -77,7 +77,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_smart_callback_add(o, "anchor,clicked", _anchorview_clicked_cb,
                                   NULL);
    evas_object_show(o);
-   elm_frame_content_set(frame, o);
+   elm_object_content_set(frame, o);
 
    elm_run();
 
@@ -136,7 +136,7 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
    p = strchr(info->name, ':');
    if (!p)
      {
-        elm_button_label_set(btn, "Nothing to see here");
+        elm_object_text_set(btn, "Nothing to see here");
         evas_object_smart_callback_add(btn, "clicked", btn_end_cb, ao);
         elm_hover_content_set(info->hover, "middle", btn);
         return;
@@ -146,10 +146,10 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
    if (!strncmp(info->name, "tel:", 4))
      {
         Evas_Object *o;
-        elm_button_label_set(btn, "Call");
+        elm_object_text_set(btn, "Call");
 
         secondary = elm_button_add(ao);
-        elm_button_label_set(secondary, "Send SMS");
+        elm_object_text_set(secondary, "Send SMS");
         evas_object_show(secondary);
         evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
         evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
@@ -159,14 +159,14 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
         evas_object_show(box);
 
         o = elm_button_add(ao);
-        elm_button_label_set(o, "Add to contacts");
+        elm_object_text_set(o, "Add to contacts");
         elm_box_pack_end(box, o);
         evas_object_show(o);
         evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
         evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
 
         o = elm_button_add(ao);
-        elm_button_label_set(o, "Send MMS");
+        elm_object_text_set(o, "Send MMS");
         elm_box_pack_end(box, o);
         evas_object_show(o);
         evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
@@ -175,10 +175,10 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
    else if (!strncmp(info->name, "contact:", 8))
      {
         Evas_Object *o;
-        elm_button_label_set(btn, "Call");
+        elm_object_text_set(btn, "Call");
 
         secondary = elm_button_add(ao);
-        elm_button_label_set(secondary, "Send SMS");
+        elm_object_text_set(secondary, "Send SMS");
         evas_object_show(secondary);
         evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
         evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
@@ -188,7 +188,7 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
         evas_object_show(box);
 
         o = elm_button_add(ao);
-        elm_button_label_set(o, "Send MMS");
+        elm_object_text_set(o, "Send MMS");
         elm_box_pack_end(box, o);
         evas_object_show(o);
         evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
@@ -196,10 +196,10 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
      }
    else if (!strncmp(info->name, "mailto:", 7))
      {
-        elm_button_label_set(btn, "Send E-Mail");
+        elm_object_text_set(btn, "Send E-Mail");
 
         secondary = elm_button_add(ao);
-        elm_button_label_set(secondary, "Add to contacts");
+        elm_object_text_set(secondary, "Add to contacts");
         evas_object_show(secondary);
         evas_object_smart_callback_add(secondary, "clicked", btn_end_cb, ao);
         evas_object_smart_callback_add(secondary, "clicked", _btn_clicked_cb,
@@ -208,20 +208,20 @@ _anchor_buttons_create(Evas_Object *ao, Elm_Entry_Anchorblock_Info *info, Evas_S
    else if (!strncmp(info->name, "url:", 4))
      {
         Evas_Object *o;
-        elm_button_label_set(btn, "Launch in browser");
+        elm_object_text_set(btn, "Launch in browser");
 
         box = elm_box_add(ao);
         evas_object_show(box);
 
         o = elm_button_add(ao);
-        elm_button_label_set(o, "Send as mail to...");
+        elm_object_text_set(o, "Send as mail to...");
         elm_box_pack_end(box, o);
         evas_object_show(o);
         evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
         evas_object_smart_callback_add(o, "clicked", _btn_clicked_cb, str);
 
         o = elm_button_add(ao);
-        elm_button_label_set(o, "Send as SMS to...");
+        elm_object_text_set(o, "Send as SMS to...");
         elm_box_pack_end(box, o);
         evas_object_show(o);
         evas_object_smart_callback_add(o, "clicked", btn_end_cb, ao);
index 0d9995d..f0752a5 100644 (file)
@@ -23,7 +23,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    win = elm_win_add(NULL, "bg-plain", ELM_WIN_BASIC);
    elm_win_title_set(win, "Bg Plain");
    evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
-   elm_win_autodel_set(win, 1);
+   elm_win_autodel_set(win, EINA_TRUE);
 
    bg = elm_bg_add(win);
    /* allow bg to expand in x & y */
index 4eeac5b..e34347e 100644 (file)
@@ -25,7 +25,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    win = elm_win_add(NULL, "bg-image", ELM_WIN_BASIC);
    elm_win_title_set(win, "Bg Image");
    evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
-   elm_win_autodel_set(win, 1);
+   elm_win_autodel_set(win, EINA_TRUE);
 
    bg = elm_bg_add(win);
    elm_bg_load_size_set(bg, 20, 20);
index f02d319..b78139b 100644 (file)
@@ -38,10 +38,10 @@ _cb_overlay_changed(void *data, Evas_Object *obj, void *event __UNUSED__)
         parent = elm_object_parent_widget_get(o_bg);
         over = edje_object_add(evas_object_evas_get(parent));
         edje_object_file_set(over, buff, "bg_overlay");
-        elm_bg_overlay_set(o_bg, over);
+        elm_object_content_set(o_bg, over);
      }
    else
-     elm_bg_overlay_set(o_bg, NULL);
+     elm_object_content_set(o_bg, NULL);
 }
 
 static void
@@ -72,7 +72,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    win = elm_win_add(NULL, "bg-options", ELM_WIN_BASIC);
    elm_win_title_set(win, "Bg Options");
    evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
-   elm_win_autodel_set(win, 1);
+   elm_win_autodel_set(win, EINA_TRUE);
 
    bg = elm_bg_add(win);
    evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
@@ -99,7 +99,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 
    rd = elm_radio_add(win);
    elm_radio_state_value_set(rd, ELM_BG_OPTION_CENTER);
-   elm_radio_label_set(rd, "Center");
+   elm_object_text_set(rd, "Center");
    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
    evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg);
    elm_box_pack_end(hbox, rd);
@@ -109,7 +109,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    rd = elm_radio_add(win);
    elm_radio_state_value_set(rd, ELM_BG_OPTION_SCALE);
    elm_radio_group_add(rd, rdg);
-   elm_radio_label_set(rd, "Scale");
+   elm_object_text_set(rd, "Scale");
    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
    evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg);
    elm_box_pack_end(hbox, rd);
@@ -118,7 +118,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    rd = elm_radio_add(win);
    elm_radio_state_value_set(rd, ELM_BG_OPTION_STRETCH);
    elm_radio_group_add(rd, rdg);
-   elm_radio_label_set(rd, "Stretch");
+   elm_object_text_set(rd, "Stretch");
    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
    evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg);
    elm_box_pack_end(hbox, rd);
@@ -127,7 +127,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    rd = elm_radio_add(win);
    elm_radio_state_value_set(rd, ELM_BG_OPTION_TILE);
    elm_radio_group_add(rd, rdg);
-   elm_radio_label_set(rd, "Tile");
+   elm_object_text_set(rd, "Tile");
    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
    evas_object_smart_callback_add(rd, "changed", _cb_radio_changed, o_bg);
    elm_box_pack_end(hbox, rd);
@@ -136,7 +136,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    elm_radio_value_set(rdg, ELM_BG_OPTION_SCALE);
 
    rd = elm_check_add(win);
-   elm_check_label_set(rd, "Show Overlay");
+   elm_object_text_set(rd, "Show Overlay");
    evas_object_size_hint_weight_set(rd, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
    evas_object_smart_callback_add(rd, "changed", _cb_overlay_changed, o_bg);
    elm_box_pack_end(hbox, rd);
index bf39047..3e4b3d1 100644 (file)
@@ -20,7 +20,7 @@ _add_cb(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
    Transitions_Data *tdata = data;
 
    btn = elm_button_add(tdata->box);
-   elm_button_label_set(btn, "I do nothing");
+   elm_object_text_set(btn, "I do nothing");
    children = (Eina_List *)elm_box_children_get(tdata->box);
    if (children)
      {
@@ -102,13 +102,13 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(bx);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Add");
+   elm_object_text_set(bt, "Add");
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_smart_callback_add(bt, "clicked", _add_cb, &tdata);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Clear");
+   elm_object_text_set(bt, "Clear");
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
    evas_object_smart_callback_add(bt, "clicked", _clear_cb, &tdata);
@@ -120,7 +120,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(bx);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Button 1");
+   elm_object_text_set(bt, "Button 1");
    evas_object_smart_callback_add(bt, "clicked", _unpack_cb, &tdata);
    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -128,7 +128,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(bt);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Button 2");
+   elm_object_text_set(bt, "Button 2");
    evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(bt, 1.0, 0.5);
    evas_object_smart_callback_add(bt, "clicked", _unpack_cb, &tdata);
@@ -136,7 +136,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(bt);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Button 3");
+   elm_object_text_set(bt, "Button 3");
    evas_object_smart_callback_add(bt, "clicked", _unpack_cb, &tdata);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
index 0bd559d..9303d78 100644 (file)
@@ -16,11 +16,10 @@ _bla(void *data, Evas_Object *obj, void *event_info)
    elm_bubble_corner_set(obj, corners[++corner > 3 ? corner = 0 : corner]);
 }
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc, char **argv)
 {
    Evas_Object *win, *bg, *bubble, *label, *icon;
-   Elm_Animator *animator;
    char buf[256];
 
    win = elm_win_add(NULL, "bubble", ELM_WIN_BASIC);
@@ -41,9 +40,9 @@ elm_main(int argc, char **argv)
    evas_object_show(icon);
 
    bubble = elm_bubble_add(win);
-   elm_bubble_icon_set(bubble, icon);
+   elm_object_content_part_set(bubble, ELM_BUBBLE_CONTENT_ICON, icon);
    elm_bubble_info_set(bubble, "INFO");
-   elm_bubble_label_set(bubble, "LABEL");
+   elm_object_text_set(bubble, "LABEL");
    elm_bubble_content_set(bubble, label);
    evas_object_resize(bubble, 300, 100);
    evas_object_show(bubble);
index 4ab6676..bd5a5b1 100644 (file)
@@ -24,7 +24,7 @@ static void
 _btn_cursors_release_cb(void *data, Evas_Object *btn __UNUSED__, void *ev __UNUSED__)
 {
    App_Data *app = data;
-   elm_button_icon_set(app->mid, app->icon_still);
+   elm_object_content_set(app->mid, app->icon_still);
    app->icon_still = NULL;
 }
 
@@ -37,10 +37,10 @@ _btn_cursors_move_cb(void *data, Evas_Object *btn, void *ev __UNUSED__)
    if (!app->icon_still)
      {
         Evas_Object *icon;
-        app->icon_still = elm_button_icon_unset(app->mid);
+        app->icon_still = elm_object_content_unset(app->mid);
         icon = elm_icon_add(app->mid);
         elm_icon_standard_set(icon, "chat");
-        elm_button_icon_set(app->mid, icon);
+        elm_object_content_set(app->mid, icon);
      }
 
    evas_object_size_hint_align_get(app->mid, &ax, &ay);
@@ -130,19 +130,19 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(box2);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Initial: 0.0");
+   elm_object_text_set(btn, "Initial: 0.0");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Initial: 1.0");
+   elm_object_text_set(btn, "Initial: 1.0");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Initial: 5.0");
+   elm_object_text_set(btn, "Initial: 5.0");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
@@ -154,19 +154,19 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(box2);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Gap: 0.1");
+   elm_object_text_set(btn, "Gap: 0.1");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Gap: 0.5");
+   elm_object_text_set(btn, "Gap: 0.5");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Gap: 1.0");
+   elm_object_text_set(btn, "Gap: 1.0");
    elm_box_pack_end(box2, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_options_cb, &data);
@@ -185,7 +185,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
 
    icon = elm_icon_add(win);
    elm_icon_standard_set(icon, "arrow_up");
-   elm_button_icon_set(btn, icon);
+   elm_object_content_set(btn, icon);
 
    data.cursors.up = btn;
 
@@ -210,7 +210,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
 
    icon = elm_icon_add(win);
    elm_icon_standard_set(icon, "arrow_left");
-   elm_button_icon_set(btn, icon);
+   elm_object_content_set(btn, icon);
 
    data.cursors.left = btn;
 
@@ -221,7 +221,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
 
    icon = elm_icon_add(win);
    elm_icon_standard_set(icon, "close");
-   elm_button_icon_set(btn, icon);
+   elm_object_content_set(btn, icon);
 
    data.mid = btn;
 
@@ -239,7 +239,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
 
    icon = elm_icon_add(win);
    elm_icon_standard_set(icon, "arrow_right");
-   elm_button_icon_set(btn, icon);
+   elm_object_content_set(btn, icon);
 
    data.cursors.right = btn;
 
@@ -257,7 +257,7 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
 
    icon = elm_icon_add(win);
    elm_icon_standard_set(icon, "arrow_down");
-   elm_button_icon_set(btn, icon);
+   elm_object_content_set(btn, icon);
 
    data.cursors.down = btn;
 
diff --git a/src/examples/calendar_example_01.c b/src/examples/calendar_example_01.c
new file mode 100644 (file)
index 0000000..f22c284
--- /dev/null
@@ -0,0 +1,43 @@
+/**
+ * Simple Elementary's <b>calendar widget</b> example, illustrating its
+ * creation.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_01.c -o calendar_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *cal;
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Creation Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   cal = elm_calendar_add(win);
+   elm_win_resize_object_add(win, cal);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(cal);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/calendar_example_02.c b/src/examples/calendar_example_02.c
new file mode 100644 (file)
index 0000000..f16743b
--- /dev/null
@@ -0,0 +1,61 @@
+/**
+ * Elementary's <b>calendar widget</b> example, demonstrates how to modify
+ * layout strings, using functions to set weekdays names and to format
+ * month and year label.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_02.c -o calendar_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static char *
+_format_month_year(struct tm *stime)
+{
+   char buf[32];
+   /* abbreviates month and year */
+   if (!strftime(buf, sizeof(buf), "%b %y", stime)) return NULL;
+   return strdup(buf);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *cal;
+   const char *weekdays[] =
+     {
+        "S", "M", "T", "W", "T", "F", "S"
+     };
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Layout Formatting Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   cal = elm_calendar_add(win);
+   elm_win_resize_object_add(win, cal);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+   elm_calendar_format_function_set(cal, _format_month_year);
+   elm_calendar_weekdays_names_set(cal, weekdays);
+
+   evas_object_show(cal);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/calendar_example_03.c b/src/examples/calendar_example_03.c
new file mode 100644 (file)
index 0000000..989f776
--- /dev/null
@@ -0,0 +1,45 @@
+/**
+ * Simple Elementary's <b>calendar widget</b> example, illustrating minimum
+ * and maximum years restriction. User will see a calendar of years
+ * 2020, 2021 and 2022.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_03.c -o calendar_example_03
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *cal;
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Min/Max Year Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   cal = elm_calendar_add(win);
+   elm_win_resize_object_add(win, cal);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_calendar_min_max_year_set(cal, 2020, 2022);
+   evas_object_show(cal);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/calendar_example_04.c b/src/examples/calendar_example_04.c
new file mode 100644 (file)
index 0000000..8754212
--- /dev/null
@@ -0,0 +1,64 @@
+/**
+ * Elementary's <b>calendar widget</b> example, regarding date selection.
+ * Shows how to disable day selection by user and how to select a date.
+ * It selects two days from current day.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_04.c -o calendar_example_04
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define SECS_DAY 86400
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *cal, *cal2;
+   struct tm selected_time;
+   time_t current_time;
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Day Selection Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bx);
+
+   cal = elm_calendar_add(win);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cal, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_calendar_day_selection_enabled_set(cal, EINA_FALSE);
+   evas_object_show(cal);
+   elm_box_pack_end(bx, cal);
+
+   cal2 = elm_calendar_add(win);
+   evas_object_size_hint_weight_set(cal2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cal2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   current_time = time(NULL) + 2 * SECS_DAY;
+   localtime_r(&current_time, &selected_time);
+   elm_calendar_selected_time_set(cal2, &selected_time);
+   evas_object_show(cal2);
+   elm_box_pack_end(bx, cal2);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/calendar_example_05.c b/src/examples/calendar_example_05.c
new file mode 100644 (file)
index 0000000..6342bf9
--- /dev/null
@@ -0,0 +1,71 @@
+/**
+ * Elementary's <b>calendar widget</b> example, illustrating smart callback
+ * registry and getters usage.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_05.c -o calendar_example_05
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_print_cal_info_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   int year_min, year_max;
+   Eina_Bool sel_enabled;
+   const char **wds;
+   struct tm stime;
+   double interval;
+
+   if (!elm_calendar_selected_time_get(obj, &stime))
+     return;
+
+   interval = elm_calendar_interval_get(obj);
+   elm_calendar_min_max_year_get(obj, &year_min, &year_max);
+   sel_enabled = elm_calendar_day_selection_enabled_get(obj);
+   wds = elm_calendar_weekdays_names_get(obj);
+
+   printf("Day: %i, Mon: %i, Year %i, WeekDay: %i<br>\n"
+          "Interval: %0.2f, Year_Min: %i, Year_Max %i, Sel Enabled : %i<br>\n"
+          "Weekdays: %s, %s, %s, %s, %s, %s, %s<br>\n\n",
+          stime.tm_mday, stime.tm_mon, stime.tm_year + 1900, stime.tm_wday,
+          interval, year_min, year_max, sel_enabled,
+          wds[0], wds[1], wds[2], wds[3], wds[4], wds[5], wds[6]);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *cal;
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Getters Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   cal = elm_calendar_add(win);
+   elm_win_resize_object_add(win, cal);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   /* Add callback to display calendar information every time user
+    * selects a new date */
+   evas_object_smart_callback_add(cal, "changed", _print_cal_info_cb, NULL);
+   evas_object_show(cal);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/calendar_example_06.c b/src/examples/calendar_example_06.c
new file mode 100644 (file)
index 0000000..7a4cc1e
--- /dev/null
@@ -0,0 +1,98 @@
+/**
+ * Elementary's <b>calendar widget</b> example to add / del / clear marks.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` calendar_example_06.c -o calendar_example_06
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define SECS_DAY 86400
+
+static void
+_btn_clear_cb(void *data, Evas_Object *btn __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *cal = data;
+   elm_calendar_marks_clear(cal);
+   elm_calendar_marks_draw(cal);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bt, *bx, *cal;
+   Elm_Calendar_Mark *mark;
+   struct tm selected_time;
+   time_t current_time;
+   struct tm sunday = {0, 0, 12, 7, 0, 0, 0, 0, -1 };
+   /* tm {sec, min, hour, mday, mon, year, wday, yday, isdst } */
+   /* weekdays since Sunday, range 0 to 6 */
+   struct tm christmas;
+   christmas.tm_mday = 25;
+   /* months since Jan, in the range 0 to 11 */
+   christmas.tm_mon = 11;
+
+   win = elm_win_add(NULL, "calendar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Calendar Marks Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bx);
+
+   cal = elm_calendar_add(win);
+   evas_object_size_hint_weight_set(cal, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cal, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, cal);
+   evas_object_show(cal);
+
+   /* check today - we'll remove it later */
+   current_time = time(NULL);
+   localtime_r(&current_time, &selected_time);
+   mark = elm_calendar_mark_add(cal, "checked", &selected_time,
+                                ELM_CALENDAR_UNIQUE);
+
+   /* check tomorrow */
+   current_time = time(NULL) + 1 * SECS_DAY;
+   localtime_r(&current_time, &selected_time);
+   elm_calendar_mark_add(cal, "checked", &selected_time, ELM_CALENDAR_UNIQUE);
+
+   /* mark christmas as holiday */
+   elm_calendar_mark_add(cal, "holiday", &christmas, ELM_CALENDAR_ANNUALLY);
+
+   /* mark Sundays as holidays */
+   elm_calendar_mark_add(cal, "holiday", &sunday, ELM_CALENDAR_WEEKLY);
+
+   /* ok, let's remove today's check */
+   elm_calendar_mark_del(mark);
+
+   elm_calendar_marks_draw(cal);
+
+   bt = elm_button_add(win);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(bt, "Clear marks");
+   evas_object_smart_callback_add(bt, "clicked", _btn_clear_cb, cal);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
index 54b5656..2f5e99a 100644 (file)
@@ -8,7 +8,7 @@
 
 static void _print(void *data, Evas_Object *obj, void *event_info);
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc, char **argv)
 {
    Evas_Object *win, *bg, *cb, *cb2, *icon;
@@ -40,7 +40,7 @@ elm_main(int argc, char **argv)
    cb2 = elm_check_add(win);
    elm_object_text_set(cb2, "another checkbox");
    elm_check_state_set(cb2, EINA_TRUE);
-   elm_check_icon_set(cb2, icon);
+   elm_object_content_set(cb2, icon);
    evas_object_move(cb2, 10, 50);
    evas_object_resize(cb2, 200, 30);
    evas_object_show(cb2);
index 32b2785..43df3e1 100644 (file)
@@ -24,7 +24,7 @@ _on_done(void *data __UNUSED__,
    elm_exit();
 }
 
-EAPI int
+int
 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 {
    Evas_Object *win, *bg, *bx, *ck;
index 9e1ee9f..0d024a1 100644 (file)
@@ -8,11 +8,10 @@
 
 static void _change_color(void *data, Evas_Object *obj, void *event_info);
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc, char **argv)
 {
    Evas_Object *win, *bg, *cs, *frame, *rect;
-   Elm_Animator *animator;
    char buf[256];
 
    win = elm_win_add(NULL, "color selector", ELM_WIN_BASIC);
@@ -52,4 +51,4 @@ _change_color(void *data, Evas_Object *obj, void *event_info)
    int r, g, b, a;
    elm_colorselector_color_get(obj, &r, &g, &b, &a);
    evas_object_color_set(data, r, g, b, a);
-}
\ No newline at end of file
+}
diff --git a/src/examples/conformant_example_01.c b/src/examples/conformant_example_01.c
new file mode 100644 (file)
index 0000000..e652884
--- /dev/null
@@ -0,0 +1,78 @@
+/**
+ * Simple Elementary's <b>conformant widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` conformant_example_01.c -o conformant_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *btn, *bx, *en;
+
+   win = elm_win_add(NULL, "conformant", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Conformant Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   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);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Test Conformant");
+   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   en = elm_entry_add(win);
+   elm_entry_scrollable_set(en, EINA_TRUE);
+   elm_entry_entry_set(en,
+                       "This is a multi-line entry at the bottom<br>"
+                       "This can contain more than 1 line of text and be "
+                       "scrolled around to allow for entering of lots of "
+                       "content. It is also to test to see that autoscroll "
+                       "moves to the right part of a larger multi-line "
+                       "text entry that is inside of a scroller than can be "
+                       "scrolled around, thus changing the expected position "
+                       "as well as cursor changes updating auto-scroll when "
+                       "it is enabled.");
+
+   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);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Test Conformant");
+   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   evas_object_show(bx);
+
+   evas_object_resize(win, 240, 480);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/conformant_example_02.c b/src/examples/conformant_example_02.c
new file mode 100644 (file)
index 0000000..80d401a
--- /dev/null
@@ -0,0 +1,85 @@
+/**
+ * Simple Elementary's <b>conformant widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` conformant_example_02.c -o conformant_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *conform, *btn, *bx, *en;
+
+   win = elm_win_add(NULL, "conformant", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Conformant Example");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   elm_win_conformant_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   conform = elm_conformant_add(win);
+   elm_win_resize_object_add(win, conform);
+   evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(conform);
+
+   bx = elm_box_add(win);
+   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);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Test Conformant");
+   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   en = elm_entry_add(win);
+   elm_entry_scrollable_set(en, EINA_TRUE);
+   elm_entry_entry_set(en,
+                       "This is a multi-line entry at the bottom<br>"
+                       "This can contain more than 1 line of text and be "
+                       "scrolled around to allow for entering of lots of "
+                       "content. It is also to test to see that autoscroll "
+                       "moves to the right part of a larger multi-line "
+                       "text entry that is inside of a scroller than can be "
+                       "scrolled around, thus changing the expected position "
+                       "as well as cursor changes updating auto-scroll when "
+                       "it is enabled.");
+
+   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);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Test Conformant");
+   evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, btn);
+   evas_object_show(btn);
+
+   elm_object_content_set(conform, bx);
+   evas_object_show(bx);
+
+   evas_object_resize(win, 240, 480);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/ctxpopup_example_01.c b/src/examples/ctxpopup_example_01.c
new file mode 100644 (file)
index 0000000..b938634
--- /dev/null
@@ -0,0 +1,106 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` ctxpopup_example_01.c -o ctxpopup_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void
+_ctxpopup_item_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   printf("ctxpopup item selected: %s\n", elm_ctxpopup_item_label_get(event_info));
+}
+
+Elm_Object_Item *item_new(Evas_Object *ctxpopup, const char * label, const char *icon)
+{
+   Evas_Object *ic = elm_icon_add(ctxpopup);
+   elm_icon_standard_set(ic, icon);
+   elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);
+   return elm_ctxpopup_item_append(ctxpopup, label, ic, _ctxpopup_item_cb, NULL);
+}
+
+static void
+_list_item_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *ctxpopup;
+   Elm_Object_Item *it;
+   Evas_Coord x,y;
+
+   ctxpopup = elm_ctxpopup_add(obj);
+
+   item_new(ctxpopup, "Go to home folder", "home");
+   item_new(ctxpopup, "Save file", "file");
+   item_new(ctxpopup, "Delete file", "delete");
+   it = item_new(ctxpopup, "Navigate to folder", "folder");
+   elm_ctxpopup_item_disabled_set(it, EINA_TRUE);
+   item_new(ctxpopup, "Edit entry", "edit");
+   it = item_new(ctxpopup, "Set date and time", "clock");
+   elm_ctxpopup_item_disabled_set(it, EINA_TRUE);
+
+   evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
+   evas_object_size_hint_max_set(ctxpopup, 240, 240);
+   evas_object_move(ctxpopup, x, y);
+   evas_object_show(ctxpopup);
+
+   elm_list_item_selected_set(event_info, EINA_FALSE);
+}
+
+static void
+_list_item_cb2(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *ctxpopup;
+   Elm_Object_Item *it;
+   Evas_Coord x,y;
+
+   ctxpopup = elm_ctxpopup_add(obj);
+   elm_ctxpopup_horizontal_set(ctxpopup, EINA_TRUE);
+
+   item_new(ctxpopup, NULL, "home");
+   item_new(ctxpopup, NULL, "file");
+   item_new(ctxpopup, NULL, "delete");
+   item_new(ctxpopup, NULL, "folder");
+   it = item_new(ctxpopup, NULL, "edit");
+   elm_ctxpopup_item_disabled_set(it, EINA_TRUE);
+   item_new(ctxpopup, NULL, "clock");
+
+   evas_pointer_canvas_xy_get(evas_object_evas_get(obj), &x, &y);
+   evas_object_size_hint_max_set(ctxpopup, 380, 40);
+   evas_object_move(ctxpopup, x, y);
+   evas_object_show(ctxpopup);
+
+   elm_list_item_selected_set(event_info, EINA_FALSE);
+}
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *list;
+
+   win = elm_win_add(NULL, "Contextual Popup", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Contextual Popup");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   list = elm_list_add(win);
+   elm_win_resize_object_add(win, list);
+   elm_list_mode_set(list, ELM_LIST_COMPRESS);
+
+   elm_list_item_append(list, "Ctxpopup with icons and labels", NULL, NULL,
+                        _list_item_cb, NULL);
+   elm_list_item_append(list, "Ctxpopup with icons only", NULL, NULL,
+                        _list_item_cb2, NULL);
+   evas_object_show(list);
+   elm_list_go(list);
+
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   elm_run();
+}
+ELM_MAIN()
diff --git a/src/examples/dict.txt b/src/examples/dict.txt
new file mode 100644 (file)
index 0000000..e0072bf
--- /dev/null
@@ -0,0 +1,2913 @@
+   "abandon",
+   "abandoned",
+   "abandoning",
+   "abandons",
+   "abbreviate",
+   "abbreviated",
+   "abbreviation",
+   "aberration",
+   "abilities",
+   "ability",
+   "aborigine",
+   "abortifacient",
+   "about",
+   "abseil",
+   "abseiling",
+   "absence",
+   "absolutely",
+   "absorbed",
+   "absorption",
+   "abundances",
+   "abundant",
+   "abuts",
+   "academic",
+   "academy",
+   "acceleration",
+   "acceptable",
+   "acceptance",
+   "accessible",
+   "accession",
+   "accidentally",
+   "acclimatization",
+   "accommodate",
+   "accommodated",
+   "accommodates",
+   "accommodating",
+   "accommodation",
+   "accommodations",
+   "accompanied",
+   "accomplish",
+   "accomplished",
+   "accomplishment",
+   "accomplishments",
+   "according",
+   "accordingly",
+   "accordion",
+   "accreditation",
+   "accuracy",
+   "accused",
+   "accustom",
+   "accustomed",
+   "achieve",
+   "achieved",
+   "achievement",
+   "achievements",
+   "achieves",
+   "achieving",
+   "acknowledged",
+   "acknowledging",
+   "acoustic",
+   "acquaintance",
+   "acquaintances",
+   "acquainted",
+   "acquire",
+   "acquired",
+   "acquires",
+   "acquiring",
+   "acquisition",
+   "acquitted",
+   "across",
+   "activated",
+   "actively",
+   "activities",
+   "actually",
+   "addition",
+   "additional",
+   "additionally",
+   "address",
+   "addressable",
+   "addressed",
+   "addresses",
+   "addressing",
+   "adequate",
+   "adherence",
+   "adhering",
+   "administered",
+   "administrate",
+   "administration",
+   "administrative",
+   "administrator",
+   "admissibility",
+   "admissible",
+   "admission",
+   "admitted",
+   "admittedly",
+   "adolescent",
+   "adopt",
+   "adopted",
+   "adoptive",
+   "advanced",
+   "adventurous",
+   "adversary",
+   "advertisement",
+   "advertisements",
+   "advised",
+   "aerial",
+   "aerials",
+   "aerodynamics",
+   "aesthetic",
+   "aesthetical",
+   "aesthetically",
+   "affair",
+   "affiliate",
+   "afford",
+   "aficionado",
+   "aficionados",
+   "aforementioned",
+   "again",
+   "against",
+   "aggravate",
+   "aggravates",
+   "aggregate",
+   "aggregates",
+   "aggression",
+   "aggressive",
+   "aggressively",
+   "aggressor",
+   "aggrieved",
+   "agree",
+   "agreed",
+   "agreeing",
+   "agreement",
+   "agriculture",
+   "airborne",
+   "aircraft",
+   "airport",
+   "airports",
+   "albeit",
+   "alcohol",
+   "alcoholic",
+   "algebraic",
+   "algorithm",
+   "algorithms",
+   "alienating",
+   "align",
+   "aligned",
+   "all-time",
+   "allege",
+   "alleged",
+   "allegedly",
+   "alleges",
+   "allegiance",
+   "alleviate",
+   "allophone",
+   "allophones",
+   "allotted",
+   "allowed",
+   "allowing",
+   "allusion",
+   "almost",
+   "already",
+   "also",
+   "alternatives",
+   "although",
+   "altogether",
+   "always",
+   "amalgamated",
+   "amateur",
+   "ameliorate",
+   "amend",
+   "amended",
+   "amendment",
+   "amendments",
+   "ammunition",
+   "among",
+   "amongst",
+   "amount",
+   "amused",
+   "analogous",
+   "analytic",
+   "anarchism",
+   "ancestors",
+   "ancestry",
+   "ancillary",
+   "and",
+   "androgynous",
+   "androgyny",
+   "annihilation",
+   "anniversary",
+   "announced",
+   "announcement",
+   "annual",
+   "annually",
+   "annulled",
+   "anoint",
+   "anointed",
+   "anointing",
+   "anoints",
+   "anomalies",
+   "anomalous",
+   "anomaly",
+   "anonymity",
+   "another",
+   "answered",
+   "antarctic",
+   "anthropologist",
+   "anthropology",
+   "anthropomorphization",
+   "anything",
+   "anywhere",
+   "apart",
+   "apartment",
+   "apartments",
+   "apennines",
+   "apologetics",
+   "apologies",
+   "apology",
+   "apparent",
+   "apparently",
+   "appealing",
+   "appearance",
+   "appearances",
+   "application",
+   "applications",
+   "applied",
+   "appreciate",
+   "apprehensive",
+   "approaches",
+   "appropriate",
+   "approximate",
+   "approximately",
+   "aqueduct",
+   "arbitrarily",
+   "arbitrary",
+   "archaeologists",
+   "archaeology",
+   "archaic",
+   "archeologist",
+   "archeologists",
+   "archeology",
+   "archetype",
+   "archetypes",
+   "archimedean",
+   "architect",
+   "architects",
+   "architectural",
+   "architecturally",
+   "architecture",
+   "architectures",
+   "arguably",
+   "argument",
+   "arguments",
+   "armament",
+   "armature",
+   "armistice",
+   "arose",
+   "around",
+   "arranged",
+   "arrangement",
+   "arrangements",
+   "arrested",
+   "arrival",
+   "arrogant",
+   "article",
+   "artificial",
+   "artificially",
+   "artillery",
+   "ascetic",
+   "asian",
+   "aside",
+   "aspects",
+   "asphyxiation",
+   "assassin",
+   "assassinate",
+   "assassinated",
+   "assassinates",
+   "assassination",
+   "assassinations",
+   "assassins",
+   "assault",
+   "assaulted",
+   "assemble",
+   "assertion",
+   "assign",
+   "assist",
+   "assistant",
+   "associate",
+   "associated",
+   "associates",
+   "association",
+   "assume",
+   "asteroid",
+   "asymmetric",
+   "asymmetrical",
+   "atheism",
+   "atheist",
+   "atheistic",
+   "athenian",
+   "athenians",
+   "atrocities",
+   "attain",
+   "attainder",
+   "attempt",
+   "attempted",
+   "attempting",
+   "attempts",
+   "attendance",
+   "attendant",
+   "attendants",
+   "attended",
+   "attention",
+   "attitude",
+   "attorney",
+   "attribute",
+   "attributed",
+   "attributes",
+   "audience",
+   "author",
+   "authoritative",
+   "authorities",
+   "authority",
+   "autobiographic",
+   "autobiography",
+   "autochthonous",
+   "automated",
+   "automatically",
+   "automobile",
+   "autonomous",
+   "auxiliaries",
+   "auxiliary",
+   "availability",
+   "available",
+   "avalanche",
+   "averaged",
+   "aviation",
+   "awarded",
+   "away",
+   "awkward",
+   "back",
+   "background",
+   "backgrounds",
+   "bananas",
+   "bandwidth",
+   "bankruptcy",
+   "basically",
+   "battleship",
+   "beachhead",
+   "beautiful",
+   "became",
+   "because",
+   "becomes",
+   "becoming",
+   "before",
+   "begin",
+   "beginner",
+   "beginners",
+   "beginning",
+   "beginnings",
+   "begins",
+   "behavior",
+   "being",
+   "beleaguered",
+   "belgium",
+   "belief",
+   "believe",
+   "believed",
+   "believes",
+   "believing",
+   "belligerent",
+   "bellwether",
+   "bemusement",
+   "beneficial",
+   "beneficiary",
+   "benefit",
+   "benefits",
+   "bergamot",
+   "besiege",
+   "besieged",
+   "besieging",
+   "bestiality",
+   "between",
+   "bilaterally",
+   "bilingualism",
+   "binomial",
+   "bizarre",
+   "blame",
+   "blamed",
+   "blessing",
+   "bodybuilder",
+   "bombardment",
+   "boundary",
+   "bout",
+   "breakthrough",
+   "breakthroughs",
+   "brethren",
+   "brief",
+   "briefly",
+   "brilliant",
+   "brimstone",
+   "broadcast",
+   "broadcasting",
+   "broadly",
+   "broke",
+   "buoyancy",
+   "buoyant",
+   "bureaucracy",
+   "bureaucratic",
+   "buried",
+   "burying",
+   "business",
+   "businessman",
+   "caisson",
+   "calculate",
+   "calculated",
+   "calculator",
+   "calculus",
+   "calendar",
+   "calendars",
+   "caliber",
+   "calligraphy",
+   "camouflage",
+   "campaign",
+   "campaigns",
+   "can't",
+   "candidate",
+   "canister",
+   "canisters",
+   "cannot",
+   "canonical",
+   "capability",
+   "capable",
+   "capital",
+   "captured",
+   "carcass",
+   "career",
+   "careers",
+   "careful",
+   "caring",
+   "carnage",
+   "carnivorous",
+   "cartilage",
+   "cartographer",
+   "cartridge",
+   "cassette",
+   "cassowary",
+   "casualties",
+   "casualty",
+   "categories",
+   "categorize",
+   "categorized",
+   "category",
+   "caterpillar",
+   "caterpillars",
+   "catholic",
+   "catholicism",
+   "caucuses",
+   "cellpadding",
+   "cemeteries",
+   "cemetery",
+   "censor",
+   "censure",
+   "census",
+   "centennial",
+   "centuries",
+   "century",
+   "ceremonial",
+   "ceremonies",
+   "ceremonious",
+   "ceremony",
+   "certain",
+   "certainty",
+   "cervical",
+   "chairman",
+   "challenge",
+   "challenged",
+   "challenging",
+   "changeable",
+   "character",
+   "characteristic",
+   "characteristics",
+   "characterized",
+   "characters",
+   "charismatic",
+   "chaser",
+   "chemical",
+   "chemically",
+   "chemistry",
+   "chief",
+   "chiefs",
+   "childbirth",
+   "children",
+   "chose",
+   "chosen",
+   "church",
+   "churches",
+   "circuit",
+   "circulation",
+   "circumcision",
+   "civilian",
+   "claims",
+   "class",
+   "classic",
+   "classical",
+   "classically",
+   "clear",
+   "clearance",
+   "clearer",
+   "clearly",
+   "clinical",
+   "clinically",
+   "coast",
+   "cocktail",
+   "cognizant",
+   "coincided",
+   "coincidentally",
+   "collaborations",
+   "collaborative",
+   "collateral",
+   "colleague",
+   "colleagues",
+   "collection",
+   "collective",
+   "colonies",
+   "colonizers",
+   "colonnade",
+   "colony",
+   "colossal",
+   "com",
+   "combinations",
+   "combustion",
+   "comeback",
+   "comedic",
+   "comfortable",
+   "coming",
+   "commander",
+   "commando",
+   "commandos",
+   "commemorate",
+   "commemorated",
+   "commemorates",
+   "commemorating",
+   "commemoration",
+   "commemorative",
+   "commercial",
+   "commercially",
+   "commission",
+   "commissioned",
+   "commissioner",
+   "commissioning",
+   "commissions",
+   "commitment",
+   "commitments",
+   "committed",
+   "committee",
+   "committing",
+   "commonly",
+   "commonwealth",
+   "communication",
+   "communications",
+   "communities",
+   "company",
+   "comparable",
+   "comparative",
+   "comparatively",
+   "comparison",
+   "comparisons",
+   "compatibilities",
+   "compatibility",
+   "compatible",
+   "compensation",
+   "competence",
+   "competent",
+   "competition",
+   "competitions",
+   "competitive",
+   "competitiveness",
+   "competitors",
+   "compiler",
+   "completely",
+   "completion",
+   "component",
+   "comprehensive",
+   "compromise",
+   "compulsory",
+   "computer",
+   "computerized",
+   "conceited",
+   "conceived",
+   "concentrate",
+   "concentrated",
+   "concentrates",
+   "concept",
+   "concern",
+   "concerned",
+   "concerning",
+   "condemnation",
+   "condemned",
+   "condition",
+   "conditions",
+   "confidential",
+   "confidentially",
+   "confides",
+   "configurable",
+   "conform",
+   "congratulations",
+   "congressional",
+   "conjecture",
+   "conjunction",
+   "connected",
+   "connection",
+   "connived",
+   "connotation",
+   "connotations",
+   "conquered",
+   "conqueror",
+   "conquerors",
+   "conscious",
+   "consciously",
+   "consciousness",
+   "consecutive",
+   "consensus",
+   "consent",
+   "consequences",
+   "consequently",
+   "conservative",
+   "consider",
+   "considered",
+   "considering",
+   "considers",
+   "consistent",
+   "consistently",
+   "consolidate",
+   "consolidated",
+   "consonant",
+   "consonants",
+   "consortium",
+   "conspiracies",
+   "conspirator",
+   "constant",
+   "constantly",
+   "consternation",
+   "constituencies",
+   "constituency",
+   "constituent",
+   "constituents",
+   "constituted",
+   "constitution",
+   "constitutional",
+   "constraints",
+   "construction",
+   "constructs",
+   "consultant",
+   "consummate",
+   "consummated",
+   "contains",
+   "contaminate",
+   "contemporaneous",
+   "contemporaries",
+   "contemporary",
+   "contender",
+   "contingent",
+   "continually",
+   "continued",
+   "continuing",
+   "continuous",
+   "continuously",
+   "contribute",
+   "contributed",
+   "contributes",
+   "contributions",
+   "contributor",
+   "contributors",
+   "control",
+   "controlled",
+   "controller",
+   "controlling",
+   "controls",
+   "controversial",
+   "controversies",
+   "controversy",
+   "convenient",
+   "conventional",
+   "conversion",
+   "converted",
+   "convertibles",
+   "conveyor",
+   "convinced",
+   "cooperation",
+   "coordination",
+   "copyright",
+   "cordial",
+   "corporate",
+   "corporations",
+   "correctors",
+   "correspond",
+   "corresponded",
+   "correspondent",
+   "correspondents",
+   "corresponding",
+   "corresponds",
+   "corridors",
+   "corrosion",
+   "could",
+   "council",
+   "councillor",
+   "councillors",
+   "countries",
+   "country",
+   "courier",
+   "covenant",
+   "coy",
+   "created",
+   "credence",
+   "criteria",
+   "criterion",
+   "critical",
+   "criticise",
+   "criticised",
+   "criticises",
+   "criticising",
+   "criticism",
+   "criticisms",
+   "criticized",
+   "criticizing",
+   "critics",
+   "crocodiles",
+   "crown",
+   "crucifixion",
+   "cruises",
+   "crystallisation",
+   "crèche",
+   "culminating",
+   "cumulative",
+   "currently",
+   "curriculum",
+   "cyan",
+   "cylinder",
+   "daiquiri",
+   "dalmatian",
+   "damage",
+   "daughter",
+   "deal",
+   "debatable",
+   "deceived",
+   "decidable",
+   "decide",
+   "decidedly",
+   "deciduous",
+   "decision",
+   "decisions",
+   "decommissioned",
+   "decompose",
+   "decomposed",
+   "decomposes",
+   "decomposing",
+   "decrees",
+   "defendant",
+   "defendants",
+   "defensively",
+   "defiance",
+   "define",
+   "defined",
+   "defining",
+   "definite",
+   "definitely",
+   "definition",
+   "degrade",
+   "deities",
+   "deity",
+   "delegates",
+   "deliberately",
+   "delirious",
+   "delusively",
+   "delves",
+   "demeanor",
+   "democracy",
+   "demographic",
+   "demolition",
+   "demonstration",
+   "denigrating",
+   "densely",
+   "department",
+   "departmental",
+   "departments",
+   "dependence",
+   "dependency",
+   "dependent",
+   "depict",
+   "derivative",
+   "derived",
+   "derogatory",
+   "descendant",
+   "descendants",
+   "describe",
+   "described",
+   "describes",
+   "describing",
+   "description",
+   "descriptors",
+   "desiccated",
+   "designed",
+   "designing",
+   "desirable",
+   "desktop",
+   "despair",
+   "desperate",
+   "desperation",
+   "despicable",
+   "despite",
+   "destabilized",
+   "destination",
+   "destinations",
+   "destined",
+   "destroy",
+   "destruction",
+   "destructive",
+   "detached",
+   "detailed",
+   "detect",
+   "deteriorate",
+   "deteriorated",
+   "deteriorating",
+   "determining",
+   "detrimental",
+   "devastated",
+   "devastating",
+   "develop",
+   "developed",
+   "development",
+   "device",
+   "diabolical",
+   "diamonds",
+   "dichotomy",
+   "didn't",
+   "different",
+   "differentiations",
+   "difficulties",
+   "difficulty",
+   "dilapidated",
+   "dimension",
+   "dimensional",
+   "dimensions",
+   "diminutive",
+   "diocese",
+   "diphthong",
+   "diphthongs",
+   "diplomacy",
+   "directly",
+   "disagreed",
+   "disagreement",
+   "disappear",
+   "disappearance",
+   "disappeared",
+   "disappearing",
+   "disappears",
+   "disappointed",
+   "disappointing",
+   "disapproval",
+   "disarray",
+   "disaster",
+   "disastrous",
+   "disciplined",
+   "discomfort",
+   "disconnects",
+   "discontent",
+   "discover",
+   "discovered",
+   "discovering",
+   "discovers",
+   "discovery",
+   "discuss",
+   "discussed",
+   "disenchanted",
+   "disintegrated",
+   "disintegration",
+   "disobedience",
+   "disobedient",
+   "disorder",
+   "disoriented",
+   "disparagingly",
+   "dispense",
+   "dispensed",
+   "dispensing",
+   "displease",
+   "disposition",
+   "disproportionate",
+   "disputandum",
+   "dissatisfaction",
+   "dissatisfied",
+   "dissemination",
+   "dissolved",
+   "distinction",
+   "distinctive",
+   "distinguish",
+   "distinguished",
+   "distinguishes",
+   "distinguishing",
+   "distributed",
+   "distribution",
+   "districts",
+   "diverse",
+   "divide",
+   "divided",
+   "division",
+   "divisions",
+   "doctrines",
+   "document",
+   "documentary",
+   "documented",
+   "documents",
+   "does",
+   "doesn't",
+   "doing",
+   "dominant",
+   "domination",
+   "double",
+   "doubt",
+   "downloads",
+   "dram",
+   "dramatic",
+   "draughtsman",
+   "dreams",
+   "drink",
+   "drumless",
+   "drumming",
+   "dryas",
+   "duplicate",
+   "during",
+   "dying",
+   "each",
+   "earlier",
+   "earliest",
+   "early",
+   "earned",
+   "eclectic",
+   "eclipse",
+   "economic",
+   "economy",
+   "eels",
+   "efficiency",
+   "efficient",
+   "efficiently",
+   "effluence",
+   "effort",
+   "efforts",
+   "egregious",
+   "eighth",
+   "either",
+   "elected",
+   "election",
+   "electrical",
+   "electrically",
+   "electricity",
+   "elementary",
+   "elephant",
+   "elicited",
+   "eligible",
+   "eliminated",
+   "eliminating",
+   "else",
+   "emanate",
+   "emanated",
+   "embargoes",
+   "embarrass",
+   "embarrassed",
+   "embarrassing",
+   "embarrassment",
+   "embezzled",
+   "emblematic",
+   "emigrant",
+   "emigrated",
+   "emigration",
+   "eminent",
+   "eminently",
+   "emissaries",
+   "emissary",
+   "emission",
+   "emissions",
+   "emitted",
+   "emitting",
+   "emphasis",
+   "emphasised",
+   "emphysema",
+   "empirical",
+   "employs",
+   "enameled",
+   "encouraging",
+   "encryption",
+   "encyclopedia",
+   "endeavors",
+   "endeavour",
+   "ending",
+   "endoliths",
+   "enforcing",
+   "engagement",
+   "engineer",
+   "engineering",
+   "engineers",
+   "enhancement",
+   "enlargement",
+   "enlargements",
+   "enmity",
+   "enormous",
+   "enormously",
+   "ensconced",
+   "entanglements",
+   "entertaining",
+   "entertainment",
+   "enthusiastic",
+   "entitled",
+   "entity",
+   "entrepreneur",
+   "entrepreneurs",
+   "entrusted",
+   "enumerable",
+   "environment",
+   "environmental",
+   "environmentalist",
+   "environmentally",
+   "environments",
+   "episode",
+   "episodes",
+   "equatorial",
+   "equilibrium",
+   "equipment",
+   "equipped",
+   "equivalent",
+   "erratic",
+   "erratically",
+   "erupted",
+   "especially",
+   "essence",
+   "essential",
+   "essentially",
+   "establishes",
+   "establishing",
+   "estimated",
+   "etc",
+   "ethnocentrism",
+   "eventually",
+   "every",
+   "everything",
+   "evidently",
+   "evil",
+   "evolutionary",
+   "exacerbate",
+   "exacerbated",
+   "exact",
+   "exaggerate",
+   "exaggerated",
+   "exaggerates",
+   "exaggerating",
+   "exalted",
+   "examined",
+   "example",
+   "exceeded",
+   "exceedingly",
+   "excel",
+   "excellence",
+   "excellent",
+   "excels",
+   "except",
+   "exceptional",
+   "excerpt",
+   "excerpts",
+   "exchange",
+   "exchanging",
+   "exciting",
+   "excludes",
+   "exclusively",
+   "execute",
+   "executed",
+   "executes",
+   "executing",
+   "execution",
+   "exempt",
+   "exercise",
+   "exercises",
+   "exercising",
+   "exerted",
+   "exhibition",
+   "exhibitions",
+   "exiled",
+   "existed",
+   "existence",
+   "existent",
+   "exonerate",
+   "exoskeleton",
+   "expansion",
+   "expatriate",
+   "expected",
+   "expeditionary",
+   "expeditions",
+   "expel",
+   "expels",
+   "experience",
+   "experienced",
+   "experiments",
+   "explain",
+   "explaining",
+   "explanation",
+   "explicitly",
+   "exploitation",
+   "exploitative",
+   "expressed",
+   "expropriated",
+   "expropriation",
+   "extension",
+   "extensions",
+   "external",
+   "extinct",
+   "extradition",
+   "extraordinarily",
+   "extraordinary",
+   "extraterrestrial",
+   "extraterrestrials",
+   "extravagant",
+   "extremely",
+   "extremist",
+   "extremophile",
+   "facilitate",
+   "facilitated",
+   "facilitates",
+   "facilities",
+   "fact",
+   "familiar",
+   "families",
+   "famous",
+   "fanaticism",
+   "fascinated",
+   "fascist",
+   "favourable",
+   "feasible",
+   "federally",
+   "feel",
+   "feels",
+   "fertility",
+   "fictitious",
+   "fiercely",
+   "fighting",
+   "filament",
+   "finally",
+   "financial",
+   "financially",
+   "find",
+   "finite",
+   "fissionable",
+   "flammable",
+   "flawless",
+   "fled",
+   "flight",
+   "flirts",
+   "flourish",
+   "fluorescent",
+   "fluorine",
+   "focus",
+   "following",
+   "fontier",
+   "football",
+   "forbade",
+   "forbidden",
+   "forehead",
+   "foreign",
+   "foremost",
+   "forerunner",
+   "foresaw",
+   "foreseeable",
+   "foretelling",
+   "foreword",
+   "forfeit",
+   "formalize",
+   "formalized",
+   "formally",
+   "formed",
+   "formerly",
+   "formidable",
+   "forties",
+   "forty",
+   "forward",
+   "fought",
+   "found",
+   "foundries",
+   "foundry",
+   "fourth",
+   "frequently",
+   "friend",
+   "friendly",
+   "friends",
+   "from",
+   "frontier",
+   "fulfill",
+   "fulfilled",
+   "function",
+   "functioning",
+   "fundamental",
+   "fundamentals",
+   "fungi",
+   "further",
+   "furthermore",
+   "futhark",
+   "galactic",
+   "galaxies",
+   "galvanized",
+   "game",
+   "games",
+   "gangster",
+   "gardaí",
+   "garrison",
+   "gauge",
+   "genealogical",
+   "genealogies",
+   "genealogy",
+   "generally",
+   "generate",
+   "generating",
+   "genitalia",
+   "geographical",
+   "geometer",
+   "geometers",
+   "gnawed",
+   "goddess",
+   "goddesses",
+   "going",
+   "governance",
+   "government",
+   "governmental",
+   "governor",
+   "graceful",
+   "graffiti",
+   "grammar",
+   "grammatically",
+   "grateful",
+   "gratefully",
+   "gratuitous",
+   "great",
+   "griddles",
+   "grief",
+   "group",
+   "grow",
+   "guanine",
+   "guarantee",
+   "guaranteed",
+   "guarantees",
+   "guaraná",
+   "guard",
+   "guerrilla",
+   "guerrillas",
+   "guidance",
+   "guttural",
+   "habeas",
+   "haemorrhage",
+   "happen",
+   "happened",
+   "happening",
+   "harass",
+   "harassed",
+   "harasses",
+   "harassing",
+   "harassment",
+   "harassments",
+   "hasn't",
+   "have",
+   "having",
+   "headquarter",
+   "headquartered",
+   "headquarters",
+   "healthcare",
+   "healthy",
+   "heard",
+   "heaviest",
+   "height",
+   "helmet",
+   "help",
+   "helped",
+   "helpful",
+   "hemorrhage",
+   "heredity",
+   "heritage",
+   "hero",
+   "heroes",
+   "hertz",
+   "hesitant",
+   "heterogeneous",
+   "hierarchical",
+   "hierarchies",
+   "hierarchy",
+   "hieroglyph",
+   "hieroglyphics",
+   "hieroglyphs",
+   "higher",
+   "highest",
+   "highway",
+   "hilarious",
+   "himself",
+   "hindrance",
+   "hippopotamus",
+   "histocompatibility",
+   "historians",
+   "history",
+   "hoisted",
+   "holiday",
+   "homogenize",
+   "homogenized",
+   "honorary",
+   "honour",
+   "horrifying",
+   "hospitable",
+   "hours",
+   "however",
+   "humanoid",
+   "humor",
+   "humoral",
+   "humorous",
+   "husband",
+   "hydrogen",
+   "hydrophile",
+   "hydrophilic",
+   "hydrophobe",
+   "hydrophobic",
+   "hygiene",
+   "hypocrisy",
+   "hypocrite",
+   "hypocrites",
+   "iconoclastic",
+   "idea",
+   "ideas",
+   "identical",
+   "identifiers",
+   "ideologies",
+   "ideology",
+   "idiosyncrasy",
+   "idiosyncratic",
+   "illegal",
+   "illegitimacy",
+   "illegitimate",
+   "illness",
+   "illogical",
+   "illusion",
+   "imaginary",
+   "imagine",
+   "imbalance",
+   "imbalanced",
+   "imitate",
+   "imitated",
+   "imitating",
+   "imitator",
+   "immediately",
+   "immense",
+   "immigrant",
+   "immigrants",
+   "immunosuppressant",
+   "impeach",
+   "impeccably",
+   "impedance",
+   "implement",
+   "implemented",
+   "implementing",
+   "impolite",
+   "important",
+   "imprisoned",
+   "imprisonment",
+   "improvements",
+   "improving",
+   "improvisation",
+   "inability",
+   "inaccessible",
+   "inadequate",
+   "inadvertent",
+   "inadvertently",
+   "inappropriate",
+   "inaugurated",
+   "inaugurates",
+   "inauguration",
+   "incarcerated",
+   "incidentally",
+   "include",
+   "including",
+   "incompatibilities",
+   "incompatibility",
+   "incompatible",
+   "incompetence",
+   "incompetent",
+   "incomplete",
+   "inconsistent",
+   "incorporated",
+   "incorporates",
+   "incorporation",
+   "incorruptible",
+   "increased",
+   "incredible",
+   "incrementally",
+   "incunabula",
+   "indefinitely",
+   "independence",
+   "independent",
+   "independently",
+   "indict",
+   "indictment",
+   "indigenous",
+   "indispensable",
+   "indisputable",
+   "indisputably",
+   "individually",
+   "individuals",
+   "induce",
+   "indulge",
+   "industrial",
+   "industry",
+   "inefficiently",
+   "inequalities",
+   "inevitable",
+   "inevitably",
+   "infallibility",
+   "infallible",
+   "infantryman",
+   "infectious",
+   "inferred",
+   "infiltrate",
+   "infiltrated",
+   "infiltration",
+   "infinite",
+   "inflamed",
+   "inflammation",
+   "influenced",
+   "influential",
+   "information",
+   "infringement",
+   "ingenious",
+   "ingredients",
+   "inhabitants",
+   "inherently",
+   "inheritance",
+   "initial",
+   "initialize",
+   "initially",
+   "initiation",
+   "initiative",
+   "innocence",
+   "inoculated",
+   "insectivorous",
+   "insensitive",
+   "inseparable",
+   "insistence",
+   "instance",
+   "instead",
+   "institute",
+   "institution",
+   "institutionalized",
+   "institutions",
+   "instruction",
+   "instrument",
+   "instrumental",
+   "instruments",
+   "insurance",
+   "integer",
+   "integrated",
+   "integration",
+   "intellectual",
+   "intelligence",
+   "intelligent",
+   "intended",
+   "interbreed",
+   "interchangeable",
+   "interchangeably",
+   "intercontinental",
+   "interest",
+   "interference",
+   "interfering",
+   "interim",
+   "international",
+   "interpret",
+   "interpretation",
+   "interpretor",
+   "interred",
+   "interregnum",
+   "interrelated",
+   "interrupt",
+   "intervene",
+   "intervenes",
+   "into",
+   "introduce",
+   "introduced",
+   "intuitions",
+   "intuitive",
+   "intuitively",
+   "inventor",
+   "invertebrates",
+   "investigate",
+   "involvement",
+   "ironically",
+   "irrelevant",
+   "irreplaceable",
+   "irresistible",
+   "irresistibly",
+   "irritable",
+   "irritated",
+   "isn't",
+   "issuing",
+   "jacques",
+   "jeopardy",
+   "jewellery",
+   "journey",
+   "journeyed",
+   "journeys",
+   "judicial",
+   "judiciary",
+   "junior",
+   "jurisdiction",
+   "jurisdictions",
+   "just",
+   "kindergarten",
+   "kleenex",
+   "knife",
+   "knives",
+   "know",
+   "knowledge",
+   "knowledgeable",
+   "knows",
+   "labelled",
+   "laboratory",
+   "laid",
+   "language",
+   "languages",
+   "large",
+   "largest",
+   "larry",
+   "larvae",
+   "last",
+   "latitude",
+   "launch",
+   "launched",
+   "lavatory",
+   "laziness",
+   "league",
+   "lean",
+   "learn",
+   "learns",
+   "left",
+   "legitimate",
+   "leibniz",
+   "leisure",
+   "length",
+   "lethal",
+   "level",
+   "levitate",
+   "levitated",
+   "levitates",
+   "levitating",
+   "liaison",
+   "liaisons",
+   "libel",
+   "libertarianism",
+   "library",
+   "license",
+   "lieutenant",
+   "lifetime",
+   "like",
+   "liked",
+   "likelihood",
+   "likud",
+   "limits",
+   "linguistic",
+   "linguistics",
+   "linnaean",
+   "lipizzaner",
+   "liquefy",
+   "listeners",
+   "literally",
+   "literature",
+   "little",
+   "lived",
+   "lively",
+   "loneliness",
+   "lonely",
+   "longer",
+   "longitudinal",
+   "losing",
+   "lothringen",
+   "love",
+   "lying",
+   "machine",
+   "mackerel",
+   "magazine",
+   "magician",
+   "magnificent",
+   "magnolia",
+   "mainly",
+   "maintained",
+   "maintaining",
+   "maintenance",
+   "majority",
+   "make",
+   "makes",
+   "making",
+   "mammal",
+   "mammalian",
+   "manageable",
+   "management",
+   "maneuver",
+   "maneuverability",
+   "maneuverable",
+   "maneuvers",
+   "manifestations",
+   "manner",
+   "manoeuvre",
+   "manoeuvred",
+   "manoeuvres",
+   "manoeuvring",
+   "manufacture",
+   "manufactured",
+   "manufacturing",
+   "marked",
+   "marketing",
+   "marks",
+   "marmalade",
+   "marriage",
+   "married",
+   "martyred",
+   "masturbation",
+   "materialist",
+   "mathematically",
+   "mathematician",
+   "mathematicians",
+   "mathematics",
+   "mccarthyist",
+   "meaning",
+   "mechanics",
+   "medicine",
+   "mediciny",
+   "medieval",
+   "mediterranean",
+   "meerkat",
+   "member",
+   "membranophone",
+   "memento",
+   "memorable",
+   "mentally",
+   "mentioned",
+   "mercantile",
+   "merchandise",
+   "messaging",
+   "messenger",
+   "metallic",
+   "metallurgic",
+   "metallurgical",
+   "metallurgy",
+   "metamorphosis",
+   "metaphor",
+   "metaphorical",
+   "metaphors",
+   "metaphysical",
+   "meteorologist",
+   "meteorology",
+   "microscopy",
+   "midwives",
+   "milieu",
+   "milieux",
+   "military",
+   "millennia",
+   "millennial",
+   "millennialism",
+   "millennium",
+   "million",
+   "millionaire",
+   "millipede",
+   "mineral",
+   "miniature",
+   "minimum",
+   "ministries",
+   "ministry",
+   "mirrored",
+   "miscellaneous",
+   "mischievous",
+   "misdemeanor",
+   "misdemeanors",
+   "misfortunes",
+   "misogynist",
+   "misogyny",
+   "missile",
+   "missionary",
+   "misspell",
+   "misspelled",
+   "misspelling",
+   "mizzen",
+   "model",
+   "modem",
+   "module",
+   "modules",
+   "mohel",
+   "moisture",
+   "molecules",
+   "moment",
+   "monasteries",
+   "monastery",
+   "money",
+   "monikers",
+   "monolithic",
+   "monotypic",
+   "month",
+   "months",
+   "more",
+   "moroccan",
+   "morocco",
+   "mortgage",
+   "motivated",
+   "mountainous",
+   "mountains",
+   "movement",
+   "movie",
+   "mucous",
+   "multiculturalism",
+   "multiplied",
+   "multipliers",
+   "municipalities",
+   "municipality",
+   "murder",
+   "murdering",
+   "musical",
+   "musician",
+   "musicians",
+   "muslim",
+   "muslims",
+   "mussels",
+   "mutilated",
+   "myriad",
+   "myself",
+   "mysterious",
+   "mystery",
+   "naive",
+   "name",
+   "nasalisation",
+   "nasalization",
+   "natural",
+   "naturally",
+   "necessarily",
+   "necessary",
+   "necessitate",
+   "necessities",
+   "need",
+   "negative",
+   "negligible",
+   "negotiate",
+   "negotiation",
+   "negotiations",
+   "neighborhood",
+   "neighbour",
+   "neighbourhood",
+   "neighbouring",
+   "neighbours",
+   "neolithic",
+   "nesting",
+   "nevertheless",
+   "newsletters",
+   "next",
+   "nickel",
+   "niece",
+   "nightfall",
+   "nighttime",
+   "nineteenth",
+   "ninety",
+   "ninth",
+   "noncombatants",
+   "nonetheless",
+   "nonoperational",
+   "nonsense",
+   "north",
+   "northeastern",
+   "northern",
+   "not",
+   "notable",
+   "notably",
+   "note",
+   "noticeable",
+   "noticeably",
+   "noticing",
+   "notoriety",
+   "notwithstanding",
+   "nouveau",
+   "now",
+   "nowadays",
+   "nuclear",
+   "nuisance",
+   "numbers",
+   "numerous",
+   "nurturing",
+   "nutrient",
+   "nutrients",
+   "obedience",
+   "obedient",
+   "obsessed",
+   "obsession",
+   "obstacle",
+   "obstacles",
+   "obstructed",
+   "occasion",
+   "occasional",
+   "occasionally",
+   "occasioned",
+   "occasions",
+   "occur",
+   "occurred",
+   "occurrence",
+   "occurrences",
+   "occurring",
+   "octahedra",
+   "octahedral",
+   "octahedron",
+   "oeuvre",
+   "offered",
+   "offerings",
+   "officers",
+   "official",
+   "officially",
+   "officials",
+   "often",
+   "omelette",
+   "omission",
+   "omitted",
+   "omitting",
+   "omnivorous",
+   "omnivorously",
+   "only",
+   "opening",
+   "openly",
+   "openness",
+   "ophthalmic",
+   "ophthalmologist",
+   "ophthalmology",
+   "opinion",
+   "opponent",
+   "opportunity",
+   "oppose",
+   "opposed",
+   "opposite",
+   "opposition",
+   "oppression",
+   "oppressive",
+   "optimism",
+   "optimizations",
+   "orally",
+   "ordered",
+   "ordinarily",
+   "organisation",
+   "organise",
+   "organism",
+   "organization",
+   "origin",
+   "original",
+   "originally",
+   "other",
+   "outstanding",
+   "overrun",
+   "overshadowed",
+   "overwhelming",
+   "oxygen",
+   "oxymoron",
+   "pageant",
+   "paid",
+   "paleolithic",
+   "palette",
+   "pamphlet",
+   "pantomime",
+   "parade",
+   "parakeets",
+   "parallel",
+   "parallelly",
+   "parallels",
+   "paraphernalia",
+   "parenthesis",
+   "parliament",
+   "parliamentarian",
+   "partially",
+   "particular",
+   "particularly",
+   "party",
+   "passed",
+   "passengers",
+   "passersby",
+   "pastime",
+   "pastoral",
+   "patented",
+   "patience",
+   "pavilion",
+   "peculiar",
+   "pedestrian",
+   "pejorative",
+   "penalty",
+   "penetrator",
+   "peninsula",
+   "peninsular",
+   "penis",
+   "people",
+   "peoples",
+   "perceive",
+   "perceived",
+   "percentage",
+   "perennially",
+   "performance",
+   "performed",
+   "performers",
+   "perhaps",
+   "period",
+   "peripatetic",
+   "perjury",
+   "permanent",
+   "permanently",
+   "permissible",
+   "permission",
+   "perpendicular",
+   "perseverance",
+   "persistence",
+   "persistent",
+   "personal",
+   "personality",
+   "personnel",
+   "perspective",
+   "persuade",
+   "persuaded",
+   "persuades",
+   "persuading",
+   "perturbation",
+   "perturbations",
+   "perverse",
+   "pessary",
+   "petition",
+   "phenomena",
+   "phenomenal",
+   "phenomenally",
+   "phenomenon",
+   "pheromone",
+   "philosopher",
+   "philosophical",
+   "philosophically",
+   "philosophies",
+   "philosophy",
+   "phonetic",
+   "phonograph",
+   "physically",
+   "piece",
+   "pilgrimage",
+   "pilgrimages",
+   "pineapple",
+   "pioneered",
+   "pitch",
+   "place",
+   "plagiarism",
+   "plaintiff",
+   "planned",
+   "plantation",
+   "plateau",
+   "platform",
+   "plausible",
+   "playwright",
+   "playwrights",
+   "pleasant",
+   "plebiscite",
+   "poem",
+   "poems",
+   "poetry",
+   "pogrom",
+   "pogroms",
+   "poison",
+   "political",
+   "politician",
+   "politicians",
+   "pollinator",
+   "pollinators",
+   "pollute",
+   "polluted",
+   "pollutes",
+   "polluting",
+   "pollution",
+   "polyphonic",
+   "polysaccharide",
+   "pomegranate",
+   "popular",
+   "popularity",
+   "population",
+   "populations",
+   "portrait",
+   "portrayed",
+   "portraying",
+   "portuguese",
+   "position",
+   "positive",
+   "possess",
+   "possessed",
+   "possesses",
+   "possessing",
+   "possession",
+   "possessions",
+   "possibilities",
+   "possibility",
+   "possible",
+   "possibly",
+   "posthumous",
+   "potatoes",
+   "power",
+   "powerful",
+   "practical",
+   "practically",
+   "practice",
+   "practitioner",
+   "practitioners",
+   "prairie",
+   "prairies",
+   "preamble",
+   "precede",
+   "preceded",
+   "precedes",
+   "preceding",
+   "precise",
+   "precisely",
+   "precursor",
+   "predecessor",
+   "predecessors",
+   "predictable",
+   "predictions",
+   "predominately",
+   "preeminence",
+   "preferably",
+   "preferred",
+   "preferring",
+   "pregnancies",
+   "premiere",
+   "premiered",
+   "premillennial",
+   "preoccupation",
+   "preparation",
+   "preparations",
+   "preparatory",
+   "prepare",
+   "prerogative",
+   "presence",
+   "presidential",
+   "prestigious",
+   "presumably",
+   "prevalent",
+   "previous",
+   "priesthood",
+   "primarily",
+   "primitive",
+   "primitively",
+   "primitives",
+   "primordial",
+   "principal",
+   "principle",
+   "private",
+   "privilege",
+   "privileged",
+   "privileges",
+   "probabilistic",
+   "probability",
+   "probably",
+   "problem",
+   "procedure",
+   "proceed",
+   "proceeded",
+   "proceeding",
+   "proceedings",
+   "proceeds",
+   "process",
+   "processing",
+   "processor",
+   "proclaimed",
+   "proclaiming",
+   "proclamation",
+   "professed",
+   "profession",
+   "professional",
+   "professor",
+   "profusion",
+   "programmable",
+   "progressed",
+   "prohibition",
+   "prolegomena",
+   "proliferation",
+   "prolific",
+   "prominence",
+   "prominent",
+   "prominently",
+   "promiscuous",
+   "promoted",
+   "promotion",
+   "prompted",
+   "pronominal",
+   "pronounced",
+   "pronouncements",
+   "pronunciation",
+   "propaganda",
+   "propagate",
+   "propagates",
+   "propagation",
+   "proper",
+   "properly",
+   "prophecy",
+   "proportional",
+   "proportions",
+   "proposition",
+   "proprietary",
+   "proselytizing",
+   "protagonist",
+   "protagonists",
+   "protection",
+   "protocol",
+   "protuberance",
+   "protuberances",
+   "prove",
+   "proved",
+   "provided",
+   "provincial",
+   "provision",
+   "provisional",
+   "provocative",
+   "proximity",
+   "pseudo",
+   "pseudonym",
+   "pseudonymous",
+   "psychic",
+   "psychology",
+   "publicly",
+   "published",
+   "publisher",
+   "pumpkin",
+   "purchasing",
+   "puritanical",
+   "purportedly",
+   "purposely",
+   "pursue",
+   "pursued",
+   "pursuing",
+   "pursuit",
+   "pursuits",
+   "putting",
+   "quantity",
+   "quarantine",
+   "questionable",
+   "quickly",
+   "quintessential",
+   "quit",
+   "quite",
+   "quizzes",
+   "rabbinical",
+   "radioactive",
+   "raised",
+   "rapid",
+   "rarefied",
+   "ratify",
+   "raucous",
+   "reached",
+   "reaching",
+   "readmission",
+   "real",
+   "realised",
+   "realistic",
+   "really",
+   "rebellions",
+   "rebound",
+   "rebuilding",
+   "recall",
+   "receded",
+   "receding",
+   "receipt",
+   "receive",
+   "received",
+   "receiver",
+   "receivers",
+   "receivership",
+   "receives",
+   "receiving",
+   "rechargeable",
+   "recipient",
+   "recipients",
+   "recognise",
+   "recognize",
+   "recognized",
+   "recommend",
+   "recommendations",
+   "recommended",
+   "recommending",
+   "recommends",
+   "reconciliation",
+   "reconnaissance",
+   "reconstructed",
+   "record",
+   "recreational",
+   "recruiting",
+   "recuperate",
+   "recurrence",
+   "recurring",
+   "redeeming",
+   "reelected",
+   "reevaluated",
+   "reference",
+   "referenced",
+   "references",
+   "referendum",
+   "referral",
+   "referred",
+   "referring",
+   "refers",
+   "reflect",
+   "reformist",
+   "refrigeration",
+   "refrigerator",
+   "refusal",
+   "regardless",
+   "regards",
+   "regular",
+   "regularly",
+   "regulation",
+   "regulators",
+   "rehearsal",
+   "reigning",
+   "reincarnation",
+   "reinforced",
+   "relations",
+   "relationship",
+   "relatively",
+   "releases",
+   "relevance",
+   "relevant",
+   "reliability",
+   "reliant",
+   "relieve",
+   "relieved",
+   "reliever",
+   "religious",
+   "religiously",
+   "relinquishment",
+   "remaining",
+   "remember",
+   "remembrance",
+   "reminiscent",
+   "remnant",
+   "rende",
+   "rendezvous",
+   "renewal",
+   "renovate",
+   "renovated",
+   "renovating",
+   "renovation",
+   "renown",
+   "renowned",
+   "renters",
+   "reorganisation",
+   "repeatedly",
+   "repentance",
+   "repentant",
+   "repertoire",
+   "repetition",
+   "replacement",
+   "reportedly",
+   "representative",
+   "representatives",
+   "reproducible",
+   "request",
+   "required",
+   "requirement",
+   "research",
+   "resemblance",
+   "resemble",
+   "resembled",
+   "resembles",
+   "resembling",
+   "reservoir",
+   "reside",
+   "resided",
+   "resident",
+   "residential",
+   "residents",
+   "residing",
+   "resignment",
+   "resistance",
+   "resistant",
+   "resistible",
+   "respectively",
+   "response",
+   "responsibilities",
+   "responsibility",
+   "responsible",
+   "restaurant",
+   "restaurants",
+   "restaurateur",
+   "restaurateurs",
+   "restoration",
+   "restraint",
+   "restricted",
+   "resurrect",
+   "resurrected",
+   "resurrecting",
+   "resurrection",
+   "retaliated",
+   "retaliation",
+   "retrieve",
+   "returned",
+   "reversal",
+   "reversible",
+   "review",
+   "revolutionary",
+   "rewrite",
+   "rewritten",
+   "rhyme",
+   "rhythm",
+   "rhythmic",
+   "rhythms",
+   "ridiculous",
+   "rigorous",
+   "rigueur",
+   "ringing",
+   "rococo",
+   "roommate",
+   "roughly",
+   "rudimentary",
+   "rule",
+   "running",
+   "sacrifice",
+   "sacrificial",
+   "sacrilegious",
+   "safety",
+   "salary",
+   "same",
+   "sanctioned",
+   "sanctioning",
+   "sandwich",
+   "satellite",
+   "satellites",
+   "satiric",
+   "satirical",
+   "satirically",
+   "satisfactorily",
+   "satyr",
+   "saving",
+   "saxophone",
+   "says",
+   "scalable",
+   "scarcity",
+   "scavenged",
+   "scenarios",
+   "schedule",
+   "scholarship",
+   "scholastic",
+   "science",
+   "scientific",
+   "scientist",
+   "screenwriter",
+   "script",
+   "scroll",
+   "scrutiny",
+   "sculptures",
+   "search",
+   "searched",
+   "searches",
+   "seceded",
+   "secretary",
+   "seeing",
+   "segmentation",
+   "segues",
+   "seize",
+   "seized",
+   "seizing",
+   "seizure",
+   "seizures",
+   "seldom",
+   "senior",
+   "sense",
+   "sensitive",
+   "separate",
+   "separated",
+   "separately",
+   "separates",
+   "separating",
+   "separation",
+   "separatism",
+   "separatist",
+   "sepulchre",
+   "sergeant",
+   "service",
+   "settlement",
+   "several",
+   "severely",
+   "shadaloo",
+   "shadow",
+   "shaman",
+   "sheath",
+   "sheriff",
+   "shield",
+   "shining",
+   "shipped",
+   "shipping",
+   "shopkeepers",
+   "shortly",
+   "should",
+   "shouldn't",
+   "show",
+   "shriek",
+   "shrunk",
+   "sidereal",
+   "siege",
+   "signatories",
+   "signatory",
+   "significant",
+   "significantly",
+   "signifies",
+   "similar",
+   "similarity",
+   "similarly",
+   "simpler",
+   "simply",
+   "simultaneous",
+   "simultaneously",
+   "since",
+   "sincerely",
+   "sines",
+   "singsong",
+   "skating",
+   "slaughterhouses",
+   "slightly",
+   "slowly",
+   "smelting",
+   "sneaks",
+   "sneeze",
+   "socialism",
+   "societies",
+   "software",
+   "soil",
+   "soldiers",
+   "solely",
+   "soliloquy",
+   "solitary",
+   "soluble",
+   "some",
+   "someone",
+   "sometimes",
+   "somewhere",
+   "sophisticated",
+   "sophomore",
+   "sorcerer",
+   "sought",
+   "sound",
+   "sounds",
+   "soundtrack",
+   "soup",
+   "south",
+   "southern",
+   "souvenir",
+   "souvenirs",
+   "sovereign",
+   "sovereignty",
+   "soviets",
+   "space",
+   "specialised",
+   "species",
+   "specific",
+   "specifying",
+   "specimen",
+   "spectacular",
+   "spectaculars",
+   "spectrum",
+   "speech",
+   "speeches",
+   "spermatozoon",
+   "spiritual",
+   "splendour",
+   "sponsor",
+   "sponsored",
+   "spontaneous",
+   "spoonfuls",
+   "spread",
+   "square",
+   "stability",
+   "stainless",
+   "standards",
+   "start",
+   "statement",
+   "statements",
+   "statesman",
+   "station",
+   "stereotypes",
+   "steroids",
+   "stirring",
+   "stirs",
+   "stomach",
+   "stop",
+   "stories",
+   "story",
+   "strand",
+   "strange",
+   "strategic",
+   "strategically",
+   "strategies",
+   "strategy",
+   "streamlining",
+   "strength",
+   "strengthen",
+   "strengthened",
+   "strengthening",
+   "strenuous",
+   "strictest",
+   "strikingly",
+   "stringent",
+   "strong",
+   "strongest",
+   "structural",
+   "structure",
+   "structured",
+   "struggling",
+   "stubbornness",
+   "study",
+   "studying",
+   "style",
+   "stylus",
+   "subcategories",
+   "subcategory",
+   "subconsciously",
+   "subjugation",
+   "submachine",
+   "subpoena",
+   "subsequent",
+   "subsequently",
+   "subsidiary",
+   "subspecies",
+   "substance",
+   "substances",
+   "substantial",
+   "substituted",
+   "subterranean",
+   "subtract",
+   "subtracted",
+   "subtracting",
+   "subtraction",
+   "subtracts",
+   "suburban",
+   "succeed",
+   "succeeded",
+   "succeeding",
+   "succeeds",
+   "success",
+   "successes",
+   "successful",
+   "successfully",
+   "succession",
+   "successive",
+   "successor",
+   "suffered",
+   "suffering",
+   "sufficient",
+   "sufficiently",
+   "suffrage",
+   "suicidal",
+   "suicide",
+   "summary",
+   "sunglasses",
+   "superintendent",
+   "superseded",
+   "supplanted",
+   "supplemented",
+   "supplementing",
+   "supply",
+   "support",
+   "suppose",
+   "supposed",
+   "supposedly",
+   "supposes",
+   "supposing",
+   "suppress",
+   "suppressed",
+   "suppresses",
+   "suppressing",
+   "surface",
+   "surly",
+   "surprise",
+   "surprised",
+   "surprising",
+   "surprisingly",
+   "surrendering",
+   "surreptitious",
+   "surreptitiously",
+   "surround",
+   "surrounded",
+   "surrounding",
+   "surroundings",
+   "surrounds",
+   "surveil",
+   "surveillance",
+   "surveyor",
+   "survived",
+   "survivor",
+   "survivors",
+   "susceptible",
+   "suspension",
+   "swear",
+   "swears",
+   "swept",
+   "swimming",
+   "symmetric",
+   "symmetrical",
+   "symmetrically",
+   "symmetry",
+   "symphony",
+   "symptoms",
+   "synagogue",
+   "synchronization",
+   "synonymous",
+   "synonyms",
+   "syphilis",
+   "syrup",
+   "system",
+   "systematically",
+   "take",
+   "takes",
+   "taking",
+   "talked",
+   "talking",
+   "targeted",
+   "targeting",
+   "taste",
+   "tattoos",
+   "taught",
+   "taxonomic",
+   "taxonomy",
+   "technician",
+   "technicians",
+   "techniques",
+   "technology",
+   "telephony",
+   "television",
+   "temperament",
+   "temperate",
+   "temperature",
+   "template",
+   "templates",
+   "temporarily",
+   "temporary",
+   "tendencies",
+   "tendency",
+   "tentacle",
+   "tentacles",
+   "terrestrial",
+   "territories",
+   "territory",
+   "terrorist",
+   "testicular",
+   "than",
+   "that",
+   "the",
+   "theater",
+   "their",
+   "themselves",
+   "then",
+   "there",
+   "thereafter",
+   "thereby",
+   "these",
+   "they",
+   "they're",
+   "thief",
+   "thieves",
+   "thing",
+   "things",
+   "think",
+   "thinking",
+   "thinks",
+   "third",
+   "this",
+   "thorough",
+   "thoroughly",
+   "those",
+   "thought",
+   "threatened",
+   "threatening",
+   "three",
+   "threshold",
+   "throughout",
+   "time",
+   "tobacco",
+   "today",
+   "today's",
+   "together",
+   "tolerance",
+   "tomatoes",
+   "tomorrow",
+   "tongue",
+   "tonight",
+   "took",
+   "torch",
+   "tormentors",
+   "tornado",
+   "toroidal",
+   "torpedoes",
+   "toward",
+   "towards",
+   "town",
+   "tradition",
+   "traditional",
+   "traditionally",
+   "traffic",
+   "trafficked",
+   "trafficking",
+   "transcendence",
+   "transcendent",
+   "transcendental",
+   "transcending",
+   "transcribing",
+   "transferred",
+   "transferring",
+   "transform",
+   "transformation",
+   "transformed",
+   "transition",
+   "translator",
+   "translators",
+   "transmissible",
+   "transportation",
+   "transsexuals",
+   "tremolo",
+   "tremolos",
+   "triggered",
+   "trilogy",
+   "trolling",
+   "troubles",
+   "troupe",
+   "troupes",
+   "truly",
+   "trust",
+   "trustworthiness",
+   "turnkey",
+   "twelfth",
+   "two",
+   "typical",
+   "typically",
+   "tyrannies",
+   "tyranny",
+   "ubiquitous",
+   "ultimately",
+   "unaccompanied",
+   "unanimous",
+   "unauthorised",
+   "unavailable",
+   "unbalance",
+   "unbeknownst",
+   "unbelievable",
+   "uncertainty",
+   "unchallengeable",
+   "unchangeable",
+   "uncompetitive",
+   "unconscious",
+   "unconsciousness",
+   "unconstitutional",
+   "unconventional",
+   "undecidable",
+   "undefinable",
+   "underground",
+   "understood",
+   "undesirable",
+   "undetectable",
+   "undoubtedly",
+   "unforgettable",
+   "unforgivable",
+   "unfortunately",
+   "unhappy",
+   "unilateral",
+   "unilaterally",
+   "uninhabited",
+   "uninterrupted",
+   "universal",
+   "universities",
+   "university",
+   "unknown",
+   "unlikely",
+   "unmaneuverable",
+   "unmistakably",
+   "unnecessarily",
+   "unnecessary",
+   "unnoticeable",
+   "unofficial",
+   "unpleasant",
+   "unprecedented",
+   "unrepentant",
+   "unsubstantiated",
+   "unsuccessful",
+   "unsuccessfully",
+   "unsurprised",
+   "unsurprising",
+   "unsurprisingly",
+   "until",
+   "untranslatable",
+   "unusable",
+   "unused",
+   "unwarranted",
+   "unwieldy",
+   "upanishad",
+   "upcoming",
+   "upgraded",
+   "upon",
+   "usage",
+   "use",
+   "useful",
+   "usefully",
+   "using",
+   "usually",
+   "vacuum",
+   "vagaries",
+   "validity",
+   "valletta",
+   "valuable",
+   "variant",
+   "variations",
+   "varieties",
+   "variety",
+   "varying",
+   "vassal",
+   "vassals",
+   "vegetable",
+   "vegetables",
+   "vegetarian",
+   "vehicle",
+   "vengeance",
+   "venomous",
+   "veranda",
+   "verification",
+   "vermilion",
+   "versatility",
+   "version",
+   "versions",
+   "very",
+   "vicinity",
+   "victories",
+   "view",
+   "vigilance",
+   "vigorous",
+   "vigueur",
+   "vilification",
+   "vilify",
+   "villain",
+   "villi",
+   "violence",
+   "virtual",
+   "virtually",
+   "visible",
+   "visibly",
+   "visiting",
+   "visitors",
+   "volcano",
+   "volleyball",
+   "volume",
+   "voluntary",
+   "volunteer",
+   "volunteered",
+   "volunteering",
+   "volunteers",
+   "vulnerability",
+   "want",
+   "wanted",
+   "wants",
+   "wardrobe",
+   "warrant",
+   "warranty",
+   "warriors",
+   "was",
+   "wasn't",
+   "wayward",
+   "weaponry",
+   "wear",
+   "weird",
+   "well",
+   "what",
+   "when",
+   "whenever",
+   "whereabouts",
+   "whereas",
+   "wherever",
+   "whether",
+   "which",
+   "while",
+   "whole",
+   "wholly",
+   "widespread",
+   "wield",
+   "wielded",
+   "wife",
+   "will",
+   "willingness",
+   "with",
+   "withdrawal",
+   "withheld",
+   "withhold",
+   "within",
+   "wonderful",
+   "work",
+   "working",
+   "workstation",
+   "world",
+   "worldwide",
+   "worsened",
+   "would",
+   "wrestlers",
+   "write",
+   "writing",
+   "written",
+   "wrote",
+   "xenophobia",
+   "yacht",
+   "yachting",
+   "year",
+   "yearly",
+   "years",
+   "yield",
+   "yielding",
+   "you",
+   "yourself",
+   "yousef",
+   "youtube",
+   "zebra"
diff --git a/src/examples/diskselector_example_01.c b/src/examples/diskselector_example_01.c
new file mode 100644 (file)
index 0000000..02ca5bd
--- /dev/null
@@ -0,0 +1,107 @@
+/**
+ * Simple Elementary's <b>diskselector widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` diskselector_example_01.c -o diskselector_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *ds;
+   unsigned int i;
+   static const char *lbl[] =
+   {
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+   };
+
+   win = elm_win_add(NULL, "diskselector", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Diskselector Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   /* default */
+   ds = elm_diskselector_add(win);
+   evas_object_size_hint_weight_set(ds, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(ds, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, ds);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_diskselector_item_append(ds, lbl[i], NULL, NULL, NULL);
+   evas_object_show(ds);
+
+   /* set round mode and define side label length */
+   ds = elm_diskselector_add(win);
+   evas_object_size_hint_weight_set(ds, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(ds, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, ds);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_diskselector_item_append(ds, lbl[i], NULL, NULL, NULL);
+   elm_diskselector_round_set(ds, EINA_TRUE);
+   elm_diskselector_side_label_length_set(ds, 2);
+   evas_object_show(ds);
+
+   /* display more than 3 items */
+   ds = elm_diskselector_add(win);
+   evas_object_size_hint_weight_set(ds, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(ds, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, ds);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_diskselector_item_append(ds, lbl[i], NULL, NULL, NULL);
+   elm_diskselector_display_item_num_set(ds, 5);
+   printf("Number of Items in DiskSelector : %d\n", elm_diskselector_display_item_num_get(ds));
+   evas_object_show(ds);
+
+   /* set bounce and scroller policy */
+   ds = elm_diskselector_add(win);
+   evas_object_size_hint_weight_set(ds, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(ds, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, ds);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_diskselector_item_append(ds, lbl[i], NULL, NULL, NULL);
+   elm_diskselector_bounce_set(ds, EINA_TRUE, EINA_TRUE);
+   elm_diskselector_scroller_policy_set(ds, ELM_SCROLLER_POLICY_AUTO,
+                                        ELM_SCROLLER_POLICY_ON);
+   evas_object_show(ds);
+
+   evas_object_resize(win, 320, 480);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/diskselector_example_02.c b/src/examples/diskselector_example_02.c
new file mode 100644 (file)
index 0000000..a95e47b
--- /dev/null
@@ -0,0 +1,355 @@
+/**
+ * Elementary's <b>diskselector widget</b> example, illustrating its
+ * covering most of item functions.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` diskselector_example_02.c -o diskselector_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static int counter = 3;
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_add_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *it;
+   Evas_Object *ds = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_diskselector_item_append(ds, label, NULL, NULL, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_add_ic_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *it;
+   Evas_Object *ic, *ds = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   ic = elm_icon_add(ds);
+   elm_icon_standard_set(ic, "home");
+
+   it = elm_diskselector_item_append(ds, label, ic, NULL, NULL);
+   if (!it)
+     printf("Error adding item with icon\n");
+}
+
+static void
+_sel_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Elm_Diskselector_Item *it = event_info;
+   printf("Selected label: %s\n", elm_diskselector_item_label_get(it));
+}
+
+static void
+_add_func_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *it;
+   Evas_Object *ds = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_diskselector_item_append(ds, label, NULL, _sel_cb, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_sel_data_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   char *content = data;
+   Elm_Diskselector_Item *it = event_info;
+   printf("Selected label: %s with data: %s\n",
+          elm_diskselector_item_label_get(it), content);
+}
+
+static void
+_free_data(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   free(data);
+}
+
+static void
+_add_data_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *it;
+   Evas_Object *ds = data;
+   char label[32];
+   char *content = malloc(sizeof(char) * 32);
+
+   snprintf(content, 32, "Item content %i", counter);
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_diskselector_item_append(ds, label, NULL, _sel_data_cb, content);
+   if (!it) {
+     printf("Error adding item\n");
+     return;
+   }
+   elm_diskselector_item_del_cb_set(it, _free_data);
+}
+
+static void
+_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *selected_item;
+   Evas_Object *ds = data;
+
+   selected_item = elm_diskselector_selected_item_get(ds);
+   elm_diskselector_item_del(selected_item);
+}
+
+static void
+_unselect_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *selected_item;
+   Evas_Object *ds = data;
+
+   selected_item = elm_diskselector_selected_item_get(ds);
+   elm_diskselector_item_selected_set(selected_item, EINA_FALSE);
+}
+
+static void
+_print_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   const Eina_List *l, *items;
+   Elm_Diskselector_Item *it;
+   Evas_Object *ds = data;
+
+   items = elm_diskselector_items_get(ds);
+   EINA_LIST_FOREACH(items, l, it)
+      printf("%s\n", elm_diskselector_item_label_get(it));
+}
+
+static void
+_clear_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *ds = data;
+   elm_diskselector_clear(ds);
+}
+
+static void
+_select_first_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *first_item;
+   Evas_Object *ds = data;
+
+   first_item = elm_diskselector_first_item_get(ds);
+   if (first_item)
+     elm_diskselector_item_selected_set(first_item, EINA_TRUE);
+}
+
+static void
+_select_last_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *last_item;
+   Evas_Object *ds = data;
+
+   last_item = elm_diskselector_last_item_get(ds);
+   if (last_item)
+     elm_diskselector_item_selected_set(last_item, EINA_TRUE);
+}
+
+static void
+_select_next_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *selected_item, *next_item;
+   Evas_Object *ds = data;
+
+   selected_item = elm_diskselector_selected_item_get(ds);
+   if (!selected_item) return;
+
+   next_item = elm_diskselector_item_next_get(selected_item);
+   if (next_item)
+     elm_diskselector_item_selected_set(next_item, EINA_TRUE);
+}
+
+static void
+_select_prev_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Diskselector_Item *selected_item, *prev_item;
+   Evas_Object *ds = data;
+
+   selected_item = elm_diskselector_selected_item_get(ds);
+   if (!selected_item) return;
+
+   prev_item = elm_diskselector_item_prev_get(selected_item);
+   if (prev_item)
+     elm_diskselector_item_selected_set(prev_item, EINA_TRUE);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *hbx, *ds, *bt;
+
+   win = elm_win_add(NULL, "diskselector", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Diskselector Items Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   ds = elm_diskselector_add(win);
+   evas_object_size_hint_weight_set(ds, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(ds, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, ds);
+   evas_object_show(ds);
+
+   elm_diskselector_item_append(ds, "Item 0", NULL, NULL, NULL);
+   elm_diskselector_item_append(ds, "Item 1", NULL, NULL, NULL);
+   elm_diskselector_item_append(ds, "Item 2", NULL, NULL, NULL);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append item");
+   evas_object_smart_callback_add(bt, "clicked", _add_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with icon");
+   evas_object_smart_callback_add(bt, "clicked", _add_ic_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with selected function");
+   evas_object_smart_callback_add(bt, "clicked", _add_func_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with data");
+   evas_object_smart_callback_add(bt, "clicked", _add_data_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, hbx);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Delete item");
+   evas_object_smart_callback_add(bt, "clicked", _del_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Unselect item");
+   evas_object_smart_callback_add(bt, "clicked", _unselect_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Print items");
+   evas_object_smart_callback_add(bt, "clicked", _print_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Clear");
+   evas_object_smart_callback_add(bt, "clicked", _clear_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, hbx);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select first item");
+   evas_object_smart_callback_add(bt, "clicked", _select_first_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select last item");
+   evas_object_smart_callback_add(bt, "clicked", _select_last_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select next item");
+   evas_object_smart_callback_add(bt, "clicked", _select_next_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select previous item");
+   evas_object_smart_callback_add(bt, "clicked", _select_prev_cb, ds);
+   elm_box_pack_end(hbx, bt);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/efl_thread_1.c b/src/examples/efl_thread_1.c
new file mode 100644 (file)
index 0000000..98bc5e9
--- /dev/null
@@ -0,0 +1,74 @@
+#include <Elementary.h>
+#include <pthread.h>
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+static pthread_t thread_id;
+
+// BEGIN - code running in my custom pthread instance
+//
+static void *
+my_thread_run(void *arg)
+{
+   double t = 0.0;
+   
+   for (;;)
+     {
+        ecore_thread_main_loop_begin(); // begin critical
+          { // indented for illustration of "critical" block
+             Evas_Coord x, y;
+             
+             x = 200 + (200 * sin(t));
+             y = 200 + (200 * cos(t));
+             evas_object_move(rect, x - 50, y - 50);
+          }
+        ecore_thread_main_loop_end(); // end critical
+        usleep(1000);
+        t += 0.02;
+     }
+   return NULL;
+}
+//
+// END - code running in my custom pthread instance
+
+static void
+my_thread_new(void)
+{
+   pthread_attr_t attr;
+   
+   if (pthread_attr_init(&attr) != 0)
+      perror("pthread_attr_init");
+   if (pthread_create(&thread_id, &attr, my_thread_run, NULL) != 0)
+      perror("pthread_create");
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   
+   win = elm_win_add(NULL, "efl-thread-1", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 1");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+   
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+   
+   o = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(o, 50, 80, 180, 255);
+   evas_object_resize(o, 100, 100);
+   evas_object_show(o);
+   rect = o;
+   
+   // create custom thread to do some "work on the side"
+   my_thread_new();
+   
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/efl_thread_2.c b/src/examples/efl_thread_2.c
new file mode 100644 (file)
index 0000000..a9da805
--- /dev/null
@@ -0,0 +1,90 @@
+#include <Elementary.h>
+#include <pthread.h>
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+struct info
+{
+   double x, y;
+};
+
+static void *my_thread_mainloop_code(void *data);
+
+static pthread_t thread_id;
+
+// BEGIN - code running in my custom pthread instance
+//
+static void *
+my_thread_run(void *arg)
+{
+   double t = 0.0;
+
+   for (;;)
+     {
+        struct info *inf = malloc(sizeof(struct info));
+        
+        if (inf)
+          {
+             inf->x = 200 + (200 * sin(t));
+             inf->y = 200 + (200 * cos(t));
+             ecore_main_loop_thread_safe_call_sync
+                (my_thread_mainloop_code, inf);
+          }
+        // and sleep and loop
+        usleep(1000);
+        t += 0.02;
+     }
+   return NULL;
+}
+//
+// END - code running in my custom pthread instance
+static void
+my_thread_new(void)
+{
+   pthread_attr_t attr;
+   
+   if (pthread_attr_init(&attr) != 0)
+      perror("pthread_attr_init");
+   if (pthread_create(&thread_id, &attr, my_thread_run, NULL) != 0)
+      perror("pthread_create");
+}
+
+static void *
+my_thread_mainloop_code(void *data)
+{
+   struct info *inf = data;
+   evas_object_move(rect, inf->x - 50, inf->y - 50);
+   free(inf);
+   return NULL;
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   
+   win = elm_win_add(NULL, "efl-thread-2", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 2");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+   
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+   
+   o = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(o, 50, 80, 180, 255);
+   evas_object_resize(o, 100, 100);
+   evas_object_show(o);
+   rect = o;
+   
+   // create custom thread to do some "work on the side"
+   my_thread_new();
+   
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/efl_thread_3.c b/src/examples/efl_thread_3.c
new file mode 100644 (file)
index 0000000..3019270
--- /dev/null
@@ -0,0 +1,93 @@
+#include <Elementary.h>
+#include <pthread.h>
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+struct info
+{
+   double x, y;
+};
+
+static void my_thread_mainloop_code(void *data);
+
+static pthread_t thread_id;
+
+// BEGIN - code running in my custom pthread instance
+//
+static void *
+my_thread_run(void *arg)
+{
+   double t = 0.0;
+
+   // inside the pthread function lets loop forever incrimenting a time point
+   for (;;)
+     {
+        struct info *inf = malloc(sizeof(struct info));
+        
+        if (inf)
+          {
+             inf->x = 200 + (200 * sin(t));
+             inf->y = 200 + (200 * cos(t));
+             // now call a function in the mainloop and pass it our allocated
+             // data that it will free when it gets it
+             ecore_main_loop_thread_safe_call_async
+                (my_thread_mainloop_code, inf);
+          }
+        // and sleep and loop
+        usleep(1000);
+        t += 0.02;
+     }
+   return NULL;
+}
+//
+// END - code running in my custom pthread instance
+static void
+my_thread_new(void)
+{
+   pthread_attr_t attr;
+   
+   if (pthread_attr_init(&attr) != 0)
+      perror("pthread_attr_init");
+   if (pthread_create(&thread_id, &attr, my_thread_run, NULL) != 0)
+      perror("pthread_create");
+}
+
+static void
+my_thread_mainloop_code(void *data)
+{
+   struct info *inf = data;
+   evas_object_move(rect, inf->x - 50, inf->y - 50);
+   free(inf);
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   
+   win = elm_win_add(NULL, "efl-thread-3", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 3");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+   
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+   
+   o = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(o, 50, 80, 180, 255);
+   evas_object_resize(o, 100, 100);
+   evas_object_show(o);
+   rect = o;
+   
+   // create custom thread to do some "work on the side"
+   my_thread_new();
+   
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
+   
diff --git a/src/examples/efl_thread_4.c b/src/examples/efl_thread_4.c
new file mode 100644 (file)
index 0000000..2eee3b7
--- /dev/null
@@ -0,0 +1,116 @@
+#include <Elementary.h>
+#include <pthread.h>
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+struct info
+{
+   double x, y;
+};
+
+static void my_thread_mainloop_code(void *data);
+
+static pthread_t thread_id;
+static pthread_mutex_t th_lock;
+static int th_exit = 0;
+
+// BEGIN - code running in my custom pthread instance
+//
+static void *
+my_thread_run(void *arg)
+{
+   double t = 0.0;
+
+   // inside the pthread function lets loop forever incrimenting a time point
+   for (;;)
+     {
+        struct info *inf = malloc(sizeof(struct info));
+        int do_exit;
+        
+        if (inf)
+          {
+             inf->x = 200 + (200 * sin(t));
+             inf->y = 200 + (200 * cos(t));
+             // now call a function in the mainloop and pass it our allocated
+             // data that it will free when it gets it
+             ecore_main_loop_thread_safe_call_async
+                (my_thread_mainloop_code, inf);
+          }
+        // and sleep and loop
+        usleep(1000);
+        t += 0.02;
+        // in case someone has asked us to cancel - then cancel this loop
+        // co-operatively (cancelling is co-operative)
+        pthread_mutex_lock(&th_lock);
+        do_exit = th_exit;
+        pthread_mutex_unlock(&th_lock);
+        if (do_exit) break;
+     }
+   return NULL;
+}
+//
+// END - code running in my custom pthread instance
+
+static void
+my_thread_new(void)
+{
+   pthread_attr_t attr;
+
+   pthread_mutex_init(&th_lock, NULL);
+   if (pthread_attr_init(&attr) != 0)
+      perror("pthread_attr_init");
+   if (pthread_create(&thread_id, &attr, my_thread_run, NULL) != 0)
+      perror("pthread_create");
+}
+
+static void
+my_thread_mainloop_code(void *data)
+{
+   struct info *inf = data;
+   evas_object_move(rect, inf->x - 50, inf->y - 50);
+   free(inf);
+}
+
+// just test cancelling the thread
+static void
+down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   pthread_mutex_lock(&th_lock);
+   th_exit = 1;
+   pthread_mutex_unlock(&th_lock);
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   
+   win = elm_win_add(NULL, "efl-thread-4", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 4");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+   
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   o = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(o, 50, 80, 180, 255);
+   evas_object_resize(o, 100, 100);
+   evas_object_show(o);
+   // new in the examples - we have a mouse down on the blue box cancel
+   // the thread
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, down, NULL);
+   rect = o;
+   
+   // create custom thread to do some "work on the side"
+   my_thread_new();
+   
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
+   
diff --git a/src/examples/efl_thread_5.c b/src/examples/efl_thread_5.c
new file mode 100644 (file)
index 0000000..7b3db3a
--- /dev/null
@@ -0,0 +1,99 @@
+#include <Elementary.h>
+
+static Ecore_Thread *th = NULL;
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+struct info
+{
+   double x, y;
+};
+
+// BEGIN - code running in my custom pthread instance
+//
+static void
+th_do(void *data, Ecore_Thread *th)
+{
+   double t = 0.0;
+   
+   // inside our "do" function for the ecore thread, lets do the real work
+   for (;;)
+     {
+        struct info *inf = malloc(sizeof(struct info));
+        
+        if (inf)
+          {
+             inf->x = 200 + (200 * sin(t));
+             inf->y = 200 + (200 * cos(t));
+             // now we have recorded the timepoint we pass it as feedback
+             // back to the mainloop. it will free it when done
+             ecore_thread_feedback(th, inf);
+          }
+        // and sleep and loop
+        usleep(1000);
+        t += 0.02;
+        // in case someone has asked us to cancel - then cancel this loop
+        // co-operatively (cancelling is co-operative)
+        if (ecore_thread_check(th)) break;
+     }
+}
+//
+// END - code running in my custom pthread instance
+
+static void // when mainloop gets feedback from worker
+th_feedback(void *data, Ecore_Thread *th, void *msg)
+{
+   struct info *inf = msg;
+   evas_object_move(rect, inf->x - 50, inf->y - 50);
+   free(inf);
+}
+
+// BONUS (optional): called after th_do returns and has NOT been cancelled
+static void th_end(void *data, Ecore_Thread *th) { printf("thread ended\n"); }
+// BONUS (optional): called in mainloop AFTER thread has finished cancelling
+static void th_cancel(void *data, Ecore_Thread *th) { printf("thread cancelled\n"); }
+
+// just test cancelling the thread worker
+static void
+down(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   ecore_thread_cancel(th);
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   
+   win = elm_win_add(NULL, "efl-thread-5", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 5");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+   
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+   
+   o = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(o, 50, 80, 180, 255);
+   evas_object_resize(o, 100, 100);
+   evas_object_show(o);
+   evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, down, NULL);
+   rect = o;
+   
+   // explicitly create ecore thread to do some "work on the side" and pass
+   // in NULL as data ptr to callbacks and true at the end means to actually
+   // make a new thread and not use the thread pool (there is a thread pool
+   // with as many thread workers as there are cpu's so this means you do not
+   // overload the cpu's with more work than you actually have processing
+   // units *IF* your threads do actually spend their time doing actual
+   // heavy computation)
+   th = ecore_thread_feedback_run(th_do, th_feedback, th_end, th_cancel, 
+                                  NULL, EINA_TRUE);
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/efl_thread_6.c b/src/examples/efl_thread_6.c
new file mode 100644 (file)
index 0000000..49efe05
--- /dev/null
@@ -0,0 +1,164 @@
+#include <Elementary.h>
+
+static Evas_Object *win = NULL;
+static Evas_Object *rect = NULL;
+
+struct info
+{
+   Evas_Object *obj;
+   int *pix;
+};
+
+// BEGIN - code running in my custom pthread instance
+//
+static void
+mandel(int *pix, int w, int h)
+{
+   double x, xx, y, cx, cy, cox, coy;
+   int iteration, hx, hy, val, r, g, b, rr, gg, bb;
+   int itermax = 10000;
+   double magnify = 0.02;
+
+   // this mandel calc is run in the worker threads so it's here. it is
+   // just here to calculate something and consume cpu to demonstrate the
+   // ecore thread worker queue. don't pay much attention to the below code
+   magnify += ((double)(rand() % 100) / 100.0) / 4.0;
+   cox = (double)(rand() % 100) / 100.0;
+   coy = (double)(rand() % 100) / 100.0;
+   cox /= (magnify * 3.0);
+   r = rand() % 255; g = rand() % 255; b = rand() % 255;
+   for (hy = 0; hy < h; hy++)
+     {
+        for (hx = 0; hx < w; hx++)
+          {
+             cx = (((float)hx) / ((float)w) - 0.5) / (magnify * 3.0);
+             cy = (((float)hy) / ((float)h) - 0.5) / (magnify * 3.0);
+             cx += cox;
+             cy += coy;
+             x = 0.0;
+             y = 0.0;
+             for (iteration = 1; iteration < itermax; iteration++)
+               {
+                  xx = (x * x) - (y * y) + cx;
+                  y = (2.0 * x * y) + cy;
+                  x = xx;
+                  if (((x * x) + (y * y)) > 100.0) iteration = 999999;
+               }
+             val = (((x * x) + (y * y)) * 2.55) / 100.0;
+             if (val > 255) val = 255;
+             if (iteration >= 99999) 
+               {
+                  rr = (r * val) / 255;
+                  gg = (g * val) / 255;
+                  bb = (b * val) / 255;
+                  pix[(hy * w) + hx] = 
+                     (val  << 24) | (rr << 16) | (gg << 8) | (bb);
+               }
+             else
+                pix[(hy * w) + hx] = 0xffffffff;
+          }
+     }
+}
+
+static void
+th_do(void *data, Ecore_Thread *th)
+{
+   struct info *inf = data;
+   // CANNOT TOUCH inf->obj here! just inf->pix which is 256x256 @ 32bpp
+   // quick and dirty to consume some cpu - do a mandelbrot calc
+   mandel(inf->pix, 256, 256);
+}
+//
+// END - code running in my custom pthread instance
+
+static void // thread job finished - collect results and put in img obj
+th_end(void *data, Ecore_Thread *th)
+{
+   struct info *inf = data;
+
+   // copy data to object, free calculated data and info struc
+   evas_object_image_data_copy_set(inf->obj, inf->pix);
+   evas_object_show(inf->obj);
+   free(inf->pix);
+   free(inf);
+}
+
+static void // if the thread is cancelled - free pix, keep obj tho
+th_cancel(void *data, Ecore_Thread *th)
+{
+   struct info *inf = data;
+
+   // just free pixel data and info struct
+   free(inf->pix);
+   free(inf);
+}
+
+static Eina_Bool // animate the objects so you see all the madels move
+anim(void *data)
+{
+   Evas_Object *o = data;
+   double t, z;
+   int w, h, v;
+   Evas_Coord x, y;
+
+   // just calculate some position using the pointer value of the object as
+   // a seed value to make different objects go into different places over time
+   v = ((int)o) & 0xff;
+   t = ecore_loop_time_get();
+   w = 100 + ((v * 100) >> 8);
+   h = 100 + ((v * 100) >> 8);
+   z = (double)(v) / 100.0;
+   x = (w * sin(t));
+   y = (h * cos(t + z));
+   // do the actual move
+   evas_object_move(o, 200 + x - 128, 200 + y - 128);
+   // keep looping - return true
+   return EINA_TRUE;
+}
+
+int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *o, *bg;
+   int i;
+
+   win = elm_win_add(NULL, "efl-thread-6", ELM_WIN_BASIC);
+   elm_win_title_set(win, "EFL Thread 6");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   // queue up 64 mandel generation thread jobs
+   for (i = 0; i < 64; i++)
+     {
+        struct info *inf;
+
+        // create ecore thread to do some threaded job inside the worker pool
+        inf = malloc(sizeof(struct info));
+        if (inf)
+          {
+             Evas_Object *o;
+
+             o = evas_object_image_filled_add(evas_object_evas_get(win));
+             evas_object_image_size_set(o, 256, 256);
+             evas_object_image_alpha_set(o, EINA_TRUE);
+             evas_object_resize(o, 256, 256);
+             inf->obj = o;
+             inf->pix = malloc(256 * 256 * sizeof(int));
+             ecore_thread_run(th_do, th_end, th_cancel, inf);
+             // bonus - slide the objects around all the time with an
+             // animator that ticks off every frame.
+             ecore_animator_add(anim, o);
+          }
+     }
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
+
diff --git a/src/examples/entry_example.c b/src/examples/entry_example.c
new file mode 100644 (file)
index 0000000..e677c95
--- /dev/null
@@ -0,0 +1,586 @@
+/*
+ * gcc -o entry_example entry_example.c `pkg-config --cflags --libs elementary`
+ */
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__ __attribute__((unused))
+#endif
+
+typedef struct
+{
+   Evas_Object *win;
+   Evas_Object *edit_buffer;
+} App_Data;
+
+typedef struct
+{
+   Evas_Object *inwin;
+   Evas_Object *pager;
+   Evas_Object *grid;
+   Evas_Object *settings;
+
+   int size;
+   int vsize;
+   int width, height;
+
+   const char *emo;
+
+   App_Data *ad;
+} App_Inwin_Data;
+
+static void
+_edit_buffer_insert(Evas_Object *e, const char *text)
+{
+   elm_entry_entry_insert(e, text);
+   elm_object_focus(e);
+}
+
+static void
+_it_sel_cb(void *data, Evas_Object *obj __UNUSED__, void *event)
+{
+   App_Inwin_Data *aid = data;
+   Elm_Gengrid_Item *it = event;
+
+   aid->emo = elm_gengrid_item_data_get(it);
+
+   elm_pager_content_promote(aid->pager, aid->settings);
+}
+
+static char *
+_emo_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
+{
+   return strdup(data);
+}
+
+static Evas_Object *
+_emo_content_get(void *data, Evas_Object *obj, const char *part)
+{
+   Evas_Object *o;
+
+   if (strcmp(part, "elm.swallow.icon"))
+     return NULL;
+   o = elm_layout_add(obj);
+   elm_layout_theme_set(o, "entry/emoticon", data, "default");
+   return o;
+}
+
+static void
+_emo_del(void *data, Evas_Object *obj __UNUSED__)
+{
+   free(data);
+}
+
+static Evas_Object *
+_page_grid_add(Evas_Object *parent, App_Inwin_Data *aid)
+{
+   Evas_Object *grid;
+   char *theme, *emo;
+   Eina_List *emos, *it;
+   static Elm_Gengrid_Item_Class it_class = {
+        "default",
+        {
+           _emo_label_get,
+           _emo_content_get,
+           NULL,
+           _emo_del
+        }
+   };
+
+   theme = elm_theme_list_item_path_get("default", NULL);
+   if (!theme) return NULL;
+   emos = edje_file_collection_list(theme);
+   free(theme);
+   if (!emos) return NULL;
+
+   grid = elm_gengrid_add(parent);
+   elm_gengrid_item_size_set(grid, 64, 80);
+   evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+   EINA_LIST_FOREACH(emos, it, emo)
+     {
+        char name[512];
+
+        if (strncmp(emo, "elm/entry/emoticon/", 19))
+          continue;
+        sscanf(emo, "elm/entry/emoticon/%[^/]/default", name);
+        elm_gengrid_item_append(grid, &it_class, strdup(name), _it_sel_cb, aid);
+     }
+   edje_file_collection_list_free(emos);
+
+   return grid;
+}
+
+static void
+_btn_insert_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   App_Inwin_Data *aid = data;
+   const char *size[] = {
+        "size",
+        "absize",
+        "relsize"
+   };
+   const char *vsize[] = {
+        "full",
+        "ascent"
+   };
+   char buf[512];
+
+   snprintf(buf, sizeof(buf), "<item %s=%dx%d vsize=%s href=emoticon/%s>"
+            "</item>", size[aid->size], aid->width, aid->height,
+            vsize[aid->vsize], aid->emo);
+   _edit_buffer_insert(aid->ad->edit_buffer, buf);
+
+   evas_object_del(aid->inwin);
+}
+
+static void
+_width_changed_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
+{
+   App_Inwin_Data *aid = data;
+
+   aid->width = atoi(elm_object_text_get(obj));
+}
+
+static void
+_height_changed_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
+{
+   App_Inwin_Data *aid = data;
+
+   aid->height = atoi(elm_object_text_get(obj));
+}
+
+static Evas_Object *
+_page_settings_add(Evas_Object *parent, App_Inwin_Data *aid)
+{
+   Evas_Object *box, *sizeopts, *box2, *sizebox, *vsizebox,
+               *rsize, *rabsize, *rrelsize, *rvfull, *rvascent,
+               *fwidth, *ewidth, *fheight, *eheight,
+               *binsert;
+   char buf[100];
+   static Elm_Entry_Filter_Accept_Set accept_set = {
+        .accepted = "0123456789",
+        .rejected = NULL
+   };
+   static Elm_Entry_Filter_Limit_Size limit_size = {
+        .max_char_count = 5,
+        .max_byte_count = 0
+   };
+
+   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);
+
+   sizeopts = elm_frame_add(parent);
+   elm_object_text_set(sizeopts, "Size");
+   evas_object_size_hint_weight_set(sizeopts, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(sizeopts, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, sizeopts);
+   evas_object_show(sizeopts);
+
+   box2 = elm_box_add(parent);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(sizeopts, box2);
+   evas_object_show(box2);
+
+   sizebox = elm_box_add(parent);
+   elm_box_horizontal_set(sizebox, EINA_TRUE);
+   evas_object_size_hint_weight_set(sizebox, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(sizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, sizebox);
+   evas_object_show(sizebox);
+
+   rsize = elm_radio_add(parent);
+   elm_object_text_set(rsize, "Scale adjusted (size)");
+   elm_radio_state_value_set(rsize, 0);
+   elm_radio_value_pointer_set(rsize, &aid->size);
+   elm_box_pack_end(sizebox, rsize);
+   evas_object_show(rsize);
+
+   rabsize = elm_radio_add(parent);
+   elm_object_text_set(rabsize, "Absolute size (absize)");
+   elm_radio_state_value_set(rabsize, 1);
+   elm_radio_value_pointer_set(rabsize, &aid->size);
+   elm_radio_group_add(rabsize, rsize);
+   elm_box_pack_end(sizebox, rabsize);
+   evas_object_show(rabsize);
+
+   rrelsize = elm_radio_add(parent);
+   elm_object_text_set(rrelsize, "Relative to line (relsize)");
+   elm_radio_state_value_set(rrelsize, 2);
+   elm_radio_value_pointer_set(rrelsize, &aid->size);
+   elm_radio_group_add(rrelsize, rsize);
+   elm_box_pack_end(sizebox, rrelsize);
+   evas_object_show(rrelsize);
+
+   vsizebox = elm_box_add(parent);
+   elm_box_horizontal_set(vsizebox, EINA_TRUE);
+   evas_object_size_hint_weight_set(vsizebox, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(vsizebox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, vsizebox);
+   evas_object_show(vsizebox);
+
+   rvfull = elm_radio_add(parent);
+   elm_object_text_set(rvfull, "Full height (vsize=full)");
+   elm_radio_state_value_set(rvfull, 0);
+   elm_radio_value_pointer_set(rvfull, &aid->vsize);
+   elm_box_pack_end(vsizebox, rvfull);
+   evas_object_show(rvfull);
+
+   rvascent = elm_radio_add(parent);
+   elm_object_text_set(rvascent, "Ascent only (vsize=ascent)");
+   elm_radio_state_value_set(rvascent, 1);
+   elm_radio_value_pointer_set(rvascent, &aid->vsize);
+   elm_radio_group_add(rvascent, rvfull);
+   elm_box_pack_end(vsizebox, rvascent);
+   evas_object_show(rvascent);
+
+   fwidth = elm_frame_add(parent);
+   elm_object_text_set(fwidth, "Width");
+   evas_object_size_hint_weight_set(fwidth, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(fwidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, fwidth);
+   evas_object_show(fwidth);
+
+   snprintf(buf, sizeof(buf), "%d", aid->width);
+   ewidth = elm_entry_add(parent);
+   elm_entry_single_line_set(ewidth, EINA_TRUE);
+   elm_entry_text_filter_append(ewidth, elm_entry_filter_accept_set,
+                                &accept_set);
+   elm_entry_text_filter_append(ewidth, elm_entry_filter_limit_size,
+                                &limit_size);
+   elm_object_text_set(ewidth, buf);
+   evas_object_size_hint_weight_set(ewidth, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(ewidth, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(fwidth, ewidth);
+   evas_object_show(ewidth);
+
+   evas_object_smart_callback_add(ewidth, "changed", _width_changed_cb, aid);
+
+   fheight = elm_frame_add(parent);
+   elm_object_text_set(fheight, "Height");
+   evas_object_size_hint_weight_set(fheight, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(fheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, fheight);
+   evas_object_show(fheight);
+
+   snprintf(buf, sizeof(buf), "%d", aid->height);
+   eheight = elm_entry_add(parent);
+   elm_entry_single_line_set(eheight, EINA_TRUE);
+   elm_entry_text_filter_append(eheight, elm_entry_filter_accept_set,
+                                &accept_set);
+   elm_entry_text_filter_append(eheight, elm_entry_filter_limit_size,
+                                &limit_size);
+   elm_object_text_set(eheight, buf);
+   evas_object_size_hint_weight_set(eheight, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(eheight, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(fheight, eheight);
+   evas_object_show(eheight);
+
+   evas_object_smart_callback_add(eheight, "changed", _height_changed_cb, aid);
+
+   binsert = elm_button_add(parent);
+   elm_object_text_set(binsert, "Insert");
+   elm_box_pack_end(box, binsert);
+   evas_object_show(binsert);
+
+   evas_object_smart_callback_add(binsert, "clicked", _btn_insert_cb, aid);
+
+   return box;
+}
+
+static void
+_insert_cancel_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   App_Inwin_Data *aid = data;
+
+   evas_object_del(aid->inwin);
+}
+
+static void
+_inwin_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   free(data);
+}
+
+static void
+_image_insert_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   App_Data *ad = data;
+   App_Inwin_Data *aid;
+   Evas_Object *inwin, *box, *box2, *pager, *o;
+
+   aid = calloc(1, sizeof(App_Inwin_Data));
+   if (!aid) return;
+
+   aid->ad = ad;
+   aid->size = 1;
+   aid->vsize = 1;
+   aid->width = 64;
+   aid->height = 64;
+
+   inwin = elm_win_inwin_add(ad->win);
+   evas_object_size_hint_weight_set(inwin, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(inwin, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(inwin);
+
+   evas_object_event_callback_add(inwin, EVAS_CALLBACK_DEL, _inwin_del_cb,
+                                  aid);
+
+   box = elm_box_add(ad->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_inwin_content_set(inwin, box);
+   evas_object_show(box);
+
+   pager = elm_pager_add(ad->win);
+   evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, pager);
+   evas_object_show(pager);
+
+   o = _page_grid_add(ad->win, aid);
+   elm_pager_content_push(pager, o);
+   aid->grid = o;
+
+   o = _page_settings_add(ad->win, aid);
+   elm_pager_content_push(pager, o);
+   aid->settings = o;
+
+   elm_pager_content_promote(pager, aid->grid);
+
+   box2 = elm_box_add(ad->win);
+   elm_box_horizontal_set(box2, EINA_TRUE);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, box2);
+   evas_object_show(box2);
+
+   o = elm_button_add(ad->win);
+   elm_object_text_set(o, "Cancel");
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _insert_cancel_cb, aid);
+
+   aid->inwin = inwin;
+   aid->pager = pager;
+}
+
+static void
+_format_change_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
+{
+   App_Data *ad = data;
+   char fmt_open[5], fmt_close[6];
+   const char *sel;
+   int cursor;
+   char *s;
+   const char *ptr, *what;
+   Eina_Strbuf *buf = NULL;
+
+   sel = elm_object_text_get(obj);
+   snprintf(fmt_open, sizeof(fmt_open), "<%s>", sel);
+   snprintf(fmt_close, sizeof(fmt_close), "</%s>", sel);
+
+   buf = eina_strbuf_new();
+
+   cursor = elm_entry_cursor_pos_get(ad->edit_buffer);
+   elm_entry_cursor_begin_set(ad->edit_buffer);
+   elm_entry_cursor_selection_begin(ad->edit_buffer);
+   elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
+   elm_entry_cursor_selection_end(ad->edit_buffer);
+   sel = elm_entry_selection_get(ad->edit_buffer);
+   if (!sel || !sel[0])
+     {
+        eina_strbuf_append(buf, fmt_open);
+        goto all_done;
+     }
+   what = fmt_open;
+   ptr = sel;
+   while ((s = strstr(ptr, what)))
+     {
+        ptr = s + strlen(what);
+        if (what == fmt_open) what = fmt_close;
+        else what = fmt_open;
+     }
+   eina_strbuf_append(buf, what);
+   if (what == fmt_close)
+     {
+        elm_entry_cursor_selection_begin(ad->edit_buffer);
+        elm_entry_cursor_end_set(ad->edit_buffer);
+        elm_entry_cursor_selection_end(ad->edit_buffer);
+        sel = elm_entry_selection_get(ad->edit_buffer);
+        if (sel)
+          {
+             Eina_Strbuf *buf2 = eina_strbuf_new();
+             eina_strbuf_append(buf2, sel);
+             eina_strbuf_replace_first(buf2, fmt_close, "");
+             elm_entry_entry_insert(ad->edit_buffer,
+                                    eina_strbuf_string_get(buf2));
+             eina_strbuf_free(buf2);
+          }
+     }
+   elm_entry_select_none(ad->edit_buffer);
+   elm_entry_cursor_pos_set(ad->edit_buffer, cursor);
+
+all_done:
+   _edit_buffer_insert(ad->edit_buffer, eina_strbuf_string_get(buf));
+   eina_strbuf_free(buf);
+}
+
+static void
+_autosave_change_cb(void *data, Evas_Object *obj, void *event __UNUSED__)
+{
+   App_Data *ad = data;
+   Eina_Bool state = elm_check_state_get(obj);
+
+   elm_entry_autosave_set(ad->edit_buffer, state);
+   if (state) elm_entry_file_save(ad->edit_buffer);
+}
+
+static void
+_edit_dblclick_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   int current_cursor;
+
+   current_cursor = elm_entry_cursor_pos_get(obj);
+
+   while (elm_entry_cursor_prev(obj))
+     {
+        const char *content;
+        if (elm_entry_cursor_is_visible_format_get(obj))
+          break;
+        content = elm_entry_cursor_content_get(obj);
+        if (content && (content[0] == ' '))
+          break;
+     }
+
+   if (current_cursor == elm_entry_cursor_pos_get(obj))
+     return;
+
+   elm_entry_cursor_next(obj);
+   elm_entry_cursor_selection_begin(obj);
+   elm_entry_cursor_pos_set(obj, current_cursor);
+   while (elm_entry_cursor_next(obj))
+     {
+        const char *content;
+        if (elm_entry_cursor_is_visible_format_get(obj))
+          break;
+        content = elm_entry_cursor_content_get(obj);
+        if (content && (content[0] == ' '))
+          break;
+     }
+   elm_entry_cursor_selection_end(obj);
+}
+
+static void
+_edit_tplclick_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   elm_entry_cursor_line_begin_set(obj);
+   elm_entry_cursor_selection_begin(obj);
+   elm_entry_cursor_line_end_set(obj);
+   elm_entry_cursor_selection_end(obj);
+}
+
+static void
+_win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   evas_object_del(obj);
+   elm_exit();
+}
+
+int
+elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *tb, *en, *o, *icon;
+   App_Data app;
+
+   memset(&app, 0, sizeof(app));
+
+   win = elm_win_add(NULL, "entry-example", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Emacs Lite");
+   evas_object_show(win);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   tb = elm_box_add(win);
+   elm_box_horizontal_set(tb, EINA_TRUE);
+   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_weight_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, tb);
+   evas_object_show(tb);
+
+   o = elm_check_add(win);
+   elm_check_state_set(o, EINA_FALSE);
+   elm_object_text_set(o, "Autosave");
+   elm_box_pack_end(tb, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "changed", _autosave_change_cb, &app);
+
+   o = elm_button_add(win);
+   elm_object_text_set(o, "b");
+   elm_box_pack_end(tb, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
+
+   o = elm_button_add(win);
+   elm_object_text_set(o, "em");
+   elm_box_pack_end(tb, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _format_change_cb, &app);
+
+   o = elm_button_add(win);
+   elm_box_pack_end(tb, o);
+   evas_object_show(o);
+
+   icon = elm_layout_add(win);
+   elm_layout_theme_set(icon, "entry", "emoticon/haha", "default");
+   elm_object_content_set(o, icon);
+
+   evas_object_smart_callback_add(o, "clicked", _image_insert_cb, &app);
+
+   en = elm_entry_add(win);
+   elm_entry_autosave_set(en, EINA_FALSE);
+   elm_entry_file_set(en, "/tmp/da_test.txt", ELM_TEXT_FORMAT_MARKUP_UTF8);
+   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);
+   elm_box_pack_end(box, en);
+   evas_object_show(en);
+
+   app.win = win;
+   app.edit_buffer = en;
+
+   evas_object_smart_callback_add(en, "clicked,double", _edit_dblclick_cb,
+                                  NULL);
+   evas_object_smart_callback_add(en, "clicked,triple", _edit_tplclick_cb,
+                                  NULL);
+
+   evas_object_smart_callback_add(win, "delete,request", _win_del_cb, &app);
+
+   elm_object_focus(app.edit_buffer);
+
+   evas_object_resize(win, 300, 780);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN();
diff --git a/src/examples/fileselector_button_example.c b/src/examples/fileselector_button_example.c
new file mode 100644 (file)
index 0000000..f9be84a
--- /dev/null
@@ -0,0 +1,185 @@
+/**
+ * Simple Elementary's <b>file selector button widget</b> example,
+ * illustrating its usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` file selector_button_example.c -o file selector_button_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void /* hook on the sole smart callback */
+_file_chosen(void            *data,
+             Evas_Object *obj __UNUSED__,
+             void            *event_info)
+{
+   Evas_Object *entry = data;
+   const char *file = event_info;
+   if (file)
+     {
+        elm_entry_entry_set(entry, file);
+        printf("File chosen: %s\n", file);
+     }
+   else
+     printf("File selection canceled.\n");
+}
+
+/* toggle inwin mode */
+static void
+_inwin_mode_toggle(void            *data,
+                   Evas_Object *obj __UNUSED__,
+                   void *event_info __UNUSED__)
+{
+   Evas_Object *fs_bt = data;
+   Eina_Bool old_val = elm_fileselector_button_inwin_mode_get(fs_bt);
+
+   elm_fileselector_button_inwin_mode_set(fs_bt, !old_val);
+   printf("Inwin mode set to: %s\n", old_val ? "false" : "true");
+}
+
+static void
+_current_sel_toggle(void            *data,
+                    Evas_Object *obj __UNUSED__,
+                    void *event_info __UNUSED__)
+{
+   Evas_Object *fs_bt = data;
+   Eina_Bool old_val = elm_fileselector_button_is_save_get(fs_bt);
+   elm_fileselector_button_is_save_set(fs_bt, !old_val);
+
+   printf("%s text entry with selected item's name\n",
+          old_val ? "Disabling" : "Enabling");
+}
+
+static void
+_folder_only_toggle(void            *data,
+                    Evas_Object *obj __UNUSED__,
+                    void *event_info __UNUSED__)
+{
+   Evas_Object *fs_bt = data;
+   Eina_Bool old_val = elm_fileselector_button_folder_only_get(fs_bt);
+   elm_fileselector_button_folder_only_set(fs_bt, !old_val);
+
+   printf("Folder only mode set to: %s\n", old_val ? "false" : "true");
+}
+
+static void
+_expandable_toggle(void            *data,
+                   Evas_Object *obj __UNUSED__,
+                   void *event_info __UNUSED__)
+{
+   Evas_Object *fs_bt = data;
+   Eina_Bool old_val = elm_fileselector_button_expandable_get(fs_bt);
+   elm_fileselector_button_expandable_set(fs_bt, !old_val);
+
+   printf("Expandable folders mode set to: %s\n", old_val ? "false" : "true");
+}
+
+EAPI_MAIN int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *vbox, *hbox, *ic, *ck, *fs_bt, *en, *lb, *sep;
+
+   win = elm_win_add(NULL, "fileselector-button", ELM_WIN_BASIC);
+   elm_win_title_set(win, "File Selector Button Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   vbox = elm_box_add(win);
+   elm_win_resize_object_add(win, vbox);
+   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(vbox);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "file");
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+   /* file selector button */
+   fs_bt = elm_fileselector_button_add(win);
+   elm_fileselector_button_path_set(fs_bt, "/tmp");
+   elm_object_text_set(fs_bt, "Select a file");
+   elm_fileselector_button_icon_set(fs_bt, ic);
+
+   elm_box_pack_end(vbox, fs_bt);
+   evas_object_show(fs_bt);
+   evas_object_show(ic);
+
+   /* attribute setting knobs */
+   sep = elm_separator_add(win);
+   elm_separator_horizontal_set(sep, EINA_TRUE);
+   elm_box_pack_end(vbox, sep);
+   evas_object_show(sep);
+
+   hbox = elm_box_add(win);
+   elm_box_horizontal_set(hbox, EINA_TRUE);
+   elm_box_pack_end(vbox, hbox);
+   evas_object_show(hbox);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "editable selection");
+   elm_check_state_set(ck, elm_fileselector_button_is_save_get(fs_bt));
+   evas_object_smart_callback_add(ck, "changed", _current_sel_toggle, fs_bt);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "\"inwin\" mode");
+   elm_check_state_set(ck, elm_fileselector_button_inwin_mode_get(fs_bt));
+   evas_object_smart_callback_add(ck, "changed", _inwin_mode_toggle, fs_bt);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "folders only");
+   elm_check_state_set(ck, elm_fileselector_button_folder_only_get(fs_bt));
+   evas_object_smart_callback_add(ck, "changed", _folder_only_toggle, fs_bt);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "expandable");
+   elm_check_state_set(ck, elm_fileselector_button_expandable_get(fs_bt));
+   evas_object_smart_callback_add(ck, "changed", _expandable_toggle, fs_bt);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   lb = elm_label_add(win);
+   elm_object_text_set(lb, "Last selection:");
+   elm_box_pack_end(vbox, lb);
+   evas_object_show(lb);
+
+   en = elm_entry_add(win);
+   elm_entry_line_wrap_set(en, EINA_FALSE);
+   elm_entry_editable_set(en, EINA_FALSE);
+   evas_object_smart_callback_add(fs_bt, "file,chosen", _file_chosen, en);
+   elm_box_pack_end(vbox, en);
+   evas_object_show(en);
+
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/fileselector_entry_example.c b/src/examples/fileselector_entry_example.c
new file mode 100644 (file)
index 0000000..2007f5d
--- /dev/null
@@ -0,0 +1,174 @@
+/**
+ * Simple Elementary's <b>file selector entry widget</b> example,
+ * illustrating its usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` file selector_entry_example.c -o file selector_entry_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* hook on the file,chosen smart callback */
+static void
+_file_chosen(void        *data __UNUSED__,
+             Evas_Object *obj __UNUSED__,
+             void        *event_info)
+{
+   const char *file = event_info;
+
+   if (file)
+     printf("File chosen: %s\n", file);
+   else
+     printf("File selection canceled.\n");
+}
+
+/* toggle inwin mode */
+static void
+_inwin_mode_toggle(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Evas_Object *fs_entry = data;
+   Eina_Bool old_val = elm_fileselector_entry_inwin_mode_get(fs_entry);
+
+   elm_fileselector_entry_inwin_mode_set(fs_entry, !old_val);
+   printf("Inwin mode set to: %s\n", old_val ? "false" : "true");
+}
+
+static void
+_current_sel_toggle(void        *data,
+                    Evas_Object *obj __UNUSED__,
+                    void        *event_info __UNUSED__)
+{
+   Evas_Object *fs_entry = data;
+   Eina_Bool old_val = elm_fileselector_entry_is_save_get(fs_entry);
+   elm_fileselector_entry_is_save_set(fs_entry, !old_val);
+
+   printf("%s text entry with selected item's name\n",
+          old_val ? "Disabling" : "Enabling");
+}
+
+static void
+_folder_only_toggle(void        *data,
+                    Evas_Object *obj __UNUSED__,
+                    void        *event_info __UNUSED__)
+{
+   Evas_Object *fs_entry = data;
+   Eina_Bool old_val = elm_fileselector_entry_folder_only_get(fs_entry);
+   elm_fileselector_entry_folder_only_set(fs_entry, !old_val);
+
+   printf("Folder only mode set to: %s\n", old_val ? "false" : "true");
+}
+
+static void
+_expandable_toggle(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Evas_Object *fs_entry = data;
+   Eina_Bool old_val = elm_fileselector_entry_expandable_get(fs_entry);
+   elm_fileselector_entry_expandable_set(fs_entry, !old_val);
+
+   printf("Expandable folders mode set to: %s\n", old_val ? "false" : "true");
+}
+
+EAPI_MAIN int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *vbox, *hbox, *ic, *ck, *fs_entry, *sep;
+
+   win = elm_win_add(NULL, "fileselector-entry", ELM_WIN_BASIC);
+   elm_win_title_set(win, "File Selector Entry Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   vbox = elm_box_add(win);
+   elm_win_resize_object_add(win, vbox);
+   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(vbox);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "file");
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+   /* file selector entry */
+   fs_entry = elm_fileselector_entry_add(win);
+   evas_object_size_hint_align_set(fs_entry, EVAS_HINT_FILL, 0);
+   elm_fileselector_entry_path_set(fs_entry, "/tmp");
+   elm_object_text_set(fs_entry, "Select a file");
+   elm_fileselector_entry_button_icon_set(fs_entry, ic);
+
+   elm_box_pack_end(vbox, fs_entry);
+   evas_object_show(fs_entry);
+   evas_object_show(ic);
+
+   /* attribute setting knobs */
+   sep = elm_separator_add(win);
+   elm_separator_horizontal_set(sep, EINA_TRUE);
+   elm_box_pack_end(vbox, sep);
+   evas_object_show(sep);
+
+   hbox = elm_box_add(win);
+   elm_box_horizontal_set(hbox, EINA_TRUE);
+   elm_box_pack_end(vbox, hbox);
+   evas_object_show(hbox);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "editable selection");
+   elm_check_state_set(ck, elm_fileselector_entry_is_save_get(fs_entry));
+   evas_object_smart_callback_add(ck, "changed", _current_sel_toggle, fs_entry);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "\"inwin\" mode");
+   elm_check_state_set(ck, elm_fileselector_entry_inwin_mode_get(fs_entry));
+   evas_object_smart_callback_add(ck, "changed", _inwin_mode_toggle, fs_entry);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "folders only");
+   elm_check_state_set(ck, elm_fileselector_entry_folder_only_get(fs_entry));
+   evas_object_smart_callback_add(ck, "changed", _folder_only_toggle, fs_entry);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "expandable");
+   elm_check_state_set(ck, elm_fileselector_entry_expandable_get(fs_entry));
+   evas_object_smart_callback_add(ck, "changed", _expandable_toggle, fs_entry);
+   elm_box_pack_end(hbox, ck);
+   evas_object_show(ck);
+
+   evas_object_smart_callback_add(fs_entry, "file,chosen", _file_chosen, NULL);
+
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/fileselector_example.c b/src/examples/fileselector_example.c
new file mode 100644 (file)
index 0000000..b56985d
--- /dev/null
@@ -0,0 +1,244 @@
+/**
+ * Simple Elementary's <b>file selector widget</b> example,
+ * illustrating its usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` file selector_example.c -o file selector_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* 'done' cb */
+static void
+_fs_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info)
+{
+   const char *selected = event_info;
+   /* event_info contains the full path of the selected file or NULL
+    * if none is selected (or cancel is pressed) */
+
+   printf("We're done! Selected file is: %s\n",
+          selected ? selected : "*none!*");
+
+   _on_done(NULL, NULL, NULL);
+}
+
+/* 'selected' cb */
+static void
+_fs_selected(void        *data __UNUSED__,
+             Evas_Object *obj __UNUSED__,
+             void        *event_info)
+{
+   const char *selected = event_info;
+   /* event_info contains the full path of the selected file */
+
+   printf("There's been a selection: %s\n", selected);
+}
+
+static void
+_is_save_clicked(void        *data,
+                 Evas_Object *obj __UNUSED__,
+                 void        *event_info __UNUSED__)
+{
+   Evas_Object *fs = data;
+   Eina_Bool old_val = elm_fileselector_is_save_get(fs);
+
+   printf("%s text entry with selected item's name\n",
+          old_val ? "Disabling" : "Enabling");
+
+   elm_fileselector_is_save_set(fs, !old_val);
+}
+
+static void
+_folder_only_clicked(void        *data,
+                     Evas_Object *obj __UNUSED__,
+                     void        *event_info __UNUSED__)
+{
+   Evas_Object *fs = data;
+   Eina_Bool old_val = elm_fileselector_folder_only_get(fs);
+
+   printf("%s folder-only mode\n",
+          old_val ? "Disabling" : "Enabling");
+
+   elm_fileselector_folder_only_set(fs, !old_val);
+}
+
+static void
+_expandable_clicked(void        *data,
+                    Evas_Object *obj __UNUSED__,
+                    void        *event_info __UNUSED__)
+{
+   Evas_Object *fs = data;
+   Eina_Bool old_val = elm_fileselector_expandable_get(fs);
+
+   printf("%s tree-view mode\n",
+          old_val ? "Disabling" : "Enabling");
+
+   elm_fileselector_expandable_set(fs, !old_val);
+}
+
+static void
+_sel_get_clicked(void        *data,
+                 Evas_Object *obj __UNUSED__,
+                 void        *event_info __UNUSED__)
+{
+   Evas_Object *fs = data;
+   printf("Current selection is: %s\n", elm_fileselector_selected_get(fs));
+}
+
+static void
+_path_get_clicked(void        *data,
+                  Evas_Object *obj __UNUSED__,
+                  void        *event_info __UNUSED__)
+{
+   Evas_Object *fs = data;
+   printf("Current selection's directory path is: %s\n",
+          elm_fileselector_path_get(fs));
+}
+
+EAPI_MAIN int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+    Evas_Object *win, *fs, *bg, *vbox, *buttons_bx, *bt, *sep, *bx;
+
+   /* Set the locale according to the system pref. If you dont do so
+    * the file selector will order the files list in a case sensitive
+    * manner
+    */
+   setlocale(LC_ALL, "");
+
+   elm_need_ethumb(); /* let's have thumbnails of images on grid view */
+
+   win = elm_win_add(NULL, "fileselector", ELM_WIN_BASIC);
+   elm_win_title_set(win, "File Selector Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   /* evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL); */
+   evas_object_show(bx);
+
+   vbox = elm_box_add(win);
+   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(vbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(vbox);
+   elm_box_pack_end(bx, vbox);
+
+   /* first file selector, in list mode */
+   fs = elm_fileselector_add(win);
+   /* enable the fs file name entry */
+   elm_fileselector_is_save_set(fs, EINA_TRUE);
+   /* custom list view */
+   elm_fileselector_expandable_set(fs, EINA_FALSE);
+   /* start the fileselector in the /tmp/ dir */
+   elm_fileselector_path_set(fs, "/tmp");
+
+   evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(vbox, fs);
+   evas_object_show(fs);
+
+   /* the 'done' cb is called when the user presses ok/cancel */
+   evas_object_smart_callback_add(fs, "done", _fs_done, win);
+   /* the 'selected' cb is called when the user clicks on a file/dir */
+   evas_object_smart_callback_add(fs, "selected", _fs_selected, win);
+
+   /* test buttons */
+   sep = elm_separator_add(win);
+   elm_separator_horizontal_set(sep, EINA_TRUE);
+   elm_box_pack_end(vbox, sep);
+   evas_object_show(sep);
+
+   buttons_bx = elm_box_add(win);
+   elm_box_horizontal_set(buttons_bx, EINA_TRUE);
+   elm_box_pack_end(vbox, buttons_bx);
+   evas_object_show(buttons_bx);
+
+   bt = elm_check_add(win);
+   elm_object_text_set(bt, "editable selection");
+   elm_check_state_set(bt, elm_fileselector_is_save_get(fs));
+   evas_object_smart_callback_add(bt, "changed", _is_save_clicked, fs);
+   elm_box_pack_end(buttons_bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_check_add(win);
+   elm_object_text_set(bt, "folders only");
+   elm_check_state_set(bt, elm_fileselector_folder_only_get(fs));
+   evas_object_smart_callback_add(bt, "changed", _folder_only_clicked, fs);
+   elm_box_pack_end(buttons_bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_check_add(win);
+   elm_object_text_set(bt, "expandable");
+   elm_check_state_set(bt, elm_fileselector_expandable_get(fs));
+   evas_object_smart_callback_add(bt, "changed", _expandable_clicked, fs);
+   elm_box_pack_end(buttons_bx, bt);
+   evas_object_show(bt);
+
+   buttons_bx = elm_box_add(win);
+   elm_box_horizontal_set(buttons_bx, EINA_TRUE);
+   elm_box_pack_end(vbox, buttons_bx);
+   evas_object_show(buttons_bx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Print selection");
+   evas_object_smart_callback_add(bt, "clicked", _sel_get_clicked, fs);
+   elm_box_pack_end(buttons_bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Print path");
+   evas_object_smart_callback_add(bt, "clicked", _path_get_clicked, fs);
+   elm_box_pack_end(buttons_bx, bt);
+   evas_object_show(bt);
+
+   sep = elm_separator_add(win);
+   elm_separator_horizontal_set(sep, EINA_FALSE);
+   elm_box_pack_end(bx, sep);
+   evas_object_show(sep);
+
+   /* second file selector, now with grid view */
+   fs = elm_fileselector_add(win);
+   elm_fileselector_is_save_set(fs, EINA_TRUE);
+   elm_fileselector_mode_set(fs, ELM_FILESELECTOR_GRID);
+   elm_fileselector_buttons_ok_cancel_set(fs, EINA_FALSE);
+   elm_fileselector_path_set(fs, "/tmp");
+
+   evas_object_size_hint_weight_set(fs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(fs, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, fs);
+   evas_object_show(fs);
+
+   evas_object_resize(win, 800, 600);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/flip_example_01.c b/src/examples/flip_example_01.c
new file mode 100644 (file)
index 0000000..76cd3e7
--- /dev/null
@@ -0,0 +1,92 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` flip_example_01.c -o flip_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _change_interaction(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *rect, *rect2, *flip, *radio, *radio2, *radio3;
+
+   win = elm_win_add(NULL, "flip", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Flip");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_resize(rect, 150, 150);
+   evas_object_color_set(rect, 0, 0, 255, 255);
+   evas_object_show(rect);
+
+   rect2 = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect2, 0, 255, 0, 255);
+   evas_object_show(rect2);
+
+   flip = elm_flip_add(win);
+   elm_flip_content_front_set(flip, rect);
+   elm_flip_content_back_set(flip, rect2);
+   evas_object_resize(flip, 150, 150);
+   evas_object_move(flip, 10, 10);
+   evas_object_show(flip);
+
+   elm_flip_interaction_set(flip, ELM_FLIP_INTERACTION_PAGE);
+   elm_flip_interacton_direction_enabled_set(flip, ELM_FLIP_DIRECTION_UP, EINA_TRUE);
+   elm_flip_interacton_direction_enabled_set(flip, ELM_FLIP_DIRECTION_DOWN, EINA_TRUE);
+   elm_flip_interacton_direction_enabled_set(flip, ELM_FLIP_DIRECTION_LEFT, EINA_TRUE);
+   elm_flip_interacton_direction_enabled_set(flip, ELM_FLIP_DIRECTION_RIGHT, EINA_TRUE);
+   elm_flip_interacton_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_UP, 1);
+   elm_flip_interacton_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_DOWN, 1);
+   elm_flip_interacton_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_LEFT, 1);
+   elm_flip_interacton_direction_hitsize_set(flip, ELM_FLIP_DIRECTION_RIGHT, 1);
+
+   radio = elm_radio_add(win);
+   elm_object_text_set(radio, "page");
+   elm_radio_value_set(radio, ELM_FLIP_INTERACTION_PAGE);
+   elm_radio_state_value_set(radio, ELM_FLIP_INTERACTION_PAGE);
+   evas_object_resize(radio, 55, 30);
+   evas_object_move(radio, 10, 160);
+   evas_object_show(radio);
+   evas_object_smart_callback_add(radio, "changed", _change_interaction, flip);
+
+   radio2 = elm_radio_add(win);
+   elm_object_text_set(radio2, "cube");
+   elm_radio_state_value_set(radio2, ELM_FLIP_INTERACTION_CUBE);
+   elm_radio_group_add(radio2, radio);
+   evas_object_resize(radio2, 55, 30);
+   evas_object_move(radio2, 75, 160);
+   evas_object_show(radio2);
+   evas_object_smart_callback_add(radio2, "changed", _change_interaction, flip);
+
+   radio3 = elm_radio_add(win);
+   elm_object_text_set(radio3, "rotate");
+   elm_radio_state_value_set(radio3, ELM_FLIP_INTERACTION_ROTATE);
+   elm_radio_group_add(radio3, radio);
+   evas_object_resize(radio3, 55, 30);
+   evas_object_move(radio3, 140, 160);
+   evas_object_show(radio3);
+   evas_object_smart_callback_add(radio3, "changed", _change_interaction, flip);
+
+   evas_object_resize(win, 200, 200);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_change_interaction(void *data, Evas_Object *obj, void *event_info)
+{
+   elm_flip_interaction_set(data, elm_radio_state_value_get(obj));
+   elm_flip_go(data, ELM_FLIP_ROTATE_XZ_CENTER_AXIS);
+}
index 9e7d63b..cdea766 100644 (file)
@@ -146,7 +146,7 @@ _on_keydown(void              *data,
      }
 }
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 {
    unsigned int i;
index 16de9d1..d3e4b35 100644 (file)
@@ -6,12 +6,11 @@
 # include "elementary_config.h"
 #endif
 
-EAPI int
+EAPI_MAIN int
 elm_main(int argc, char **argv)
 {
    Evas_Object *win, *bg;
    Evas_Object *f1, *r1, *f2, *r2, *f3, *r3, *f4, *r4;
-   Elm_Animator *animator;
    char buf[256];
 
    win = elm_win_add(NULL, "frame", ELM_WIN_BASIC);
@@ -28,7 +27,7 @@ elm_main(int argc, char **argv)
    evas_object_show(r1);
 
    f1= elm_frame_add(win);
-   elm_frame_content_set(f1, r1);
+   elm_object_content_set(f1, r1);
    elm_object_text_set(f1, "Default frame");
    evas_object_resize(f1, 100, 100);
    evas_object_move(f1, 25, 25);
@@ -39,7 +38,7 @@ elm_main(int argc, char **argv)
    evas_object_show(r2);
 
    f2 = elm_frame_add(win);
-   elm_frame_content_set(f2, r2);
+   elm_object_content_set(f2, r2);
    elm_object_text_set(f2, "Padding frame");
    evas_object_resize(f2, 100, 100);
    evas_object_move(f2, 150, 25);
@@ -51,7 +50,7 @@ elm_main(int argc, char **argv)
    evas_object_show(r3);
 
    f3 = elm_frame_add(win);
-   elm_frame_content_set(f3, r3);
+   elm_object_content_set(f3, r3);
    elm_object_text_set(f3, "Top outdent frame");
    evas_object_resize(f3, 100, 100);
    evas_object_move(f3, 25, 150);
@@ -63,7 +62,7 @@ elm_main(int argc, char **argv)
    evas_object_show(r4);
 
    f4 = elm_frame_add(win);
-   elm_frame_content_set(f4, r4);
+   elm_object_content_set(f4, r4);
    elm_object_text_set(f4, "Bottom outdent frame");
    evas_object_resize(f4, 100, 100);
    evas_object_move(f4, 150, 150);
index b7e509f..c4c89e4 100644 (file)
@@ -110,14 +110,14 @@ elm_main(int    argc __UNUSED__,
    evas_object_show(box);
 
    frame = elm_frame_add(win);
-   elm_frame_label_set(frame, "Button");
+   elm_object_text_set(frame, "Button");
    evas_object_size_hint_align_set(frame, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_show(frame);
    elm_box_pack_end(box, frame);
 
    d.btn = elm_button_add(win);
-   elm_button_label_set(d.btn, "Click me");
-   elm_frame_content_set(frame, d.btn);
+   elm_object_text_set(d.btn, "Click me");
+   elm_object_content_set(frame, d.btn);
 
    fprintf(stdout, "Elementary's finger size is set to %d pixels\n.",
            elm_finger_size_get());
@@ -137,7 +137,7 @@ elm_main(int    argc __UNUSED__,
    check = elm_check_add(win);
    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_check_label_set(check, "Button enabled");
+   elm_object_text_set(check, "Button enabled");
    elm_check_state_pointer_set(check, &d.btn_enabled);
    evas_object_smart_callback_add(check, "changed", _btn_enabled_cb, NULL);
    elm_box_pack_end(box, check);
@@ -146,7 +146,7 @@ elm_main(int    argc __UNUSED__,
    b = elm_button_add(win);
    evas_object_size_hint_weight_set(b, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(b, 0.0, 0.0);
-   elm_button_label_set(b, "Focus top button");
+   elm_object_text_set(b, "Focus top button");
    evas_object_smart_callback_add(b, "clicked", _btn_focus_cb, NULL);
    elm_box_pack_end(box, b);
    evas_object_show(b);
@@ -154,7 +154,7 @@ elm_main(int    argc __UNUSED__,
    b = elm_button_add(win);
    evas_object_size_hint_weight_set(b, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(b, 0.0, 0.0);
-   elm_button_label_set(b, "Unfocus top button");
+   elm_object_text_set(b, "Unfocus top button");
    evas_object_smart_callback_add(b, "clicked", _btn_unfocus_cb, NULL);
    elm_box_pack_end(box, b);
    evas_object_show(b);
@@ -162,7 +162,7 @@ elm_main(int    argc __UNUSED__,
    check = elm_check_add(win);
    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_check_label_set(check, "Button gets focus");
+   elm_object_text_set(check, "Button gets focus");
    elm_check_state_pointer_set(check, &d.btn_gets_focus);
    evas_object_smart_callback_add(check, "changed", _btn_focus_allow_cb, NULL);
    elm_box_pack_end(box, check);
diff --git a/src/examples/gengrid_example.c b/src/examples/gengrid_example.c
new file mode 100644 (file)
index 0000000..aca7182
--- /dev/null
@@ -0,0 +1,624 @@
+/**
+ * Simple Elementary's <b>gengrid widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` gengrid_example.c -o gengrid_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "../../data"
+#endif
+
+typedef struct _Example_Item
+{
+   const char *path;
+} Example_Item;
+
+static const char *imgs[9] =
+{
+   "panel_01.jpg",
+   "plant_01.jpg",
+   "rock_01.jpg",
+   "rock_02.jpg",
+   "sky_01.jpg",
+   "sky_02.jpg",
+   "sky_03.jpg",
+   "sky_04.jpg",
+   "wood_01.jpg",
+};
+
+static Elm_Gengrid_Item_Class gic;
+Evas_Object *before_bt, *after_bt;
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* change layouting mode */
+static void
+_horizontal_grid(void        *data,
+                 Evas_Object *obj,
+                 void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+
+   elm_gengrid_horizontal_set(grid, elm_check_state_get(obj));
+}
+
+/* "always select" callback */
+static void
+_always_select_change(void        *data,
+                      Evas_Object *obj,
+                      void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   Eina_Bool always = elm_check_state_get(obj);
+
+   elm_gengrid_always_select_mode_set(grid, always);
+
+   fprintf(stdout, "\"Always select\" mode for gengrid items is now %s\n",
+           always ? "on" : "off");
+}
+
+/* "bouncing mode" callback */
+static void
+_bouncing_change(void        *data,
+                 Evas_Object *obj,
+                 void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   Eina_Bool bounce = elm_check_state_get(obj);
+
+   elm_gengrid_bounce_set(grid, bounce, bounce);
+
+   fprintf(stdout, "Bouncing effect for gengrid is now %s\n",
+           bounce ? "on" : "off");
+}
+
+/* multi-selection callback */
+static void
+_multi_change(void        *data,
+              Evas_Object *obj,
+              void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   Eina_Bool multi = elm_check_state_get(obj);
+
+   elm_gengrid_multi_select_set(grid, multi);
+
+   fprintf(stdout, "Multi-selection for gengrid is now %s\n",
+           multi ? "on" : "off");
+
+   elm_object_disabled_set(before_bt, multi);
+   elm_object_disabled_set(after_bt, multi);
+
+   if (!multi)
+     {
+        Elm_Gengrid_Item *it;
+        const Eina_List *selected = elm_gengrid_selected_items_get(grid), *l;
+        EINA_LIST_FOREACH(selected, l, it)
+          elm_gengrid_item_selected_set(it, EINA_FALSE);
+     }
+}
+
+/* no selection callback */
+static void
+_no_sel_change(void        *data,
+               Evas_Object *obj,
+               void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   Eina_Bool no_sel = elm_check_state_get(obj);
+
+   elm_gengrid_no_select_mode_set(grid, no_sel);
+
+   fprintf(stdout, "Selection for gengrid items is now %s\n",
+           no_sel ? "disabled" : "enabled");
+}
+
+/* item selection callback */
+static void
+_grid_sel(void        *data,
+          Evas_Object *obj __UNUSED__,
+          void        *event_info)
+{
+   unsigned int x, y;
+   Example_Item *it = elm_gengrid_item_data_get(event_info);
+
+   elm_gengrid_item_pos_get(event_info, &x, &y);
+
+   fprintf(stdout, "Item [%p], with data [%p], path %s, at position (%d, %d),"
+                   " has been selected\n", event_info, data, it->path, x, y);
+}
+
+/* new item with random path */
+static Example_Item *
+_item_new(void)
+{
+   Example_Item *it;
+
+   it = malloc(sizeof(*it));
+   it->path = eina_stringshare_add(imgs[rand() % (sizeof(imgs) /
+                                                  sizeof(imgs[0]))]);
+   return it;
+}
+
+/* "insert before" callback */
+static void
+_before_bt_clicked(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Example_Item *it;
+   Evas_Object *grid = data;
+   Elm_Gengrid_Item *sel;
+
+   sel = elm_gengrid_selected_item_get(grid);
+   if (!sel)
+     return;
+
+   it = _item_new();
+   elm_gengrid_item_insert_before(grid, &gic, it, sel, _grid_sel, NULL);
+}
+
+/* "insert after" callback */
+static void
+_after_bt_clicked(void        *data,
+                  Evas_Object *obj __UNUSED__,
+                  void        *event_info __UNUSED__)
+{
+   Example_Item *it;
+   Evas_Object *grid = data;
+   Elm_Gengrid_Item *sel;
+
+   sel = elm_gengrid_selected_item_get(grid);
+   if (!sel)
+     return;
+
+   it = _item_new();
+   elm_gengrid_item_insert_after(grid, &gic, it, sel, _grid_sel, NULL);
+}
+
+/* prepend an item */
+static void
+_prepend_bt_clicked(void        *data,
+                    Evas_Object *obj __UNUSED__,
+                    void        *event_info __UNUSED__)
+{
+   Example_Item *it;
+   Evas_Object *grid = data;
+
+   it = _item_new();
+   elm_gengrid_item_prepend(grid, &gic, it, _grid_sel, NULL);
+}
+
+/* append an item */
+static void
+_append_bt_clicked(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   Example_Item *it = _item_new();
+
+   elm_gengrid_item_append(grid, &gic, it, _grid_sel, NULL);
+}
+
+/* delete items */
+static void
+_clear_cb(void        *data,
+          Evas_Object *obj __UNUSED__,
+          void        *event_info __UNUSED__)
+{
+   elm_gengrid_clear(data);
+
+   fprintf(stdout, "Clearing the grid!\n");
+}
+
+/* bring in 1st item */
+static void
+_bring_1st_clicked(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Elm_Gengrid_Item *it = elm_gengrid_first_item_get(data);
+
+   if (!it) return;
+
+   elm_gengrid_item_bring_in(it);
+}
+
+/* show last item */
+static void
+_show_last_clicked(void        *data,
+                   Evas_Object *obj __UNUSED__,
+                   void        *event_info __UNUSED__)
+{
+   Elm_Gengrid_Item *it = elm_gengrid_last_item_get(data);
+
+   if (!it) return;
+
+   elm_gengrid_item_show(it);
+}
+
+/* disable selected item */
+static void
+_toggle_disabled_cb(void        *data,
+                    Evas_Object *obj __UNUSED__,
+                    void        *event_info __UNUSED__)
+{
+   Elm_Gengrid_Item *it = elm_gengrid_selected_item_get(data);
+
+   if (!it) return;
+
+   elm_gengrid_item_selected_set(it, EINA_FALSE);
+   elm_gengrid_item_disabled_set(it, EINA_TRUE);
+}
+
+/* change items' size */
+static void
+_size_changed(void        *data,
+              Evas_Object *obj,
+              void        *event_info __UNUSED__)
+{
+   Evas_Object *grid = data;
+   int size = elm_spinner_value_get(obj);
+
+   elm_gengrid_item_size_set(grid, size, size);
+}
+
+/* item double click callback */
+static void
+_double_click(void        *data __UNUSED__,
+              Evas_Object *obj __UNUSED__,
+              void        *event_info)
+{
+   fprintf(stdout, "Double click on item with handle %p\n", event_info);
+}
+
+/* item long press callback */
+static void
+_long_pressed(void        *data __UNUSED__,
+              Evas_Object *obj __UNUSED__,
+              void        *event_info)
+{
+   fprintf(stdout, "Long press on item with handle %p\n", event_info);
+}
+
+
+/* label fetching callback */
+static char *
+_grid_label_get(void        *data,
+                Evas_Object *obj __UNUSED__,
+                const char  *part __UNUSED__)
+{
+   const Example_Item *it = data;
+   char buf[256];
+
+   snprintf(buf, sizeof(buf), "Photo %s", it->path);
+   return strdup(buf);
+}
+
+/* icon fetching callback */
+static Evas_Object *
+_grid_content_get(void        *data,
+               Evas_Object *obj,
+               const char  *part)
+{
+   const Example_Item *it = data;
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     {
+        Evas_Object *icon = elm_bg_add(obj);
+        char buf[PATH_MAX];
+
+        snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR,
+                 it->path);
+
+        elm_bg_file_set(icon, buf, NULL);
+        evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1,
+                                         1);
+        evas_object_show(icon);
+        return icon;
+     }
+   else if (!strcmp(part, "elm.swallow.end"))
+     {
+        Evas_Object *ck;
+        ck = elm_check_add(obj);
+        evas_object_propagate_events_set(ck, EINA_FALSE);
+        evas_object_show(ck);
+        return ck;
+     }
+
+   return NULL;
+}
+
+/* state fetching callback */
+static Eina_Bool
+_grid_state_get(void        *data __UNUSED__,
+                Evas_Object *obj __UNUSED__,
+                const char  *part __UNUSED__)
+{
+   return EINA_FALSE;
+}
+
+/* deletion callback */
+static void
+_grid_del(void        *data,
+          Evas_Object *obj __UNUSED__)
+{
+   Example_Item *it = data;
+
+   eina_stringshare_del(it->path);
+   free(it);
+}
+
+/* scrolling animation stopped callback */
+static void
+_grid_scroll_stopped_cb(void        *data __UNUSED__,
+                        Evas_Object *obj,
+                        void        *event_info __UNUSED__)
+{
+  int h_pagenumber = 0, v_pagenumber = 0;
+  elm_gengrid_current_page_get(obj, &h_pagenumber, &v_pagenumber);
+  fprintf(stdout, "Grid current horiz page is %d, vert page is %d\n",
+          h_pagenumber, v_pagenumber);
+}
+
+/* items grid horizontal alignment change */
+static void
+_h_align_change_cb(void        *data,
+                   Evas_Object *obj,
+                   void        *event_info __UNUSED__)
+{
+   double v_align;
+   double val = elm_slider_value_get(obj);
+
+   elm_gengrid_align_get(data, NULL, &v_align);
+
+   fprintf(stdout, "Setting horizontal alignment to %f\n", val);
+   elm_gengrid_align_set(data, val, v_align);
+}
+
+static void
+_v_align_change_cb(void        *data,
+                   Evas_Object *obj,
+                   void        *event_info __UNUSED__)
+{
+   double h_align;
+   double val = elm_slider_value_get(obj);
+
+   elm_gengrid_align_get(data, &h_align, NULL);
+
+   fprintf(stdout, "Setting vertical alignment to %f\n", val);
+   elm_gengrid_align_set(data, h_align, val);
+}
+
+/* page relative size change */
+static void
+_page_change_cb(void        *data,
+                Evas_Object *obj,
+                void        *event_info __UNUSED__)
+{
+   double val = elm_slider_value_get(obj);
+
+   elm_gengrid_page_relative_set(data, val, val);
+
+   fprintf(stdout, "Setting grid page's relative size to %f\n", val);
+}
+
+int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *grid, *bx, *hbx_1, *hbx_2, *hbx_3, *bt, *ck, *sl,
+   *sp;
+   Eina_Bool bounce;
+   double h, v;
+
+   srand(time(NULL));
+
+   win = elm_win_add(NULL, "gengrid", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Generic Grid Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   grid = elm_gengrid_add(win);
+   elm_gengrid_item_size_set(grid, 150, 150);
+   evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_min_set(grid, 600, 500);
+   elm_box_pack_end(bx, grid);
+   evas_object_smart_callback_add(grid, "clicked,double", _double_click, NULL);
+   evas_object_smart_callback_add(grid, "longpressed", _long_pressed, NULL);
+   evas_object_show(grid);
+
+   hbx_1 = elm_box_add(win);
+   evas_object_size_hint_weight_set(hbx_1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_horizontal_set(hbx_1, EINA_TRUE);
+   elm_box_pack_end(bx, hbx_1);
+   evas_object_show(hbx_1);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append");
+   evas_object_smart_callback_add(bt, "clicked", _append_bt_clicked, grid);
+   elm_box_pack_end(hbx_1, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Prepend");
+   evas_object_smart_callback_add(bt, "clicked", _prepend_bt_clicked, grid);
+   elm_box_pack_end(hbx_1, bt);
+   evas_object_show(bt);
+
+   before_bt = elm_button_add(win);
+   elm_object_text_set(before_bt, "Insert before");
+   evas_object_smart_callback_add(before_bt, "clicked", _before_bt_clicked,
+                                  grid);
+   elm_box_pack_end(hbx_1, before_bt);
+   evas_object_show(before_bt);
+
+   after_bt = elm_button_add(win);
+   elm_object_text_set(after_bt, "Insert after");
+   evas_object_smart_callback_add(after_bt, "clicked", _after_bt_clicked, grid);
+   elm_box_pack_end(hbx_1, after_bt);
+   evas_object_show(after_bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Clear");
+   evas_object_smart_callback_add(bt, "clicked", _clear_cb, grid);
+   elm_box_pack_end(hbx_1, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Bring in 1st");
+   evas_object_smart_callback_add(bt, "clicked", _bring_1st_clicked, grid);
+   elm_box_pack_end(hbx_1, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Show last");
+   evas_object_smart_callback_add(bt, "clicked", _show_last_clicked, grid);
+   elm_box_pack_end(hbx_1, bt);
+   evas_object_show(bt);
+
+   sp = elm_spinner_add(win);
+   elm_spinner_min_max_set(sp, 10, 1024);
+   elm_spinner_value_set(sp, 150);
+   elm_spinner_label_format_set(sp, "Item size: %.0f");
+   evas_object_smart_callback_add(sp, "changed", _size_changed, grid);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(hbx_1, sp);
+   evas_object_show(sp);
+
+   hbx_2 = elm_box_add(win);
+   evas_object_size_hint_weight_set(hbx_2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_horizontal_set(hbx_2, EINA_TRUE);
+   elm_box_pack_end(bx, hbx_2);
+   evas_object_show(hbx_2);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Disable item");
+   evas_object_smart_callback_add(bt, "clicked", _toggle_disabled_cb, grid);
+   elm_box_pack_end(hbx_2, bt);
+   evas_object_show(bt);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "Horizontal mode");
+   evas_object_smart_callback_add(ck, "changed", _horizontal_grid, grid);
+   elm_box_pack_end(hbx_2, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "Always select");
+   evas_object_smart_callback_add(ck, "changed", _always_select_change, grid);
+   elm_box_pack_end(hbx_2, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_gengrid_bounce_get(grid, &bounce, NULL);
+   elm_object_text_set(ck, "Bouncing");
+   elm_check_state_set(ck, bounce);
+   evas_object_smart_callback_add(ck, "changed", _bouncing_change, grid);
+   elm_box_pack_end(hbx_2, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "Multi-selection");
+   elm_check_state_set(ck, elm_gengrid_multi_select_get(grid));
+   evas_object_smart_callback_add(ck, "changed", _multi_change, grid);
+   elm_box_pack_end(hbx_2, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "No selection");
+   evas_object_smart_callback_add(ck, "changed", _no_sel_change, grid);
+   elm_box_pack_end(hbx_2, ck);
+   evas_object_show(ck);
+
+   hbx_3 = elm_box_add(win);
+   evas_object_size_hint_weight_set(hbx_3, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_horizontal_set(hbx_3, EINA_TRUE);
+   elm_box_pack_end(bx, hbx_3);
+   evas_object_show(hbx_3);
+
+   elm_gengrid_align_get(grid, &h, &v);
+   evas_object_smart_callback_add(grid, "scroll,anim,stop", _grid_scroll_stopped_cb, NULL);
+
+   sl = elm_slider_add(win);
+   elm_object_text_set(sl, "Horiz. alignment");
+   elm_slider_span_size_set(sl, 100);
+   evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND);
+   elm_slider_indicator_format_set(sl, "%1.1f");
+   elm_slider_value_set(sl, h);
+   elm_box_pack_end(hbx_3, sl);
+   evas_object_show(sl);
+
+   evas_object_smart_callback_add(sl, "changed", _h_align_change_cb, grid);
+
+   sl = elm_slider_add(win);
+   elm_object_text_set(sl, "Vert. alignment");
+   elm_slider_span_size_set(sl, 100);
+   evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND);
+   elm_slider_indicator_format_set(sl, "%1.1f");
+   elm_slider_value_set(sl, v);
+   elm_box_pack_end(hbx_3, sl);
+   evas_object_show(sl);
+
+   evas_object_smart_callback_add(sl, "changed", _v_align_change_cb, grid);
+
+   elm_gengrid_align_get(grid, &h, &v);
+
+   sl = elm_slider_add(win);
+   elm_object_text_set(sl, "Page rel. size");
+   elm_slider_span_size_set(sl, 100);
+   evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND);
+   elm_slider_indicator_format_set(sl, "%1.1f");
+   elm_slider_value_set(sl, h);
+   elm_box_pack_end(hbx_3, sl);
+   evas_object_show(sl);
+
+   _page_change_cb(grid, sl, NULL);
+   evas_object_smart_callback_add(sl, "changed", _page_change_cb, grid);
+
+   gic.item_style = "default";
+   gic.func.label_get = _grid_label_get;
+   gic.func.content_get = _grid_content_get;
+   gic.func.state_get = _grid_state_get;
+   gic.func.del = _grid_del;
+
+   _append_bt_clicked(grid, NULL, NULL);
+   _append_bt_clicked(grid, NULL, NULL);
+   _append_bt_clicked(grid, NULL, NULL);
+
+   evas_object_resize(win, 600, 600);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/genlist_example_01.c b/src/examples/genlist_example_01.c
new file mode 100644 (file)
index 0000000..f60ef41
--- /dev/null
@@ -0,0 +1,90 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` genlist_example_01.c -o genlist_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define N_ITEMS 30
+
+static Elm_Genlist_Item_Class _itc;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
+{
+   char buf[256];
+   snprintf(buf, sizeof(buf), "Item # %i", (int)(long)data);
+   return strdup(buf);
+}
+
+static Evas_Object *
+_item_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "clock");
+
+   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);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg;
+   Evas_Object *list;
+   int i;
+
+   win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Icon");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   _itc.item_style = "default";
+   _itc.func.label_get = _item_label_get;
+   _itc.func.content_get = _item_content_get;
+   _itc.func.state_get = NULL;
+   _itc.func.del = NULL;
+
+   list = elm_genlist_add(win);
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+       elm_genlist_item_append(list, &_itc,
+                               (void *)(long)i, NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _item_sel_cb, NULL);
+     }
+
+   evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, list);
+   evas_object_show(list);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/genlist_example_02.c b/src/examples/genlist_example_02.c
new file mode 100644 (file)
index 0000000..8d28977
--- /dev/null
@@ -0,0 +1,202 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` genlist_example_01.c -o genlist_example_01
+
+#include <time.h>
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define N_ITEMS 300
+
+static Elm_Genlist_Item_Class _itc;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
+{
+   time_t t = (time_t)ecore_time_unix_get();
+   char buf[256];
+   int i = (int)(long)data;
+   if (i % 2)
+     {
+       int n;
+       snprintf(buf, sizeof(buf), "Very Long Item # %i - realized at %s", i, ctime(&t));
+       n = strlen(buf);
+       buf[n - 1] = '\0';
+     }
+   else
+     snprintf(buf, sizeof(buf), "short item # %i", i);
+   return strdup(buf);
+}
+
+static Evas_Object *
+_item_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "clock");
+
+   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 void
+_show_status_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Evas_Coord x, y, w, h, mx, my;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+
+   const Eina_List *selected, *l, *realized;
+   printf("\nfirst selected item: %p\n", it);
+
+   selected = elm_genlist_selected_items_get(list);
+   printf("all selected items (%d): ", eina_list_count(selected));
+   EINA_LIST_FOREACH(selected, l, it)
+     printf("%p ", it);
+   printf("\n");
+
+   realized = elm_genlist_realized_items_get(list);
+   printf("realized items (%d): ", eina_list_count(realized));
+   EINA_LIST_FOREACH(realized, l, it)
+      printf("%p  ", it);
+   printf("\n");
+   printf("genlist mode: %s\n", elm_genlist_mode_get(list));
+   printf("mode item: %p\n", elm_genlist_mode_item_get(list));
+
+   evas_object_geometry_get(list, &x, &y, &w, &h);
+   mx = w / 2 + x;
+   my = h / 2 + y;
+   it = elm_genlist_at_xy_item_get(list, mx, my, NULL);
+   printf("item in the middle of the screen: %p\n", it);
+}
+
+static void
+_realize_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   elm_genlist_realized_items_update(list);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *hbox;
+   Evas_Object *list, *btn;
+   int i;
+
+   win = elm_win_add(NULL, "genlist", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Genlist - simple");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   list = elm_genlist_add(win);
+
+   _itc.item_style = "default";
+   _itc.func.label_get = _item_label_get;
+   _itc.func.content_get = _item_content_get;
+   _itc.func.state_get = NULL;
+   _itc.func.del = NULL;
+
+   Eina_Bool hbounce, vbounce;
+   Elm_Scroller_Policy hp, vp;
+
+   printf("default values:\n");
+   printf("always select: %d\n", elm_genlist_always_select_mode_get(list));
+   elm_genlist_bounce_get(list, &hbounce, &vbounce);
+   printf("bounce - horizontal: %d, vertical: %d\n", hbounce, vbounce);
+   printf("compress mode: %d\n", elm_genlist_compress_mode_get(list));
+   printf("homogeneous: %d\n", elm_genlist_homogeneous_get(list));
+   printf("horizontal mode: %d\n", elm_genlist_horizontal_mode_get(list));
+   printf("longpress timeout: %0.3f\n",
+         elm_genlist_longpress_timeout_get(list));
+   printf("multi selection: %d\n", elm_genlist_multi_select_get(list));
+   printf("no selection mode: %d\n", elm_genlist_no_select_mode_get(list));
+   printf("height for width enabled: %d\n",
+         elm_genlist_height_for_width_mode_get(list));
+   elm_genlist_scroller_policy_get(list, &hp, &vp);
+   printf("scroller policy - horizontal: %d, vertical: %d\n", hp, vp);
+   printf("block count: %d\n", elm_genlist_block_count_get(list));
+   printf("\n");
+
+   elm_genlist_always_select_mode_set(list, EINA_FALSE);
+   elm_genlist_bounce_set(list, EINA_FALSE, EINA_FALSE);
+   elm_genlist_compress_mode_set(list, EINA_TRUE);
+   elm_genlist_homogeneous_set(list, EINA_FALSE);
+   elm_genlist_horizontal_mode_set(list, ELM_LIST_LIMIT);
+   elm_genlist_multi_select_set(list, EINA_TRUE);
+   elm_genlist_no_select_mode_set(list, EINA_FALSE);
+   elm_genlist_height_for_width_mode_set(list, EINA_FALSE);
+   elm_genlist_scroller_policy_set(list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_ON);
+   elm_genlist_longpress_timeout_set(list, 0.5);
+   elm_genlist_block_count_set(list, 16);
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+       elm_genlist_item_append(list, &_itc,
+                               (void *)(long)i, NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _item_sel_cb, NULL);
+     }
+
+   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);
+
+   hbox = elm_box_add(win);
+   elm_box_horizontal_set(hbox, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, hbox);
+   evas_object_show(hbox);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Show status");
+   evas_object_size_hint_weight_set(btn, 0, 0);
+   evas_object_size_hint_align_set(btn, 0.5, 0.5);
+   evas_object_smart_callback_add(btn, "clicked", _show_status_cb, list);
+   elm_box_pack_end(hbox, btn);
+   evas_object_show(btn);
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Realize");
+   evas_object_size_hint_weight_set(btn, 0, 0);
+   evas_object_size_hint_align_set(btn, 0.5, 0.5);
+   evas_object_smart_callback_add(btn, "clicked", _realize_cb, list);
+   elm_box_pack_end(hbox, btn);
+   evas_object_show(btn);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 200, 640);
+   evas_object_resize(win, 200, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/genlist_example_03.c b/src/examples/genlist_example_03.c
new file mode 100644 (file)
index 0000000..efc533e
--- /dev/null
@@ -0,0 +1,136 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` genlist_example_03.c -o genlist_example_03
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define N_ITEMS 30
+
+static Elm_Genlist_Item_Class _itc;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
+{
+   time_t t = (time_t)ecore_time_unix_get();
+   char buf[256];
+   int i = (int)(long)data;
+
+   if (!strcmp(part, "elm.text"))
+     snprintf(buf, sizeof(buf), "Item # %i", i);
+   else
+     {
+       int n;
+       snprintf(buf, sizeof(buf), "created at %s", ctime(&t));
+       n = strlen(buf);
+       buf[n - 1] = '\0';
+     }
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_item_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "clock");
+
+   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 Evas_Object *
+_genlist_add(Evas_Object *box)
+{
+   Evas_Object *list = elm_genlist_add(elm_object_parent_widget_get(box));
+   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_size_hint_min_set(list, 200, 160);
+   elm_box_pack_end(box, list);
+   evas_object_show(list);
+
+   return list;
+}
+
+static void
+_genlist_fill(Evas_Object *list)
+{
+   int i;
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+       elm_genlist_item_append(list, &_itc,
+                               (void *)(long)i, NULL,
+                               ELM_GENLIST_ITEM_NONE,
+                               _item_sel_cb, NULL);
+     }
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *box;
+   Evas_Object *list;
+
+   win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Icon");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+   elm_box_horizontal_set(box, EINA_TRUE);
+   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);
+
+   _itc.item_style = "double_label";
+   _itc.func.label_get = _item_label_get;
+   _itc.func.content_get = _item_content_get;
+   _itc.func.state_get = NULL;
+   _itc.func.del = NULL;
+
+   list = _genlist_add(box);
+   _genlist_fill(list);
+
+   list = _genlist_add(box);
+   elm_genlist_horizontal_mode_set(list, ELM_LIST_LIMIT);
+   _genlist_fill(list);
+
+   list = _genlist_add(box);
+   elm_genlist_compress_mode_set(list, EINA_TRUE);
+   _genlist_fill(list);
+
+   list = _genlist_add(box);
+   elm_genlist_height_for_width_mode_set(list, EINA_TRUE);
+   _genlist_fill(list);
+
+   evas_object_size_hint_min_set(bg, 800, 160);
+   evas_object_size_hint_max_set(bg, 800, 640);
+   evas_object_resize(win, 800, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/genlist_example_04.c b/src/examples/genlist_example_04.c
new file mode 100644 (file)
index 0000000..3c53b1a
--- /dev/null
@@ -0,0 +1,386 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` genlist_example_04.c -o genlist_example_04
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define N_ITEMS 300
+
+static Elm_Genlist_Item_Class _itc;
+static Elm_Genlist_Item_Class _itc_group;
+static int nitems = 0;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part)
+{
+   time_t t = (time_t)ecore_time_unix_get();
+   char buf[256];
+   int i = (int)(long)data;
+
+   if (!strcmp(part, "elm.text"))
+     snprintf(buf, sizeof(buf), "Item # %i", i);
+   else
+     {
+       int n;
+       snprintf(buf, sizeof(buf), "realized at %s", ctime(&t));
+       n = strlen(buf);
+       buf[n - 1] = '\0';
+     }
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_item_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "clock");
+
+   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 *
+_group_label_get(void *data, Evas_Object *obj __UNUSED__, const char *part __UNUSED__)
+{
+   char buf[256];
+   int i = (int)(long)data;
+
+   snprintf(buf, sizeof(buf), "Group %d (item #%d)", i / 7, i);
+
+   return strdup(buf);
+}
+
+static Evas_Object *
+_group_content_get(void *data __UNUSED__, Evas_Object *obj, const char *part __UNUSED__)
+{
+   Evas_Object *ic = elm_icon_add(obj);
+
+   if (!strcmp(part, "elm.swallow.icon"))
+     elm_icon_standard_set(ic, "home");
+
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   return ic;
+}
+
+static void
+_append_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+
+   elm_genlist_item_append(list, &_itc,
+                          (void *)(long)nitems++, NULL,
+                          ELM_GENLIST_ITEM_NONE,
+                          _item_sel_cb, NULL);
+
+}
+
+static void
+_prepend_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+
+   elm_genlist_item_prepend(list, &_itc,
+                          (void *)(long)nitems++, NULL,
+                          ELM_GENLIST_ITEM_NONE,
+                          _item_sel_cb, NULL);
+
+}
+
+static void
+_insert_before_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+
+   if (!it)
+     return;
+
+   elm_genlist_item_insert_before(list, &_itc,
+                                 (void *)(long)nitems++, NULL,
+                                 it, ELM_GENLIST_ITEM_NONE,
+                                 _item_sel_cb, NULL);
+
+}
+
+static void
+_insert_after_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+
+   if (!it)
+     return;
+
+   elm_genlist_item_insert_after(list, &_itc,
+                                (void *)(long)nitems++, NULL,
+                                it, ELM_GENLIST_ITEM_NONE,
+                                _item_sel_cb, NULL);
+
+}
+
+static void
+_next_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it;
+
+   it = elm_genlist_selected_item_get(list);
+   if (it)
+     it = elm_genlist_item_next_get(it);
+
+   if (!it)
+     it = elm_genlist_first_item_get(list);
+
+   elm_genlist_item_selected_set(it, EINA_TRUE);
+   elm_genlist_item_show(it);
+}
+
+static void
+_prev_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it;
+
+   it = elm_genlist_selected_item_get(list);
+   if (it)
+     it = elm_genlist_item_prev_get(it);
+
+   if (!it)
+     it = elm_genlist_last_item_get(list);
+
+   elm_genlist_item_selected_set(it, EINA_TRUE);
+   elm_genlist_item_show(it);
+}
+
+static void
+_bring_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_bring_in(it);
+}
+
+static void
+_show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_show(it);
+}
+
+static void
+_middle_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_middle_bring_in(it);
+}
+
+static void
+_middle_show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_middle_show(it);
+}
+
+static void
+_top_in_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_top_bring_in(it);
+}
+
+static void
+_top_show_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Genlist_Item *it = data;
+
+   if (!it)
+     return;
+
+   elm_genlist_item_top_show(it);
+}
+
+static void
+_realize_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+
+   if (!it)
+     return;
+
+   elm_genlist_item_update(it);
+}
+
+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;
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *fbox;
+   Evas_Object *list;
+   Evas_Object *bt_bring_in, *bt_show;
+   Evas_Object *bt_middle_in, *bt_middle_show;
+   Evas_Object *bt_top_in, *bt_top_show;
+   int i;
+
+   win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Icon");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   _itc.item_style = "double_label";
+   _itc.func.label_get = _item_label_get;
+   _itc.func.content_get = _item_content_get;
+   _itc.func.state_get = NULL;
+   _itc.func.del = NULL;
+
+   _itc_group.item_style = "group_index";
+   _itc_group.func.label_get = _group_label_get;
+   _itc_group.func.content_get = _group_content_get;
+   _itc_group.func.state_get = NULL;
+   _itc_group.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, "prepend", _prepend_cb);
+   _button_add(list, fbox, "append", _append_cb);
+   _button_add(list, fbox, "insert before", _insert_before_cb);
+   _button_add(list, fbox, "insert after", _insert_after_cb);
+   _button_add(list, fbox, "prev", _prev_cb);
+   _button_add(list, fbox, "next", _next_cb);
+   _button_add(list, fbox, "realize", _realize_cb);
+   bt_bring_in = _button_add(list, fbox, "bring #50", NULL);
+   bt_show = _button_add(list, fbox, "show #50", NULL);
+   bt_middle_in = _button_add(list, fbox, "bring to middle #200", NULL);
+   bt_middle_show = _button_add(list, fbox, "show in middle #200", NULL);
+   bt_top_in = _button_add(list, fbox, "bring to top #250", NULL);
+   bt_top_show = _button_add(list, fbox, "show in top #250", NULL);
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+       Elm_Genlist_Item *gli, *glg;
+
+       if (i % 7 == 0)
+         {
+            glg = gli = elm_genlist_item_append(list, &_itc_group,
+                                                (void *)(long)nitems++, NULL,
+                                                ELM_GENLIST_ITEM_GROUP,
+                                                _item_sel_cb, NULL);
+            elm_genlist_item_display_only_set(glg, EINA_TRUE);
+         }
+       else
+         {
+            gli = elm_genlist_item_append(list, &_itc,
+                                          (void *)(long)nitems++, glg,
+                                          ELM_GENLIST_ITEM_NONE,
+                                          _item_sel_cb, NULL);
+         }
+
+       switch (i)
+         {
+          case 3:
+             elm_genlist_item_disabled_set(gli, EINA_TRUE);
+             break;
+          case 50:
+             evas_object_smart_callback_add(
+                bt_bring_in, "clicked", _bring_in_cb, gli);
+             evas_object_smart_callback_add(
+                bt_show, "clicked", _show_cb, gli);
+             break;
+          case 200:
+             evas_object_smart_callback_add(
+                bt_middle_in, "clicked", _middle_in_cb, gli);
+             evas_object_smart_callback_add(
+                bt_middle_show, "clicked", _middle_show_cb, gli);
+             break;
+          case 250:
+             evas_object_smart_callback_add(
+                bt_top_in, "clicked", _top_in_cb, gli);
+             evas_object_smart_callback_add(
+                bt_top_show, "clicked", _top_show_cb, gli);
+         }
+     }
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 420, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/genlist_example_05.c b/src/examples/genlist_example_05.c
new file mode 100644 (file)
index 0000000..7e0151b
--- /dev/null
@@ -0,0 +1,422 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` genlist_example_04.c -o genlist_example_04
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#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;
+static Elm_Genlist_Item_Class _itp;
+static Elm_Genlist_Item_Class _itfav;
+static int nitems = 0;
+
+static char *
+_item_label_get(void *data, Evas_Object *obj __UNUSED__, 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 __UNUSED__, 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 __UNUSED__, const char *part __UNUSED__)
+{
+   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 __UNUSED__, Evas_Object *obj, const char *part __UNUSED__)
+{
+   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 __UNUSED__, 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 __UNUSED__, 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 __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it, *parent = NULL;
+   Node_Data *pdata, *d = malloc(sizeof(*d));
+
+   d->children = NULL;
+   d->value = nitems++;
+   d->favorite = EINA_FALSE;
+
+   it = elm_genlist_selected_item_get(list);
+   if (it)
+     parent = elm_genlist_item_parent_get(it);
+
+   if (parent)
+     {
+       d->level = elm_genlist_item_expanded_depth_get(parent) + 1;
+       pdata = elm_genlist_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 __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+
+   if (!it)
+     return;
+
+   Node_Data *d = elm_genlist_item_data_get(it);
+   d->favorite = !d->favorite;
+   if (d->favorite)
+     elm_genlist_item_item_class_update(it, &_itfav);
+   else
+     {
+       if (d->children)
+         elm_genlist_item_item_class_update(it, &_itp);
+       else
+         elm_genlist_item_item_class_update(it, &_itc);
+     }
+
+   elm_genlist_item_update(it);
+}
+
+static void
+_add_child_cb(void *data, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+   Elm_Genlist_Item *prev, *parent;
+
+   if (!it)
+     return;
+
+   Node_Data *d = elm_genlist_item_data_get(it);
+   prev = elm_genlist_item_prev_get(it);
+   parent = elm_genlist_item_parent_get(it);
+
+   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(it) + 1;
+   d->children = eina_list_append(d->children, ndata);
+
+   // Changing leaf item to parent item
+   if (change_item)
+     {
+        elm_genlist_item_del(it);
+
+       if (prev != parent)
+         it = elm_genlist_item_insert_after(list, &_itp, d, parent, prev,
+                                            ELM_GENLIST_ITEM_SUBITEMS,
+                                            _item_sel_cb, NULL);
+       else
+         it = elm_genlist_item_prepend(list, &_itp, d, parent,
+                                       ELM_GENLIST_ITEM_SUBITEMS,
+                                       _item_sel_cb, NULL);
+       elm_genlist_item_expanded_set(it, EINA_FALSE);
+       elm_genlist_item_selected_set(it, EINA_TRUE);
+     }
+   else if (elm_genlist_item_expanded_get(it))
+     {
+       elm_genlist_item_append(list, &_itc, ndata, it,
+                               ELM_GENLIST_ITEM_NONE, _item_sel_cb, NULL);
+     }
+
+   elm_genlist_item_update(it);
+
+}
+
+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 __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *list = data;
+   Elm_Genlist_Item *it = elm_genlist_selected_item_get(list);
+   Elm_Genlist_Item *parent = NULL;
+
+   if (!it)
+     return;
+
+   Node_Data *pdata, *d = elm_genlist_item_data_get(it);
+   parent = elm_genlist_item_parent_get(it);
+   elm_genlist_item_subitems_clear(it);
+   elm_genlist_item_del(it);
+
+   _clear_list(d);
+
+   if (!parent)
+     return;
+
+   pdata = elm_genlist_item_data_get(parent);
+   pdata->children = eina_list_remove(pdata->children, d);
+   elm_genlist_item_update(parent);
+}
+
+static void
+_expand_request_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info)
+{
+   Elm_Genlist_Item *it = event_info;
+   printf("expand request on item: %p\n", event_info);
+   elm_genlist_item_expanded_set(it, EINA_TRUE);
+}
+
+static void
+_contract_request_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info)
+{
+   Elm_Genlist_Item *it = event_info;
+   printf("contract request on item: %p\n", event_info);
+   elm_genlist_item_expanded_set(it, EINA_FALSE);
+}
+
+static void
+_expanded_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info)
+{
+   Eina_List *l;
+   Elm_Genlist_Item *it = event_info;
+   Node_Data *it_data, *d = elm_genlist_item_data_get(it);
+   Evas_Object *list = elm_genlist_item_genlist_get(it);
+
+   Elm_Genlist_Item_Class *ic;
+
+   EINA_LIST_FOREACH(d->children, l, it_data)
+     {
+       Elm_Genlist_Item *nitem;
+       Elm_Genlist_Item_Flags flags = 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;
+            flags = ELM_GENLIST_ITEM_SUBITEMS;
+         }
+       else
+         ic = &_itc;
+
+       nitem = elm_genlist_item_append(list, ic, it_data, it,
+                                       flags, _item_sel_cb, NULL);
+       elm_genlist_item_expanded_set(nitem, EINA_FALSE);
+     }
+}
+
+static void
+_contracted_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info)
+{
+   Elm_Genlist_Item *it = event_info;
+   elm_genlist_item_subitems_clear(it);
+}
+
+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;
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *fbox;
+   Evas_Object *list;
+   int i;
+
+   win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Icon");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   _itc.item_style = "default";
+   _itc.func.label_get = _item_label_get;
+   _itc.func.content_get = _item_content_get;
+   _itc.func.state_get = NULL;
+   _itc.func.del = NULL;
+
+   _itp.item_style = "default";
+   _itp.func.label_get = _parent_label_get;
+   _itp.func.content_get = _parent_content_get;
+   _itp.func.state_get = NULL;
+   _itp.func.del = NULL;
+
+   _itfav.item_style = "default";
+   _itfav.func.label_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);
+
+   for (i = 0; i < N_ITEMS; i++)
+     {
+       Elm_Genlist_Item *gli, *glg;
+       Node_Data *data = malloc(sizeof(*data)); // data for this item
+       data->children = NULL;
+       data->value = i;
+       data->favorite = EINA_FALSE;
+       nitems++;
+
+       Node_Data *pdata; // data for the parent of the group
+
+       printf("creating item: #%d\n", data->value);
+       if (i % 3 == 0)
+         {
+            glg = gli = elm_genlist_item_append(list, &_itp, data, NULL,
+                                                ELM_GENLIST_ITEM_SUBITEMS,
+                                                _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);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 800);
+   evas_object_resize(win, 420, 600);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/hover_example_01.c b/src/examples/hover_example_01.c
new file mode 100644 (file)
index 0000000..61af7aa
--- /dev/null
@@ -0,0 +1,81 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` hover_example_01.c -o hover_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void
+_show_hover(void *data, Evas_Object *obj, void *event_info)
+{
+   evas_object_show(data);
+}
+
+static void
+_hide_hover(void *data, Evas_Object *obj, void *event_info)
+{
+   evas_object_hide(data);
+}
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bt, *bt2, *rect, *rect2, *rect3, *hover;
+
+   win = elm_win_add(NULL, "hover", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Hover");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_min_set(rect, 25, 25);
+   evas_object_color_set(rect, 255, 0, 0, 255);
+   evas_object_show(rect);
+
+   rect2 = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_min_set(rect2, 25, 25);
+   evas_object_color_set(rect2, 0, 255, 0, 255);
+   evas_object_show(rect2);
+
+   rect3 = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_min_set(rect3, 25, 25);
+   evas_object_color_set(rect3, 0, 0, 255, 255);
+   evas_object_show(rect3);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Show hover");
+   evas_object_move(bt, 60, 90);
+   evas_object_resize(bt, 80, 20);
+   evas_object_show(bt);
+
+   bt2 = elm_button_add(win);
+   elm_object_text_set(bt2, "Hide hover");
+   evas_object_show(bt2);
+
+   hover = elm_hover_add(win);
+   elm_hover_parent_set(hover, win);
+   elm_hover_target_set(hover, bt);
+
+   elm_object_style_set(hover, "popout");
+
+   elm_hover_content_set(hover, "left", rect);
+   elm_hover_content_set(hover, "top", rect2);
+   elm_hover_content_set(hover, "right", rect3);
+   elm_hover_content_set(hover, "middle", bt2);
+
+   evas_object_smart_callback_add(bt, "clicked", _show_hover, hover);
+   evas_object_smart_callback_add(bt2, "clicked", _hide_hover, hover);
+
+   evas_object_resize(win, 200, 200);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/hoversel_example_01.c b/src/examples/hoversel_example_01.c
new file mode 100644 (file)
index 0000000..fb3d073
--- /dev/null
@@ -0,0 +1,103 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` hoversel_example_01.c -o hoversel_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _print_items(void *data, Evas_Object *obj, void *event_info);
+static void _rm_items(void *data, Evas_Object *obj, void *event_info);
+static void _sel(void *data, Evas_Object *obj, void *event_info);
+static void _free(void *data, Evas_Object *obj, void *event_info);
+static void _add_item(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *rect, *hoversel;
+   Elm_Hoversel_Item *it;
+
+   win = elm_win_add(NULL, "hoversel", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Hoversel");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 255, 0, 0, 255);
+   evas_object_show(rect);
+
+   hoversel = elm_hoversel_add(win);
+   elm_hoversel_hover_parent_set(hoversel, win);
+   elm_hoversel_horizontal_set(hoversel, EINA_FALSE);
+   elm_object_text_set(hoversel, "Hoversel");
+   elm_hoversel_icon_set(hoversel, rect);
+   elm_hoversel_item_add(hoversel, "Print items", NULL, ELM_ICON_NONE,
+                         _print_items, NULL);
+   elm_hoversel_item_add(hoversel, "Option 2", "home", ELM_ICON_STANDARD, NULL,
+                         NULL);
+   it = elm_hoversel_item_add(hoversel, "Clear all items", "close",
+                         ELM_ICON_STANDARD, _rm_items, NULL);
+   evas_object_smart_callback_add(hoversel, "selected", _sel, it);
+   evas_object_smart_callback_add(hoversel, "clicked", _add_item, NULL);
+
+   evas_object_resize(hoversel, 180, 30);
+   evas_object_move(hoversel, 10, 10);
+   evas_object_show(hoversel);
+
+   evas_object_resize(win, 200, 300);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_print_items(void *data, Evas_Object *obj, void *event_info)
+{
+   const Eina_List *items = elm_hoversel_items_get(obj);
+   const Eina_List *l;
+   Elm_Hoversel_Item *it;
+
+   EINA_LIST_FOREACH(items, l, it)
+     printf("%s\n", elm_hoversel_item_label_get(it));
+}
+
+static void
+_rm_items(void *data, Evas_Object *obj, void *event_info)
+{
+   if(!elm_hoversel_expanded_get(obj))
+      elm_hoversel_clear(obj);
+}
+
+static void
+_sel(void *data, Evas_Object *obj, void *event_info)
+{
+   if(!elm_hoversel_expanded_get(obj) && event_info != data)
+      elm_hoversel_item_del(event_info);
+}
+
+static void
+_add_item(void *data, Evas_Object *obj, void *event_info)
+{
+   static int num = 0;
+   char *str = malloc(sizeof(char) * 10);
+   Elm_Hoversel_Item *it;
+
+   snprintf(str, 10, "item %d", ++num);
+
+   it = elm_hoversel_item_add(obj, str, NULL, ELM_ICON_NONE, NULL, str);
+   elm_hoversel_item_del_cb_set(it, _free);
+}
+
+static void
+_free(void *data, Evas_Object *obj, void *event_info)
+{
+   free(data);
+}
diff --git a/src/examples/icon_example_01.c b/src/examples/icon_example_01.c
new file mode 100644 (file)
index 0000000..06b2f8c
--- /dev/null
@@ -0,0 +1,59 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` image_example_01.c -o image_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "."
+#endif
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *icon;
+   const char *path, *group, *name;
+
+   win = elm_win_add(NULL, "icon", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Icon");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   icon = elm_icon_add(win);
+   elm_icon_order_lookup_set(icon, ELM_ICON_LOOKUP_THEME_FDO);
+   elm_icon_standard_set(icon, "home");
+
+   path = NULL;
+   group = NULL;
+   name = NULL;
+   elm_icon_file_get(icon, &path, &group);
+   name = elm_icon_standard_get(icon);
+   printf("path = %s, group = %s, name = %s\n", path, group, name);
+
+   elm_icon_no_scale_set(icon, EINA_TRUE);
+   elm_icon_scale_set(icon, EINA_FALSE, EINA_TRUE);
+   elm_icon_smooth_set(icon, EINA_FALSE);
+   elm_icon_fill_outside_set(icon, EINA_TRUE);
+
+   evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, icon);
+   evas_object_show(icon);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/image_example_01.c b/src/examples/image_example_01.c
new file mode 100644 (file)
index 0000000..26321bf
--- /dev/null
@@ -0,0 +1,60 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` image_example_01.c -o image_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "."
+#endif
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *image;
+   char buf[PATH_MAX];
+
+   win = elm_win_add(NULL, "image", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Image");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR);
+
+   image = elm_image_add(win);
+   if (!elm_image_file_set(image, buf, NULL))
+     {
+       printf("error: could not load image \"%s\"\n", buf);
+       return -1;
+     }
+
+   elm_image_no_scale_set(image, EINA_TRUE);
+   elm_image_scale_set(image, EINA_FALSE, EINA_TRUE);
+   elm_image_smooth_set(image, EINA_FALSE);
+   elm_image_orient_set(image, ELM_IMAGE_FLIP_HORIZONTAL);
+   elm_image_aspect_ratio_retained_set(image, EINA_TRUE);
+   elm_image_fill_outside_set(image, EINA_TRUE);
+   elm_image_editable_set(image, EINA_TRUE);
+
+   evas_object_size_hint_weight_set(image, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, image);
+   evas_object_show(image);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/index_example_01.c b/src/examples/index_example_01.c
new file mode 100644 (file)
index 0000000..f11e4e3
--- /dev/null
@@ -0,0 +1,213 @@
+/**
+ * Simple Elementary's <b>index widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` index_example.c -o index_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+struct example_data
+{
+   Evas_Object *list, *index;
+};
+
+struct example_data d = {NULL, NULL};
+
+static const char *dict[] = \
+{
+#include "dict.txt"
+};
+
+static void
+_index_item_del(void        *data,
+                Evas_Object *obj __UNUSED__,
+                void        *event_info)
+{
+   fprintf(stdout, "Deleting associated list node (%s). Comparing index "
+                   "item data reported via callback with the one returned by "
+                   "index's API on items: %s.\n",
+           elm_list_item_label_get(data),
+           data == elm_index_item_data_get(event_info) ? "OK" :
+           "FAIL, something went wrong");
+
+   elm_list_item_del(data);
+}
+
+/* delete an index item */
+static void
+_item_del(void        *data __UNUSED__,
+          Evas_Object *obj __UNUSED__,
+          void        *event_info __UNUSED__)
+{
+   Elm_Index_Item *it;
+   Elm_List_Item *lit = elm_index_item_selected_get(d.index, 0);
+
+   it = elm_index_item_find(d.index, lit);
+
+   if (!it) return;
+
+   fprintf(stdout, "Deleting last selected index item, which had letter"
+                    " %s (pointing to %s)\n", elm_index_item_letter_get(it),
+           elm_list_item_label_get(lit));
+
+   elm_index_item_del(d.index, lit);
+}
+
+static void
+_item_del_all(void        *data __UNUSED__,
+              Evas_Object *obj __UNUSED__,
+              void        *event_info __UNUSED__)
+{
+   elm_index_item_clear(d.index);
+}
+
+static void
+_active_set(void        *data __UNUSED__,
+            Evas_Object *obj __UNUSED__,
+            void        *event_info __UNUSED__)
+{
+   elm_index_active_set(d.index, !elm_index_active_get(d.index));
+
+   fprintf(stdout, "Toggling index programmatically.\n");
+}
+
+/* "delay,changed" hook */
+static void
+_index_changed(void        *data __UNUSED__,
+               Evas_Object *obj __UNUSED__,
+               void        *event_info)
+{
+   elm_list_item_bring_in(event_info);
+}
+
+static void
+_index_selected(void        *data __UNUSED__,
+                Evas_Object *obj,
+                void        *event_info)
+{
+   Elm_List_Item *it = event_info;
+
+   fprintf(stdout, "New index item selected. Comparing item reported"
+                   " via callback with the selection returned by the API: "
+                   "%s.\n", it == elm_index_item_selected_get(obj, 0) ? "OK" :
+           "FAIL, something went wrong");
+}
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *hbox, *vbox, *bt, *sep;
+   Elm_List_Item *it;
+   unsigned int i;
+   char curr = 0;
+
+   win = elm_win_add(NULL, "index", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Index Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   vbox = elm_box_add(win);
+   elm_win_resize_object_add(win, vbox);
+   evas_object_size_hint_weight_set(vbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(vbox);
+
+   d.list = elm_list_add(win);
+   evas_object_size_hint_weight_set(d.list, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(d.list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(d.list);
+   elm_box_pack_end(vbox, d.list);
+
+   d.index = elm_index_add(win);
+   elm_win_resize_object_add(win, d.index);
+   evas_object_size_hint_weight_set(d.index, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(d.list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(d.index);
+
+   for (i = 0; i < (sizeof(dict) / sizeof(dict[0])); i++)
+     {
+        it = elm_list_item_append(d.list, dict[i], NULL, NULL, NULL, NULL);
+
+        if (curr != dict[i][0])
+          {
+             Elm_Index_Item *index_it;
+             char buf[32];
+
+             curr = dict[i][0];
+             /* indexing by first letters */
+
+             snprintf(buf, sizeof(buf), "%c", curr);
+             elm_index_item_append(d.index, buf, it);
+             index_it = elm_index_item_find(d.index, it);
+
+             elm_index_item_del_cb_set(index_it, _index_item_del);
+          }
+     }
+
+   evas_object_smart_callback_add(d.index, "delay,changed", _index_changed,
+                                  NULL);
+   evas_object_smart_callback_add(d.index, "selected", _index_selected, NULL);
+
+   /* attribute setting knobs */
+   sep = elm_separator_add(win);
+   elm_separator_horizontal_set(sep, EINA_TRUE);
+   elm_box_pack_end(vbox, sep);
+   evas_object_show(sep);
+
+   hbox = elm_box_add(win);
+   elm_box_horizontal_set(hbox, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbox, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_fill_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(vbox, hbox);
+   evas_object_show(hbox);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "bring in index");
+   evas_object_smart_callback_add(bt, "clicked", _active_set, NULL);
+   elm_box_pack_end(hbox, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "delete last selected item");
+   evas_object_smart_callback_add(bt, "clicked", _item_del, NULL);
+   elm_box_pack_end(hbox, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "delete all items");
+   evas_object_smart_callback_add(bt, "clicked", _item_del_all, NULL);
+   elm_box_pack_end(hbox, bt);
+   evas_object_show(bt);
+
+   evas_object_resize(win, 320, 600);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/index_example_02.c b/src/examples/index_example_02.c
new file mode 100644 (file)
index 0000000..11e20b4
--- /dev/null
@@ -0,0 +1,155 @@
+/**
+ * Simple Elementary's <b>index widget</b> example, illustrating its
+ * usage and API -- now with sorted insertions.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` index_example.c -o index_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "../../data"
+#endif
+
+static const char *items[] = \
+{
+   "Judith",
+   "Paulina",
+   "Cathy",
+   "Vendella",
+   "Naomi",
+   "Ashley",
+   "Stacey",
+   "Gail"
+};
+
+static void
+_index_changed(void        *data __UNUSED__,
+               Evas_Object *obj __UNUSED__,
+               void        *event_info)
+{
+   elm_gengrid_item_bring_in(event_info);
+}
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static char *
+_grid_label_get(void        *data,
+                Evas_Object *obj __UNUSED__,
+                const char  *part __UNUSED__)
+{
+   int idx = (int)data;
+   return strdup(items[idx]);
+}
+
+Evas_Object *
+_grid_content_get(void        *data __UNUSED__,
+               Evas_Object *obj,
+               const char  *part)
+{
+   if (!strcmp(part, "elm.swallow.icon"))
+     {
+        char buf[PATH_MAX];
+        snprintf(buf, sizeof(buf), "%s/images/%s", PACKAGE_DATA_DIR,
+                 "sky_01.jpg");
+
+        Evas_Object *icon = elm_bg_add(obj);
+        elm_bg_file_set(icon, buf, NULL);
+        evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1,
+                                         1);
+        evas_object_show(icon);
+        return icon;
+     }
+
+   return NULL;
+}
+
+/* ordering alphabetically */
+static int
+_index_icmp(const void *data1,
+            const void *data2)
+{
+   const char *label1, *label2;
+
+   const Elm_Index_Item *it1 = data1;
+   const Elm_Index_Item *it2 = data2;
+
+   label1 = elm_index_item_letter_get(it1);
+   label2 = elm_index_item_letter_get(it2);
+
+   return strcasecmp(label1, label2);
+}
+
+int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *grid, *index;
+   Elm_Gengrid_Item *it;
+   unsigned int i;
+
+   Elm_Gengrid_Item_Class gic;
+
+   win = elm_win_add(NULL, "index", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Index Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   grid = elm_gengrid_add(win);
+   elm_gengrid_item_size_set(grid, 150, 150);
+
+   gic.item_style = "default";
+   gic.func.label_get = _grid_label_get;
+   gic.func.content_get = _grid_content_get;
+   gic.func.state_get = NULL;
+   gic.func.del = NULL;
+
+   evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, grid);
+   evas_object_show(grid);
+
+   index = elm_index_add(win);
+   evas_object_size_hint_weight_set(index, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, index);
+
+   evas_object_show(index);
+
+   for (i = 0; i < (sizeof(items) / sizeof(items[0])); i++)
+     {
+        char buf[32];
+
+        it = elm_gengrid_item_append(grid, &gic, (void *)i, NULL, NULL);
+
+        /* indexing by first letters */
+        snprintf(buf, sizeof(buf), "%c", items[i][0]);
+        elm_index_item_sorted_insert(index, buf, it, _index_icmp, NULL);
+     }
+
+   evas_object_smart_callback_add(index, "delay,changed", _index_changed, NULL);
+
+   evas_object_resize(win, 320, 300);
+   evas_object_show(win);
+
+   elm_index_active_set(index, EINA_TRUE);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/inwin_example.c b/src/examples/inwin_example.c
new file mode 100644 (file)
index 0000000..9d464ac
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * gcc -o inwin_example inwin_example.c `pkg-config --cflags --libs elementary`
+ */
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static Evas_Object *inwin = NULL;
+static const char *styles[] = {
+     "default",
+     "minimal",
+     "minimal_vertical"
+};
+static int current_style = 0;
+
+static void
+_inwin_hide(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   if (inwin)
+     {
+        evas_object_hide(inwin);
+        return;
+     }
+   elm_object_text_set(obj, "No inwin!");
+   elm_object_disabled_set(obj, EINA_TRUE);
+}
+
+static void
+_inwin_destroy(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   if (inwin)
+     {
+        evas_object_del(inwin);
+        inwin = NULL;
+        return;
+     }
+   elm_object_text_set(obj, "No inwin!");
+   elm_object_disabled_set(obj, EINA_TRUE);
+}
+
+static void
+_btn_click_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   Evas_Object *o, *parent;
+
+   if (inwin)
+     {
+        elm_win_inwin_activate(inwin);
+        return;
+     }
+
+   parent = elm_object_top_widget_get(obj);
+   inwin = elm_win_inwin_add(parent);
+   elm_object_style_set(inwin, styles[current_style]);
+   evas_object_show(inwin);
+
+   current_style = (current_style + 1) % 3;
+
+   o = elm_box_add(parent);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_win_inwin_content_set(inwin, o);
+   evas_object_show(o);
+
+   o = elm_label_add(parent);
+   elm_object_text_set(o, "Click on the first button to hide the Inwin.<ps>"
+                       "Second to destroy it<ps>");
+   evas_object_show(o);
+
+   elm_box_pack_end(elm_win_inwin_content_get(inwin), o);
+
+   o = elm_button_add(parent);
+   elm_object_text_set(o, "Hide");
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _inwin_hide, NULL);
+
+   elm_box_pack_end(elm_win_inwin_content_get(inwin), o);
+
+   o = elm_button_add(parent);
+   elm_object_text_set(o, "Destroy");
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _inwin_destroy, NULL);
+
+   elm_box_pack_end(elm_win_inwin_content_get(inwin), o);
+}
+
+static void
+_win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   if (inwin)
+     {
+        Evas_Object *hover, *o = elm_win_inwin_content_unset(inwin);
+        evas_object_del(inwin);
+        inwin = NULL;
+        hover = elm_hover_add(obj);
+        elm_hover_target_set(hover, obj);
+        elm_hover_content_set(hover, "middle", o);
+        evas_object_show(hover);
+        return;
+     }
+   evas_object_del(obj);
+}
+
+static Eina_Bool
+_screenshot_hack_cb(void *data)
+{
+   _btn_click_cb(NULL, data, NULL);
+   return EINA_FALSE;
+}
+
+int
+elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *o;
+
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   win = elm_win_add(NULL, "inwin-example", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Inwin Example");
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   evas_object_smart_callback_add(win, "delete,request", _win_del_cb, NULL);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   o = elm_button_add(win);
+   elm_object_text_set(o, "Inwin!");
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(o, 0.0, 0.0);
+   elm_box_pack_end(box, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _btn_click_cb, NULL);
+
+   if (!strncmp(elm_engine_current_get(), "shot", 4))
+     ecore_timer_add(0.1, _screenshot_hack_cb, o);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN();
diff --git a/src/examples/label_example_01.c b/src/examples/label_example_01.c
new file mode 100644 (file)
index 0000000..d863655
--- /dev/null
@@ -0,0 +1,81 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` label_example_01.c -o label_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *label, *label2, *label3, *label4, *label5, *label6;
+
+   win = elm_win_add(NULL, "label", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Label");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, "Some long text for our label, that is long but "
+                              "not too long.");
+   elm_label_slide_duration_set(label, 3);
+   elm_label_slide_set(label, EINA_TRUE);
+   elm_object_style_set(label, "slide_bounce");
+   evas_object_resize(label, 200, 15);
+   evas_object_show(label);
+
+   label2 = elm_label_add(win);
+   elm_object_text_set(label2, "This is the text for our second label, which is"
+                               " much longer than the previous one, maybe even "
+                               "too long, but maybe not.");
+   elm_label_ellipsis_set(label2, EINA_TRUE);
+   evas_object_resize(label2, 200, 15);
+   evas_object_move(label2, 0, 15);
+   evas_object_show(label2);
+
+   label3 = elm_label_add(win);
+   elm_object_text_set(label3, "Some more long text much as before, long but "
+                               "not too long.");
+   elm_label_line_wrap_set(label3, ELM_WRAP_CHAR);
+   elm_label_ellipsis_set(label3, EINA_TRUE);
+   evas_object_resize(label3, 200, 15);
+   evas_object_move(label3, 0, 30);
+   evas_object_show(label3);
+
+   label4 = elm_label_add(win);
+   elm_object_text_set(label4, "And for this label we choose a different text, "
+                               "for no reason other than that we can.");
+   elm_label_line_wrap_set(label4, ELM_WRAP_CHAR);
+   evas_object_resize(label4, 200, 30);
+   evas_object_move(label4, 0, 45);
+   evas_object_show(label4);
+
+   label5 = elm_label_add(win);
+   elm_object_text_set(label5, "And for this label we choose a different text, "
+                               "for no reason other than that we can.");
+   elm_label_line_wrap_set(label5, ELM_WRAP_WORD);
+   evas_object_resize(label5, 200, 30);
+   evas_object_move(label5, 0, 75);
+   evas_object_show(label5);
+
+   label6 = elm_label_add(win);
+   elm_object_text_set(label6, "Short text");
+   elm_object_style_set(label6, "marker");
+   evas_object_color_set(label6, 255, 0, 0, 255);
+   evas_object_resize(label6, 200, 15);
+   evas_object_move(label6, 0, 105);
+   evas_object_show(label6);
+
+   evas_object_resize(win, 200, 125);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/layout_example.edc b/src/examples/layout_example.edc
new file mode 100644 (file)
index 0000000..f9348a9
--- /dev/null
@@ -0,0 +1,178 @@
+collections {
+
+   group {
+      name: "example/mylayout";
+
+      data {
+         item: "title" "Layout Example 01";
+      }
+
+      parts {
+         part {
+            name: "example/title";
+            type: TEXT;
+
+            description {
+               state: "default" 0.0;
+               color: 0 0 0 255;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 0.2;
+                  offset: -1 -1;
+               }
+               text {
+                  text: "bla";
+                  size: 16;
+                  font: "sans";
+                  min: 1 1;
+               }
+            }
+         }
+
+         part {
+            name: "example/custom";
+            type: SWALLOW;
+
+            description {
+               state: "default" 0.0;
+               fixed: 1 1;
+
+               rel1 {
+                  relative: 0.25 0.8;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 0.75 0.9;
+                  offset: -1 -1;
+               }
+            }
+         } // example/custom
+
+         part {
+            name: "example/box";
+            type: BOX;
+
+            description {
+               state: "default" 0.0;
+
+               box {
+                  layout: "horizontal_flow";
+                  padding: 2 2;
+                  align: 0.5 0.5;
+                  min: 1 1;
+               }
+               rel1 {
+                  relative: 0.0 0.2;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 0.5;
+                  offset: -1 -1;
+               }
+            }
+         } // example/box
+
+         part {
+            name: "example/table";
+            type: TABLE;
+
+            description {
+               state: "default" 0.0;
+
+               table {
+                  homogeneous: NONE;
+                  padding: 2 2;
+                  align: 0.5 0.5;
+                  min: 1 1;
+               }
+               rel1 {
+                  relative: 0.0 0.5;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 0.7;
+                  offset: -1 -1;
+               }
+            }
+         } // example/table
+      }
+   }
+
+   group {
+      name: "example/mylayout3";
+
+      data {
+         item: "title" "Layout Example 03";
+      }
+
+      parts {
+         part {
+            name: "example/title";
+            type: TEXT;
+
+               description {
+               state: "default" 0.0;
+               color: 0 0 0 255;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 0.2;
+                  offset: -1 -1;
+               }
+               text {
+                  text: "bla";
+                  size: 16;
+                  font: "sans";
+                  min: 1 1;
+               }
+            }
+         }
+
+         part {
+            name: "example/custom";
+            type: SWALLOW;
+
+            description {
+               state: "default" 0.0;
+               min: 160 50;
+               max: 160 50;
+               align: 0.5 1.0;
+            }
+            description {
+               state: "big" 0.0;
+               inherit: "default" 0.0;
+               min: 320 100;
+               max: 320 100;
+            }
+         } // example/custom
+
+         programs {
+            program {
+               name: "swallow,grow";
+               signal: "button,enlarge";
+               action: STATE_SET "big" 0.0;
+               transition: LINEAR 0.5;
+               target: "example/custom";
+               after: "emit,changed";
+            }
+            program {
+               name: "swallow,shrink";
+               signal: "button,reduce";
+               action: STATE_SET "default" 0.0;
+               transition: LINEAR 0.5;
+               target: "example/custom";
+               after: "emit,changed";
+            }
+            program {
+               name: "emit,changed";
+               action: SIGNAL_EMIT "size,changed" "";
+            }
+         }
+      }
+   }
+}
diff --git a/src/examples/layout_example_01.c b/src/examples/layout_example_01.c
new file mode 100644 (file)
index 0000000..ec8a971
--- /dev/null
@@ -0,0 +1,155 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` layout_example_01.c -o layout_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "."
+#endif
+
+#define TABLE "example/table"
+#define BOX "example/box"
+#define TITLE "example/title"
+#define SWALLOW "example/custom"
+
+static int _box_buttons = 0;
+
+static void
+_tbl_btn_cb(void *data, Evas_Object *btn, void *event_info __UNUSED__)
+{
+   Evas_Object *layout = data;
+
+   elm_layout_table_unpack(layout, TABLE, btn);
+   evas_object_del(btn);
+}
+
+static void
+_box_btn_cb(void *data, Evas_Object *btn, void *event_info __UNUSED__)
+{
+   Evas_Object *layout = data;
+   Evas_Object *item;
+   char buf[30];
+
+   snprintf(buf, sizeof(buf), "Button %02d", _box_buttons++);
+
+   item = elm_button_add(elm_object_parent_widget_get(layout));
+   elm_object_text_set(item, buf);
+   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, 100, 50);
+   elm_layout_box_insert_before(layout, BOX, item, btn);
+   evas_object_smart_callback_add(item, "clicked", _box_btn_cb, layout);
+   evas_object_show(item);
+}
+
+static void
+_swallow_btn_cb(void *data, Evas_Object *btn __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *layout = data;
+   Evas_Object *item;
+
+   elm_layout_table_clear(layout, TABLE, EINA_TRUE);
+   elm_layout_box_remove_all(layout, BOX, EINA_TRUE);
+   item = elm_object_content_part_unset(layout, SWALLOW);
+   evas_object_del(item);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *icon, *icon2, *bt, *bt2, *layout;
+   Evas_Object *clock;
+   Evas_Object *item;
+
+   win = elm_win_add(NULL, "layout", ELM_WIN_BASIC);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   // Adding layout and filling it with widgets
+   layout = elm_layout_add(win);
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, layout);
+   elm_layout_file_set(
+       layout, PACKAGE_DATA_DIR "/examples/layout_example.edj",
+       "example/mylayout");
+   evas_object_show(layout);
+
+   // Setting title
+   const char *title = elm_layout_data_get(layout, "title");
+   if (title)
+     {
+       elm_win_title_set(win, title);
+       elm_object_text_part_set(layout, TITLE, title);
+     }
+
+   // Add icon, clock and button to the table
+   icon = elm_icon_add(win);
+   elm_icon_standard_set(icon, "home");
+   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);
+   elm_layout_table_pack(layout, TABLE, icon, 0, 0, 1, 1);
+   evas_object_show(icon);
+
+   icon2 = elm_icon_add(win);
+   elm_icon_standard_set(icon2, "close");
+   evas_object_size_hint_weight_set(icon2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(icon2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_layout_table_pack(layout, TABLE, icon2, 1, 0, 1, 1);
+   evas_object_show(icon2);
+
+   clock = elm_clock_add(win);
+   evas_object_size_hint_weight_set(clock, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(clock, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_layout_table_pack(layout, TABLE, clock, 2, 0, 1, 1);
+   evas_object_show(clock);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Click me!");
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_layout_table_pack(layout, TABLE, bt, 0, 1, 3, 1);
+   evas_object_smart_callback_add(bt, "clicked", _tbl_btn_cb, layout);
+   evas_object_show(bt);
+
+   item = elm_button_add(win);
+   elm_object_text_set(item, "Position 0");
+   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, 100, 50);
+   elm_layout_box_insert_at(layout, BOX, item, 0);
+   evas_object_smart_callback_add(item, "clicked", _box_btn_cb, layout);
+   evas_object_show(item);
+
+   item = elm_button_add(win);
+   elm_object_text_set(item, "Prepended");
+   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, 100, 50);
+   elm_layout_box_prepend(layout, BOX, item);
+   evas_object_smart_callback_add(item, "clicked", _box_btn_cb, layout);
+   evas_object_show(item);
+
+   bt2 = elm_button_add(win);
+   elm_object_text_set(bt2, "Delete All");
+   elm_object_content_part_set(layout, SWALLOW, bt2);
+   evas_object_smart_callback_add(bt2, "clicked", _swallow_btn_cb, layout);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/layout_example_02.c b/src/examples/layout_example_02.c
new file mode 100644 (file)
index 0000000..81e24f0
--- /dev/null
@@ -0,0 +1,88 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` layout_example_02.c -o layout_example_02
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+#define TABLE "example/table"
+#define BOX "example/box"
+#define TITLE "example/title"
+#define SWALLOW "example/custom"
+
+static const char *images[] = { "home", "close", "arrow_up", "arrow_down", NULL };
+
+struct _App {
+     int current;
+};
+
+static void
+_signal_cb(void *data, Evas_Object *o, const char *emission, const char *source __UNUSED__)
+{
+   struct _App *app = data;
+   Evas_Object *icon = elm_object_content_part_get(o, "elm.swallow.content");
+
+   printf("signal received\n");
+
+   if (!strcmp("elm,action,back", emission))
+     app->current--;
+   else if (!strcmp("elm,action,next", emission))
+     app->current++;
+
+   if (app->current < 0)
+     app->current = sizeof(images) - 1;
+   else if (images[app->current] == NULL)
+     app->current = 0;
+
+   elm_icon_standard_set(icon, images[app->current]);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *layout, *icon;
+   struct _App app;
+
+   app.current = 0;
+
+   win = elm_win_add(NULL, "layout", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Layout");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   // Adding layout and filling it with widgets
+   layout = elm_layout_add(win);
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, layout);
+   elm_layout_theme_set(
+       layout, "layout", "application", "content-back-next");
+   evas_object_show(layout);
+
+   icon = elm_icon_add(win);
+   elm_icon_standard_set(icon, images[app.current]);
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_content_part_set(layout, "elm.swallow.content", icon);
+
+   elm_object_signal_callback_add(layout, "elm,action,back", "", _signal_cb, &app);
+   elm_object_signal_callback_add(layout, "elm,action,next", "", _signal_cb, &app);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/layout_example_03.c b/src/examples/layout_example_03.c
new file mode 100644 (file)
index 0000000..4bb52b5
--- /dev/null
@@ -0,0 +1,99 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` layout_example_03.c -o layout_example_03
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "."
+#endif
+
+#define TITLE "example/title"
+#define SWALLOW "example/custom"
+
+static Eina_Bool _btn_large = EINA_FALSE;
+
+static void
+_swallow_btn_cb(void *data, Evas_Object *btn, void *event_info __UNUSED__)
+{
+   Evas_Object *layout = data;
+
+   if (_btn_large == EINA_FALSE)
+     {
+       _btn_large = EINA_TRUE;
+       elm_object_signal_emit(layout, "button,enlarge", "");
+       elm_object_text_set(btn, "Reduce me!");
+     }
+   else
+     {
+       _btn_large = EINA_FALSE;
+       elm_object_signal_emit(layout, "button,reduce", "");
+       elm_object_text_set(btn, "Enlarge me!");
+     }
+}
+
+static void
+_size_changed_cb(void *data __UNUSED__, Evas_Object *layout, const char *emission __UNUSED__, const char *source __UNUSED__)
+{
+   Evas_Object *edje;
+   Evas_Coord w, h;
+
+   elm_layout_sizing_eval(layout);
+   edje = elm_layout_edje_get(layout);
+   edje_object_size_min_calc(edje, &w, &h);
+   printf("Minimum size for this theme: %dx%d\n", w, h);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *btn, *layout;
+
+   win = elm_win_add(NULL, "layout", ELM_WIN_BASIC);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   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);
+
+   // Adding layout
+   layout = elm_layout_add(win);
+   evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, layout);
+   elm_layout_file_set(
+       layout, PACKAGE_DATA_DIR "/examples/layout_example.edj",
+       "example/mylayout3");
+   evas_object_show(layout);
+
+   elm_object_signal_callback_add(layout, "size,changed", "", _size_changed_cb, layout);
+
+   // Setting title
+   const char *title = elm_layout_data_get(layout, "title");
+   if (title)
+     {
+       elm_win_title_set(win, title);
+       elm_object_text_part_set(layout, TITLE, title);
+     }
+
+   btn = elm_button_add(win);
+   elm_object_text_set(btn, "Enlarge me!");
+   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);
+   elm_object_content_part_set(layout, SWALLOW, btn);
+   evas_object_smart_callback_add(btn, "clicked", _swallow_btn_cb, layout);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 160, 160);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/list_example_01.c b/src/examples/list_example_01.c
new file mode 100644 (file)
index 0000000..300a745
--- /dev/null
@@ -0,0 +1,74 @@
+/**
+ * Simple Elementary's <b>list widget</b> example, illustrating its
+ * creation.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` list_example_01.c -o list_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *li;
+   unsigned int i;
+   static const char *lbl[] =
+   {
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+   };
+
+   win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
+   elm_win_title_set(win, "List Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   li = elm_list_add(win);
+   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, li);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_list_item_append(li, lbl[i], NULL, NULL, NULL, NULL);
+
+   evas_object_show(li);
+   elm_list_go(li);
+
+   evas_object_resize(win, 320, 240);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/list_example_02.c b/src/examples/list_example_02.c
new file mode 100644 (file)
index 0000000..b4e3588
--- /dev/null
@@ -0,0 +1,88 @@
+/**
+ * Elementary's <b>list widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` list_example_02.c -o list_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *li;
+   unsigned int i;
+   static const char *lbl[] =
+   {
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+   };
+
+   win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
+   elm_win_title_set(win, "List Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   /* default */
+   li = elm_list_add(win);
+   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, li);
+   for (i = 0; i < sizeof(lbl) / sizeof(lbl[0]); i++)
+     elm_list_item_append(li, lbl[i], NULL, NULL, NULL, NULL);
+
+   /* display horizontally and set compress mode */
+   elm_list_horizontal_set(li, EINA_TRUE);
+   elm_list_mode_set(li, ELM_LIST_COMPRESS);
+
+   /* enable multiple selection and always select */
+   elm_list_multi_select_set(li, EINA_TRUE);
+   elm_list_always_select_mode_set(li, EINA_TRUE);
+
+   /* set bounce and scroller policy */
+   elm_list_bounce_set(li, EINA_TRUE, EINA_TRUE);
+   elm_list_scroller_policy_set(li, ELM_SCROLLER_POLICY_AUTO,
+                                ELM_SCROLLER_POLICY_ON);
+
+   elm_list_go(li);
+   evas_object_show(li);
+
+   evas_object_resize(win, 320, 120);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/list_example_03.c b/src/examples/list_example_03.c
new file mode 100644 (file)
index 0000000..f4bfce7
--- /dev/null
@@ -0,0 +1,444 @@
+/**
+ * Elementary's <b>list widget</b> example, illustrating its API,
+ * covering most of item functions.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` list_example_03.c -o list_example_03
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static int counter = 3;
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_prepend_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *it;
+   Evas_Object *li = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_prepend(li, label, NULL, NULL, NULL, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_add_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *it;
+   Evas_Object *li = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_append(li, label, NULL, NULL, NULL, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_add_ic_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *it;
+   Evas_Object *ic, *li = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   ic = elm_icon_add(li);
+   elm_icon_standard_set(ic, "home");
+   elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);
+
+   it = elm_list_item_append(li, label, ic,  NULL, NULL, NULL);
+   if (!it)
+     printf("Error adding item with icon\n");
+}
+
+static void
+_sel_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Elm_List_Item *it = event_info;
+   printf("Selected label: %s\n", elm_list_item_label_get(it));
+}
+
+static void
+_add_func_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *it;
+   Evas_Object *li = data;
+   char label[32];
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_append(li, label, NULL, NULL, _sel_cb, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_sel_data_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   char *content = data;
+   Elm_List_Item *it = event_info;
+   printf("Selected label: %s with data: %s\n",
+          elm_list_item_label_get(it), content);
+}
+
+static void
+_free_data(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   free(data);
+}
+
+static void
+_add_data_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *it;
+   Evas_Object *li = data;
+   char label[32];
+   char *content = malloc(sizeof(char) * 32);
+
+   snprintf(content, 32, "Item content %i", counter);
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_append(li, label, NULL, NULL, _sel_data_cb, content);
+   if (!it) {
+     printf("Error adding item\n");
+     return;
+   }
+   elm_list_item_del_cb_set(it, _free_data);
+}
+
+static void
+_del_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   elm_list_item_del(selected_item);
+}
+
+static void
+_unselect_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   elm_list_item_selected_set(selected_item, EINA_FALSE);
+}
+
+static void
+_print_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   const Eina_List *l, *items;
+   Elm_List_Item *it;
+   Evas_Object *li = data;
+
+   items = elm_list_items_get(li);
+   EINA_LIST_FOREACH(items, l, it)
+      printf("%s\n", elm_list_item_label_get(it));
+}
+
+static void
+_clear_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *li = data;
+   elm_list_clear(li);
+}
+
+static void
+_select_next_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item, *next_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+
+   next_item = elm_list_item_next(selected_item);
+   if (next_item)
+     elm_list_item_selected_set(next_item, EINA_TRUE);
+}
+
+static void
+_insert_after_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item, *it;
+   Evas_Object *li = data;
+   char label[32];
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_insert_after(li, selected_item, label, NULL, NULL, NULL,
+                                   NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_select_prev_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item, *prev_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+
+   prev_item = elm_list_item_prev(selected_item);
+   if (prev_item)
+     elm_list_item_selected_set(prev_item, EINA_TRUE);
+}
+
+static void
+_insert_before_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item, *it;
+   Evas_Object *li = data;
+   char label[32];
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+
+   snprintf(label, sizeof(label), "Item %i", counter++);
+   it = elm_list_item_insert_before(li, selected_item, label, NULL, NULL,
+                                    NULL, NULL);
+   if (!it)
+     printf("Error adding item\n");
+}
+
+static void
+_set_separator_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+   elm_list_item_separator_set(selected_item, EINA_TRUE);
+}
+
+static void
+_disable_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_List_Item *selected_item;
+   Evas_Object *li = data;
+
+   selected_item = elm_list_selected_item_get(li);
+   if (!selected_item) return;
+   elm_list_item_disabled_set(selected_item, EINA_TRUE);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *hbx, *li, *bt;
+
+   win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
+   elm_win_title_set(win, "List Items Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   li = elm_list_add(win);
+   evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, li);
+
+   elm_list_item_append(li, "Item 0", NULL, NULL, NULL, NULL);
+   elm_list_item_append(li, "Item 1", NULL, NULL, NULL, NULL);
+   elm_list_item_append(li, "Item 2", NULL, NULL, NULL, NULL);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Prepend item");
+   evas_object_smart_callback_add(bt, "clicked", _prepend_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append item");
+   evas_object_smart_callback_add(bt, "clicked", _add_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with icon");
+   evas_object_smart_callback_add(bt, "clicked", _add_ic_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with selected function");
+   evas_object_smart_callback_add(bt, "clicked", _add_func_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Append with data");
+   evas_object_smart_callback_add(bt, "clicked", _add_data_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, hbx);
+   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(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Delete item");
+   evas_object_smart_callback_add(bt, "clicked", _del_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Unselect item");
+   evas_object_smart_callback_add(bt, "clicked", _unselect_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Print items");
+   evas_object_smart_callback_add(bt, "clicked", _print_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Clear");
+   evas_object_smart_callback_add(bt, "clicked", _clear_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, hbx);
+   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(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select next item");
+   evas_object_smart_callback_add(bt, "clicked", _select_next_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Insert after item");
+   evas_object_smart_callback_add(bt, "clicked", _insert_after_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Select previous item");
+   evas_object_smart_callback_add(bt, "clicked", _select_prev_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Insert before item");
+   evas_object_smart_callback_add(bt, "clicked", _insert_before_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Set as separator");
+   evas_object_smart_callback_add(bt, "clicked", _set_separator_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Disable item");
+   evas_object_smart_callback_add(bt, "clicked", _disable_cb, li);
+   elm_box_pack_end(hbx, bt);
+   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_list_go(li);
+   evas_object_show(li);
+
+   evas_object_resize(win, 320, 600);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/map_example_01.c b/src/examples/map_example_01.c
new file mode 100644 (file)
index 0000000..8fd5778
--- /dev/null
@@ -0,0 +1,131 @@
+/**
+ * Simple Elementary's <b>map widget</b> example, illustrating its
+ * creation.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` map_example_01.c -o map_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom + 1);
+}
+
+static void
+_bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom - 1);
+}
+
+static void
+_bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
+}
+
+static void
+_bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
+}
+
+static void
+_on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* FIXME: it shouldn't be required. For unknown reason map won't call
+ * pan_calculate until shot delay time, but then it will take a screenshot
+ * when the map isn't loaded yet (actually it won't be downloaded, because
+ * after the SS it will kill the example). */
+static Eina_Bool
+_nasty_hack(void *data)
+{
+   Evas_Object *o = data;
+   Evas *e = evas_object_evas_get(o);
+   evas_smart_objects_calculate(e);
+   return ECORE_CALLBACK_CANCEL;
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *map, *box, *bt;
+
+   win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Map Creation Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   map = elm_map_add(win);
+   elm_win_resize_object_add(win, map);
+   evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(map);
+
+   box = elm_box_add(win);
+   evas_object_show(box);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "+");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "-");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "X");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "#");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
+
+   elm_map_geo_region_show(map, -43.2, -22.9);
+   elm_map_zoom_set(map, 12);
+
+   evas_object_resize(win, 512, 512);
+   evas_object_show(win);
+
+   ecore_timer_add(0.5, _nasty_hack, win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/map_example_02.c b/src/examples/map_example_02.c
new file mode 100644 (file)
index 0000000..7557f20
--- /dev/null
@@ -0,0 +1,254 @@
+/**
+ * Simple Elementary's <b>map widget</b> example, illustrating markers
+ * usage.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` map_example_02.c -o map_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+typedef struct _Marker_Data
+{
+   const char *name;
+   const char *file;
+} Marker_Data;
+
+Marker_Data data_argentina = {"Argentina",
+     PACKAGE_DATA_DIR"/images/rock_01.jpg"};
+Marker_Data data_chile = {"Chile",
+     PACKAGE_DATA_DIR"/images/rock_02.jpg"};
+Marker_Data data_sampa = {"São Paulo",
+     PACKAGE_DATA_DIR"/images/sky_01.jpg"};
+Marker_Data data_rio = {"Rio de Janeiro",
+     PACKAGE_DATA_DIR"/images/sky_02.jpg"};
+Marker_Data data_brasilia = {"Brasília",
+     PACKAGE_DATA_DIR"/images/sky_03.jpg"};
+
+static Evas_Object *
+_marker_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data)
+{
+   Evas_Object *bx, *im, *lbl;
+   Marker_Data *md = data;
+
+   bx = elm_box_add(obj);
+   evas_object_show(bx);
+
+   im = elm_image_add(obj);
+   elm_image_file_set(im, md->file, NULL);
+   evas_object_size_hint_min_set(im, 64, 64);
+   evas_object_show(im);
+   elm_box_pack_end(bx, im);
+
+   lbl = elm_label_add(obj);
+   elm_object_text_set(lbl, md->name);
+   evas_object_show(lbl);
+   elm_box_pack_end(bx, lbl);
+
+   return bx;
+}
+
+static Evas_Object *
+_marker_city_content_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data __UNUSED__)
+{
+   Evas_Object *icon = elm_icon_add(obj);
+   elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_07.png", NULL);
+   evas_object_show(icon);
+
+   return icon;
+}
+
+static Evas_Object *
+_group_city_content_get(Evas_Object *obj, void *data __UNUSED__)
+{
+   Evas_Object *icon = elm_icon_add(obj);
+   elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_05.png", NULL);
+   evas_object_show(icon);
+   return icon;
+}
+
+static Evas_Object *
+_marker_country_content_get(Evas_Object *obj, Elm_Map_Marker *marker __UNUSED__, void *data __UNUSED__)
+{
+   Evas_Object *icon = elm_icon_add(obj);
+   elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_06.png", NULL);
+   evas_object_show(icon);
+   return icon;
+}
+
+static Evas_Object *
+_group_country_content_get(Evas_Object *obj, void *data __UNUSED__)
+{
+   Evas_Object *icon = elm_icon_add(obj);
+   elm_icon_file_set(icon, PACKAGE_DATA_DIR"/images/icon_04.png", NULL);
+   evas_object_show(icon);
+   return icon;
+}
+
+static void
+_map_downloaded(void *data __UNUSED__, Evas_Object *obj, void *ev __UNUSED__)
+{
+   elm_map_zoom_set(obj, 3);
+   evas_object_smart_callback_del(obj, "downloaded", _map_downloaded);
+}
+
+static void
+_bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom + 1);
+}
+
+static void
+_bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom - 1);
+}
+
+static void
+_bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
+}
+
+static void
+_bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
+}
+
+static void
+_on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* FIXME: it shouldn't be required. For unknown reason map won't call
+ * pan_calculate until shot delay time, but then it will take a screenshot
+ * when the map isn't loaded yet (actually it won't be downloaded, because
+ * after the SS it will kill the example). */
+static Eina_Bool
+_nasty_hack(void *data)
+{
+   Evas_Object *o = data;
+   Evas *e = evas_object_evas_get(o);
+   evas_smart_objects_calculate(e);
+   return ECORE_CALLBACK_CANCEL;
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *map, *box, *bt;
+   static Elm_Map_Marker_Class *mc_city, *mc_country;
+   static Elm_Map_Group_Class *gc_city, *gc_country;
+   Eina_List *markers = NULL;
+   Elm_Map_Marker *m;
+
+   win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Map Markers Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   map = elm_map_add(win);
+   elm_win_resize_object_add(win, map);
+   evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(map);
+
+   box = elm_box_add(win);
+   evas_object_show(box);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "+");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "-");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "X");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "#");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
+
+   mc_city = elm_map_marker_class_new(map);
+   elm_map_marker_class_get_cb_set(mc_city, _marker_get);
+   elm_map_marker_class_icon_cb_set(mc_city, _marker_city_content_get);
+   elm_map_marker_class_style_set(mc_city, "radio");
+
+   gc_city = elm_map_group_class_new(map);
+   elm_map_group_class_style_set(gc_city, "radio2");
+   elm_map_group_class_icon_cb_set(gc_city, _group_city_content_get);
+   elm_map_group_class_zoom_displayed_set(gc_city, 3);
+
+   mc_country = elm_map_marker_class_new(map);
+   elm_map_marker_class_get_cb_set(mc_country, _marker_get);
+   elm_map_marker_class_icon_cb_set(mc_country, _marker_country_content_get);
+   elm_map_marker_class_style_set(mc_country, "empty");
+
+   gc_country = elm_map_group_class_new(map);
+   elm_map_group_class_style_set(gc_country, "empty");
+   elm_map_group_class_icon_cb_set(gc_country, _group_country_content_get);
+   elm_map_group_class_zoom_displayed_set(gc_country, 1);
+
+   m = elm_map_marker_add(map, -43.2, -22.9, mc_city, gc_city, &data_rio);
+   markers = eina_list_append(markers, m);
+   m = elm_map_marker_add(map, -46.63, -23.55, mc_city, gc_city, &data_sampa);
+   markers = eina_list_append(markers, m);
+   m = elm_map_marker_add(map, -47.88, -15.78, mc_city, gc_city,
+                          &data_brasilia);
+   markers = eina_list_append(markers, m);
+
+   m = elm_map_marker_add(map, -65.23, -35.1, mc_country, gc_country,
+                      &data_argentina);
+   markers = eina_list_append(markers, m);
+   m = elm_map_marker_add(map, -71.3, -31.75, mc_country, gc_country,
+                      &data_chile);
+   markers = eina_list_append(markers, m);
+
+   elm_map_markers_list_show(markers);
+   evas_object_smart_callback_add(map, "downloaded", _map_downloaded, NULL);
+
+   evas_object_resize(win, 512, 512);
+   evas_object_show(win);
+
+   ecore_timer_add(1, _nasty_hack, win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/map_example_03.c b/src/examples/map_example_03.c
new file mode 100644 (file)
index 0000000..25f3b69
--- /dev/null
@@ -0,0 +1,206 @@
+/**
+ * Simple Elementary's <b>map widget</b> example, illustrating route and
+ * name usage.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` map_example_03.c -o map_example_03
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+typedef struct _Example_Data
+{
+   Evas_Object *map, *entry;
+   Elm_Map_Route *route;
+   double start_lon, start_lat, dest_lon, dest_lat;
+   Elm_Map_Name *name;
+} Example_Data;
+
+static Example_Data example_data;
+
+static void
+_name_loaded(void *data, Evas_Object *obj, void *ev __UNUSED__)
+{
+   Example_Data *example_data = data;
+   Evas_Object *map = obj;
+
+   if (example_data->route)
+     elm_map_route_remove(example_data->route);
+
+   elm_map_name_region_get(example_data->name, &(example_data->dest_lon),
+                           &(example_data->dest_lat));
+
+   example_data->route = elm_map_route_add(map, ELM_MAP_ROUTE_TYPE_FOOT,
+                     ELM_MAP_ROUTE_METHOD_SHORTEST,
+                     example_data->start_lon, example_data->start_lat,
+                     example_data->dest_lon, example_data->dest_lat);
+   elm_map_route_color_set(example_data->route, 0, 255, 0, 255);
+}
+
+static void
+_bt_route(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Example_Data *example_data = data;
+   Evas_Object *map;
+   char *address;
+
+   map = example_data->map;
+   address = (char *)elm_object_text_get(example_data->entry);
+
+   example_data->name = elm_map_utils_convert_name_into_coord(map, address);
+
+   evas_object_smart_callback_add(map, "name,loaded", _name_loaded, data);
+}
+
+static void
+_bt_zoom_in(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom + 1);
+}
+
+static void
+_bt_zoom_out(void *data, Evas_Object *obj __UNUSED__, void *ev __UNUSED__)
+{
+   Evas_Object *map = data;
+   int zoom;
+
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_MANUAL);
+   zoom = elm_map_zoom_get(map);
+   elm_map_zoom_set(map, zoom - 1);
+}
+
+static void
+_bt_zoom_fit(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FIT);
+}
+
+static void
+_bt_zoom_fill(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *map = data;
+   elm_map_zoom_mode_set(map, ELM_MAP_ZOOM_MODE_AUTO_FILL);
+}
+
+static void
+_on_done(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+/* FIXME: it shouldn't be required. For unknown reason map won't call
+ * pan_calculate until shot delay time, but then it will take a screenshot
+ * when the map isn't loaded yet (actually it won't be downloaded, because
+ * after the SS it will kill the example). */
+static Eina_Bool
+_nasty_hack(void *data)
+{
+   Evas_Object *o = data;
+   Evas *e = evas_object_evas_get(o);
+   evas_smart_objects_calculate(e);
+   return ECORE_CALLBACK_CANCEL;
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *map, *box, *bt, *entry;
+
+   win = elm_win_add(NULL, "map", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Map Route Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   map = elm_map_add(win);
+   elm_win_resize_object_add(win, map);
+   evas_object_size_hint_weight_set(map, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(map);
+
+   box = elm_box_add(win);
+   evas_object_show(box);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "+");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_in, map);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "-");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_out, map);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "X");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fit, map);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "#");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_zoom_fill, map);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+
+   elm_box_horizontal_set(box, EINA_TRUE);
+   elm_win_resize_object_add(win, box);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, 0);
+
+   entry = elm_entry_add(win);
+   elm_entry_scrollable_set(entry, EINA_TRUE);
+   elm_entry_single_line_set(entry, EINA_TRUE);
+   elm_object_text_set(entry, "Jockey Club Brasileiro");
+   evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0);
+   elm_box_pack_end(box, entry);
+   evas_object_show(entry);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Route");
+   elm_box_pack_end(box, bt);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _bt_route, &example_data);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, 0);
+
+   example_data.map = map;
+   example_data.entry = entry;
+   example_data.route = NULL;
+   example_data.start_lon = -43.175;
+   example_data.start_lat = -22.97;
+
+   elm_map_geo_region_show(map, example_data.start_lon, example_data.start_lat);
+   elm_map_zoom_set(map, 12);
+
+   evas_object_resize(win, 512, 512);
+   evas_object_show(win);
+
+   ecore_timer_add(0.5, _nasty_hack, win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/mapbuf_example.c b/src/examples/mapbuf_example.c
new file mode 100644 (file)
index 0000000..2684284
--- /dev/null
@@ -0,0 +1,127 @@
+/**
+ * Simple Elementary's <b>mapbuf widget</b> example, illustrating its API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` mapbuf_example.c -o mapbuf_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_enabled_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   Evas_Object *mb = data;
+   elm_mapbuf_enabled_set(mb, elm_toggle_state_get(obj));
+}
+
+static void
+_alpha_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   Evas_Object *mb = data;
+   elm_mapbuf_alpha_set(mb, elm_check_state_get(obj));
+}
+
+static void
+_smooth_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   Evas_Object *mb = data;
+   elm_mapbuf_smooth_set(mb, elm_check_state_get(obj));
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *hbx, *tg, *ck, *mb, *tb, *ic;
+   unsigned int i, j;
+
+   win = elm_win_add(NULL, "mapbuf", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Mapbuf Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   mb = elm_mapbuf_add(win);
+   evas_object_size_hint_weight_set(mb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(mb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, mb);
+
+   tb = elm_table_add(win);
+   evas_object_size_hint_weight_set(tb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(tb);
+
+   for (i = 0; i < 8; i++)
+     {
+        for (j = 0; j < 8; j++)
+          {
+             ic = elm_icon_add(win);
+             elm_icon_standard_set(ic, "home");
+             elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);
+             evas_object_show(ic);
+             elm_table_pack(tb, ic, i, j, 1, 1);
+          }
+     }
+
+   elm_object_content_set(mb, tb);
+   evas_object_show(mb);
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   tg = elm_toggle_add(win);
+   elm_object_text_set(tg, "Map");
+   elm_toggle_states_labels_set(tg, "Enabled", "Disabled");
+   evas_object_smart_callback_add(tg, "changed", _enabled_cb, mb);
+   elm_box_pack_end(hbx, tg);
+   evas_object_show(tg);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "Alpha");
+   elm_check_state_set(ck, EINA_TRUE);
+   evas_object_smart_callback_add(ck, "changed", _alpha_cb, mb);
+   elm_box_pack_end(hbx, ck);
+   evas_object_show(ck);
+
+   ck = elm_check_add(win);
+   elm_object_text_set(ck, "Smooth");
+   elm_check_state_set(ck, EINA_TRUE);
+   evas_object_smart_callback_add(ck, "changed", _smooth_cb, mb);
+   elm_box_pack_end(hbx, ck);
+   evas_object_show(ck);
+
+   evas_object_resize(win, 240, 320);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/menu_example_01.c b/src/examples/menu_example_01.c
new file mode 100644 (file)
index 0000000..2b920a4
--- /dev/null
@@ -0,0 +1,74 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` menu_example_01.c -o menu_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void
+_del_it(void *data, Evas_Object *obj, void *event_info)
+{
+   Eina_List *l;
+   Elm_Menu_Item *it = elm_menu_first_item_get(data);
+   it = elm_menu_item_next_get(it);
+   l = elm_menu_item_subitems_get(it);
+   elm_menu_item_del(eina_list_data_get(l));
+}
+
+static void
+_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+   Evas_Event_Mouse_Down *ev = event_info;
+   elm_menu_move(data, ev->canvas.x, ev->canvas.y);
+   evas_object_show(data);
+}
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *menu, *button, *rect;
+   Elm_Menu_Item *item;
+
+   win = elm_win_add(NULL, "menu", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Menu");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   elm_win_resize_object_add(win, rect);
+   evas_object_color_set(rect, 0, 0, 0, 0);
+   evas_object_show(rect);
+
+   menu = elm_menu_add(win);
+   elm_menu_item_add(menu, NULL, NULL, "first item", NULL, NULL);
+   item = elm_menu_item_add(menu, NULL, "mail-reply-all", "second item", NULL, NULL);
+
+   elm_menu_item_add(menu, item, "object-rotate-left", "menu 1", NULL, NULL);
+   button = elm_button_add(win);
+   elm_object_text_set(button, "button - delete items");
+   elm_menu_item_add_object(menu, item, button, NULL, NULL);
+   evas_object_smart_callback_add(button, "clicked", _del_it, menu);
+   elm_menu_item_separator_add(menu, item);
+   elm_menu_item_add(menu, item, NULL, "third item", NULL, NULL);
+   elm_menu_item_add(menu, item, NULL, "fourth item", NULL, NULL);
+   elm_menu_item_add(menu, item, "window-new", "sub menu", NULL, NULL);
+
+   item = elm_menu_item_add(menu, NULL, NULL, "third item", NULL, NULL);
+   elm_menu_item_disabled_set(item, EINA_TRUE);
+
+   evas_object_event_callback_add(rect, EVAS_CALLBACK_MOUSE_DOWN, _show, menu);
+   evas_object_show(menu);
+
+   evas_object_resize(win, 250, 350);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/notify_example_01.c b/src/examples/notify_example_01.c
new file mode 100644 (file)
index 0000000..c19119d
--- /dev/null
@@ -0,0 +1,80 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` notify_example_01.c -o notify_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _hide(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *notify, *content;
+
+   win = elm_win_add(NULL, "notify", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Notify");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_FALSE);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "default");
+   evas_object_show(content);
+
+   notify = elm_notify_add(win);
+   elm_notify_repeat_events_set(notify, EINA_FALSE);
+   elm_notify_timeout_set(notify, 5);
+   elm_object_content_set(notify, content);
+   evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(notify);
+   elm_box_pack_end(bx, notify);
+   evas_object_smart_callback_add(notify, "block,clicked", _hide, NULL);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "bottom");
+   evas_object_show(content);
+
+   notify = elm_notify_add(win);
+   elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
+   elm_object_content_set(notify, content);
+   evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(notify);
+   elm_box_pack_end(bx, notify);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "center");
+   evas_object_show(content);
+
+   notify = elm_notify_add(win);
+   elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_CENTER);
+   elm_object_content_set(notify, content);
+   evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(notify);
+   elm_box_pack_end(bx, notify);
+
+   evas_object_resize(win, 100, 200);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_hide(void *data, Evas_Object *obj, void *event_info)
+{
+   evas_object_hide(obj);
+}
diff --git a/src/examples/pager_example_01.c b/src/examples/pager_example_01.c
new file mode 100644 (file)
index 0000000..87b5fb2
--- /dev/null
@@ -0,0 +1,82 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` pager_example_01.c -o pager_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _promote(void *data, Evas_Object *obj, void *event_info);
+static Evas_Object *pager;
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *rect, *bt;
+
+   win = elm_win_add(NULL, "pager", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Pager");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   pager = elm_pager_add(win);
+   elm_object_style_set(pager, "fade");
+   evas_object_resize(pager, 180, 160);
+   evas_object_move(pager, 10, 10);
+   evas_object_show(pager);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 0, 255, 255);
+   evas_object_show(rect);
+   elm_pager_content_push(pager, rect);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "blue");
+   evas_object_resize(bt, 50, 20);
+   evas_object_move(bt, 10, 170);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _promote, rect);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 255, 0, 255);
+   evas_object_show(rect);
+   elm_pager_content_push(pager, rect);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "green");
+   evas_object_resize(bt, 60, 20);
+   evas_object_move(bt, 70, 170);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _promote, rect);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 255, 0, 0, 255);
+   evas_object_show(rect);
+   elm_pager_content_push(pager, rect);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "red");
+   evas_object_resize(bt, 50, 20);
+   evas_object_move(bt, 140, 170);
+   evas_object_show(bt);
+   evas_object_smart_callback_add(bt, "clicked", _promote, rect);
+
+   evas_object_resize(win, 200, 200);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_promote(void *data, Evas_Object *obj, void *event_info)
+{
+   if(elm_pager_content_top_get(pager) != data)
+      elm_pager_content_promote(pager, data);
+}
diff --git a/src/examples/panel_example_01.c b/src/examples/panel_example_01.c
new file mode 100644 (file)
index 0000000..8e848bf
--- /dev/null
@@ -0,0 +1,77 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` panel_example_01.c -o panel_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *panel, *content;
+
+   win = elm_win_add(NULL, "panel", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Panel");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_FALSE);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   panel = elm_panel_add(win);
+   elm_panel_orient_set(panel, ELM_PANEL_ORIENT_TOP);
+   elm_panel_toggle(panel);
+   evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(panel);
+   elm_box_pack_end(bx, panel);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "content");
+   evas_object_show(content);
+   evas_object_size_hint_min_set(content, 100, 30);
+   elm_object_content_set(panel, content);
+
+   panel = elm_panel_add(win);
+   elm_panel_orient_set(panel, ELM_PANEL_ORIENT_RIGHT);
+   elm_panel_hidden_set(panel, EINA_TRUE);
+   evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(panel);
+   elm_box_pack_end(bx, panel);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "content2");
+   evas_object_show(content);
+   evas_object_size_hint_min_set(content, 100, 30);
+   elm_object_content_set(panel, content);
+
+   panel = elm_panel_add(win);
+   evas_object_size_hint_weight_set(panel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(panel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(panel);
+   elm_box_pack_end(bx, panel);
+
+   content = elm_label_add(win);
+   elm_object_text_set(content, "content2");
+   evas_object_show(content);
+   evas_object_size_hint_min_set(content, 100, 30);
+   elm_object_content_set(panel, content);
+
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/panes_example.c b/src/examples/panes_example.c
new file mode 100644 (file)
index 0000000..354672b
--- /dev/null
@@ -0,0 +1,125 @@
+/**
+ * Simple Elementary's <b>panes widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` panes_example.c -o panes_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+        Evas_Object *obj __UNUSED__,
+        void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static double size = 0.0;
+
+static void
+_press(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+    printf("Pressed\n");
+}
+
+static void
+_unpress(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+    printf("Unpressed, size : %f\n", elm_panes_content_left_size_get(obj));
+}
+
+static void
+_clicked(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+    printf("Clicked\n");
+}
+
+static void
+_clicked_double(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   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);
+        printf("Double clicked, hidding.\n");
+     }
+   else
+     {
+        elm_panes_content_left_size_set(obj, size);
+        printf("Double clicked, restoring size.\n");
+     }
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *panes, *panes_h, *bt;
+
+   win = elm_win_add(NULL, "panes", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Panes Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
+   evas_object_show(bg);
+
+   panes = elm_panes_add(win);
+   elm_win_resize_object_add(win, panes);
+   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);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Left");
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+   elm_object_content_part_set(panes, ELM_PANES_CONTENT_LEFT, bt);
+
+   panes_h = elm_panes_add(win);
+   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);
+   elm_object_content_part_set(panes, ELM_PANES_CONTENT_RIGHT, panes_h);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Up");
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+   elm_object_content_part_set(panes_h, ELM_PANES_CONTENT_LEFT, bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Down");
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(bt);
+   elm_object_content_part_set(panes_h, ELM_PANES_CONTENT_RIGHT, bt);
+
+   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);
+
+   evas_object_resize(win, 320, 400);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/photocam_example_01.c b/src/examples/photocam_example_01.c
new file mode 100644 (file)
index 0000000..f3336f6
--- /dev/null
@@ -0,0 +1,93 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` -DPACKAGE_DATA_DIR="\"<directory>\"" photocam_example_01.c -o photocam_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _fit(void *data, Evas_Object *obj, void *event_info);
+static void _unfit(void *data, Evas_Object *obj, void *event_info);
+static void _zoom(void *data, Evas_Object *obj, void *event_info);
+static void _bring_in(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *obj, *photocam;
+
+   win = elm_win_add(NULL, "photocam", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Photocam");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   photocam = elm_photocam_add(win);
+   elm_photocam_file_set(photocam, PACKAGE_DATA_DIR"/images/insanely_huge_test_image.jpg");
+   elm_photocam_bounce_set(photocam, EINA_FALSE, EINA_TRUE);
+   evas_object_smart_callback_add(photocam, "loaded,detail", _bring_in, NULL);
+   evas_object_resize(photocam, 500, 400);
+   evas_object_show(photocam);
+
+   obj = elm_button_add(win);
+   elm_object_text_set(obj, "Fit");
+   evas_object_show(obj);
+   evas_object_resize(obj, 50, 30);
+   evas_object_move(obj, 10, 410);
+   evas_object_smart_callback_add(obj, "clicked", _fit, photocam);
+
+   obj = elm_button_add(win);
+   elm_object_text_set(obj, "Unfit");
+   evas_object_show(obj);
+   evas_object_resize(obj, 70, 30);
+   evas_object_move(obj, 70, 410);
+   evas_object_smart_callback_add(obj, "clicked", _unfit, photocam);
+
+   obj = elm_slider_add(win);
+   elm_object_text_set(obj, "Zoom");
+   evas_object_show(obj);
+   evas_object_resize(obj, 300, 30);
+   evas_object_move(obj, 150, 410);
+   evas_object_smart_callback_add(obj, "changed", _zoom, photocam);
+
+   evas_object_resize(win, 500, 440);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_bring_in(void *data, Evas_Object *obj, void *event_info)
+{
+   int w, h;
+   elm_photocam_image_size_get(obj, &w, &h);
+   elm_photocam_image_region_bring_in(obj, w/2, h/2, 500, 400);
+}
+
+static void
+_fit(void *data, Evas_Object *obj, void *event_info)
+{
+   int x, y, w, h;
+   elm_photocam_region_get(data, &x, &y, &w, &h);
+   printf("region: {%d, %d, %d, %d}\n", x, y, w, h);
+   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_AUTO_FIT);
+}
+
+static void
+_unfit(void *data, Evas_Object *obj, void *event_info)
+{
+   elm_photocam_zoom_mode_set(data, ELM_PHOTOCAM_ZOOM_MODE_MANUAL);
+}
+
+static void
+_zoom(void *data, Evas_Object *obj, void *event_info)
+{
+   double z = elm_slider_value_get(obj) * 8;
+   elm_photocam_zoom_set(data, z);
+}
diff --git a/src/examples/progressbar_example.c b/src/examples/progressbar_example.c
new file mode 100644 (file)
index 0000000..81f9216
--- /dev/null
@@ -0,0 +1,242 @@
+/**
+ * Simple Elementary's <b>progress bar widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` progressbar_example.c -o progressbar_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+typedef struct Progressbar_Example
+{
+   Evas_Object *pb1;
+   Evas_Object *pb2; /* pulsing */
+   Evas_Object *pb3;
+   Evas_Object *pb4;
+   Evas_Object *pb5; /* pulsing */
+   Evas_Object *pb6;
+   Evas_Object *pb7; /* pulsing */
+
+   Eina_Bool    run;
+   Ecore_Timer *timer;
+} Progressbar_Example;
+
+static Progressbar_Example example_data;
+
+static Eina_Bool
+_progressbar_example_value_set(void *data __UNUSED__)
+{
+   double progress;
+
+   progress = elm_progressbar_value_get(example_data.pb1);
+   if (progress < 1.0) progress += 0.0123;
+   else progress = 0.0;
+
+   /* just the non-pulsing ones need an update */
+   elm_progressbar_value_set(example_data.pb1, progress);
+   elm_progressbar_value_set(example_data.pb3, progress);
+   elm_progressbar_value_set(example_data.pb4, progress);
+   elm_progressbar_value_set(example_data.pb6, progress);
+
+   if (progress < 1.0) return ECORE_CALLBACK_RENEW;
+
+   example_data.run = 0;
+   return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_progressbar_example_start(void        *data __UNUSED__,
+                           Evas_Object *obj __UNUSED__,
+                           void        *event_info __UNUSED__)
+{
+   elm_progressbar_pulse(example_data.pb2, EINA_TRUE);
+   elm_progressbar_pulse(example_data.pb5, EINA_TRUE);
+   elm_progressbar_pulse(example_data.pb7, EINA_TRUE);
+
+   if (!example_data.run)
+     {
+        example_data.timer = ecore_timer_add(
+            0.1, _progressbar_example_value_set, NULL);
+        example_data.run = EINA_TRUE;
+     }
+}
+
+/* end of show */
+static void
+_progressbar_example_stop(void        *data __UNUSED__,
+                          Evas_Object *obj __UNUSED__,
+                          void        *event_info __UNUSED__)
+{
+   elm_progressbar_pulse(example_data.pb2, EINA_FALSE);
+   elm_progressbar_pulse(example_data.pb5, EINA_FALSE);
+   elm_progressbar_pulse(example_data.pb7, EINA_FALSE);
+
+   if (example_data.run)
+     {
+        ecore_timer_del(example_data.timer);
+        example_data.run = EINA_FALSE;
+     }
+}
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   _progressbar_example_stop(NULL, NULL, NULL);
+   elm_exit();
+}
+
+int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *pb, *bx, *hbx, *bt, *bt_bx, *ic1, *ic2;
+   char buf[PATH_MAX];
+
+   win = elm_win_add(NULL, "progressbar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Progress bar example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bx);
+
+   /* pb with no label, default unit label and no icon */
+   pb = elm_progressbar_add(win);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   elm_box_pack_end(bx, pb);
+   evas_object_show(pb);
+   example_data.pb1 = pb;
+
+   /* pb with label, and set to pulse */
+   pb = elm_progressbar_add(win);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_text_set(pb, "Infinite bounce");
+   elm_progressbar_pulse_set(pb, EINA_TRUE);
+   elm_box_pack_end(bx, pb);
+   evas_object_show(pb);
+   example_data.pb2 = pb;
+
+   ic1 = elm_icon_add(win);
+   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+   elm_icon_file_set(ic1, buf, NULL);
+   evas_object_size_hint_aspect_set(ic1, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+   /* pb with label, icon, custom unit label and span size set */
+   pb = elm_progressbar_add(win);
+   elm_object_text_set(pb, "Label");
+   elm_object_content_set(pb, ic1);
+   elm_progressbar_inverted_set(pb, EINA_TRUE);
+   elm_progressbar_unit_format_set(pb, "%1.1f units");
+   elm_progressbar_span_size_set(pb, 200);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, pb);
+   evas_object_show(ic1);
+   evas_object_show(pb);
+   example_data.pb3 = pb;
+
+   hbx = elm_box_add(win);
+   elm_box_horizontal_set(hbx, EINA_TRUE);
+   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bx, hbx);
+   evas_object_show(hbx);
+
+   /* vertical pb */
+   pb = elm_progressbar_add(win);
+   elm_progressbar_horizontal_set(pb, EINA_FALSE);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(hbx, pb);
+   elm_object_text_set(pb, "percent");
+   evas_object_show(pb);
+   example_data.pb4 = pb;
+
+   /* vertical pb, with pulse and custom (small) span size */
+   pb = elm_progressbar_add(win);
+   elm_progressbar_horizontal_set(pb, EINA_FALSE);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_progressbar_span_size_set(pb, 80);
+   elm_progressbar_pulse_set(pb, EINA_TRUE);
+   elm_progressbar_unit_format_set(pb, NULL);
+   elm_object_text_set(pb, "Infinite bounce");
+   elm_box_pack_end(hbx, pb);
+   evas_object_show(pb);
+   example_data.pb5 = pb;
+
+   ic2 = elm_icon_add(win);
+   elm_icon_file_set(ic2, buf, NULL);
+   evas_object_size_hint_aspect_set(ic2, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1);
+
+   /* vertical pb, inverted, with custom unit format and icon*/
+   pb = elm_progressbar_add(win);
+   elm_progressbar_horizontal_set(pb, EINA_FALSE);
+   elm_object_text_set(pb, "Label");
+   elm_object_content_set(pb, ic2);
+   elm_progressbar_inverted_set(pb, EINA_TRUE);
+   elm_progressbar_unit_format_set(pb, "%1.2f%%");
+   elm_progressbar_span_size_set(pb, 200);
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(hbx, pb);
+   evas_object_show(ic2);
+   evas_object_show(pb);
+   example_data.pb6 = pb;
+
+   /* "wheel" style progress bar */
+   pb = elm_progressbar_add(win);
+   elm_object_style_set(pb, "wheel");
+   elm_object_text_set(pb, "Style: wheel");
+   evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, pb);
+   evas_object_show(pb);
+   example_data.pb7 = pb;
+
+   bt_bx = elm_box_add(win);
+   elm_box_horizontal_set(bt_bx, EINA_TRUE);
+   evas_object_size_hint_weight_set(bt_bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, bt_bx);
+   evas_object_show(bt_bx);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Start");
+   evas_object_smart_callback_add(bt, "clicked", _progressbar_example_start,
+                                  NULL);
+   elm_box_pack_end(bt_bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Stop");
+   evas_object_smart_callback_add(bt, "clicked", _progressbar_example_stop,
+                                  NULL);
+   elm_box_pack_end(bt_bx, bt);
+   evas_object_show(bt);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/radio_example_01.c b/src/examples/radio_example_01.c
new file mode 100644 (file)
index 0000000..78fa010
--- /dev/null
@@ -0,0 +1,92 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` radio_example_01.c -o radio_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static int val = 1;
+
+static void _cb(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *radio, *group, *ic;
+
+   win = elm_win_add(NULL, "radio", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Radio");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   group = radio = elm_radio_add(win);
+   elm_object_text_set(radio, "Radio 1");
+   elm_radio_state_value_set(radio, 1);
+   elm_radio_value_pointer_set(radio, &val);
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "home");
+   elm_object_content_set(radio, ic);
+   elm_box_pack_end(bx, radio);
+   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_show(radio);
+   evas_object_smart_callback_add(radio, "changed", _cb, NULL);
+
+   radio = elm_radio_add(win);
+   elm_object_text_set(radio, "Radio 2");
+   elm_radio_state_value_set(radio, 2);
+   elm_radio_value_pointer_set(radio, &val);
+   elm_radio_group_add(radio, group);
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "file");
+   elm_object_content_set(radio, ic);
+   elm_box_pack_end(bx, radio);
+   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_show(radio);
+   evas_object_smart_callback_add(radio, "changed", _cb, NULL);
+
+   radio = elm_radio_add(win);
+   elm_object_text_set(radio, "Radio 3");
+   elm_radio_state_value_set(radio, 3);
+   elm_radio_value_pointer_set(radio, &val);
+   elm_radio_group_add(radio, group);
+   elm_box_pack_end(bx, radio);
+   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_show(radio);
+   evas_object_smart_callback_add(radio, "changed", _cb, NULL);
+
+   radio = elm_radio_add(win);
+   elm_object_text_set(radio, "Radio 4");
+   elm_radio_state_value_set(radio, 4);
+   elm_box_pack_end(bx, radio);
+   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_show(radio);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("val is now: %d\n", val);
+}
diff --git a/src/examples/scroller_example_01.c b/src/examples/scroller_example_01.c
new file mode 100644 (file)
index 0000000..3f31efe
--- /dev/null
@@ -0,0 +1,144 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` scroller_example_01.c -o scroller_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static const char *text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse bibendum, nibh eget vehicula tempus, libero dui aliquam dui, eget pellentesque nulla est id mi. Sed orci nisl, mattis vitae dignissim scelerisque, imperdiet vel arcu. Integer ut libero id massa commodo dignissim sed at orci. Quisque sollicitudin eleifend malesuada. Donec orci orci, mollis quis euismod vel, tincidunt nec ipsum. Sed ut nulla ligula, ut commodo tellus. Duis non felis in odio fringilla venenatis eget in metus. Mauris molestie ipsum tortor. Suspendisse potenti. Curabitur facilisis ultricies cursus. In euismod viverra risus sit amet pharetra. Sed mauris lorem, volutpat a vehicula quis, interdum nec erat. Suspendisse auctor bibendum fringilla. Curabitur tincidunt sem risus.\
+<br>\
+Vestibulum laoreet, leo ut sollicitudin viverra, odio enim tempor est, at ullamcorper augue massa sit amet lacus. Phasellus eget orci sit amet sem condimentum semper. Quisque imperdiet purus vitae lacus bibendum ultricies sollicitudin metus interdum. Phasellus aliquam sem vitae mi imperdiet eu cursus ipsum euismod. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam sed tellus non ligula commodo porta sagittis id augue. Vestibulum faucibus vehicula purus, sit amet porttitor ligula lacinia ac. Morbi ipsum libero, rhoncus id dapibus tincidunt, sagittis eget tellus. Proin vehicula accumsan velit cursus pharetra. Nullam pellentesque erat fringilla diam elementum fringilla. Nam lobortis ultricies suscipit. Pellentesque ut ipsum a nisi placerat rutrum id vitae justo. Fusce blandit ligula mollis est auctor scelerisque. Suspendisse luctus nibh vitae nibh congue rutrum. Nunc vulputate diam vel est lacinia a imperdiet purus scelerisque. Maecenas et nisl mauris. Aenean molestie dolor nec lacus laoreet ac dictum sem condimentum. Integer sit amet enim lorem, vitae tincidunt justo. Ut vulputate ullamcorper tortor, eu pharetra nulla aliquet in. Vestibulum ultrices sapien a ligula venenatis eu gravida lacus fermentum.\
+<br>\
+Etiam dignissim libero sed velit rhoncus ultricies. Aenean porta erat sit amet orci auctor auctor. Suspendisse aliquet arcu ut est ultrices ut venenatis dui scelerisque. Nulla vitae leo massa. Nullam scelerisque felis lectus, sed faucibus mi. Pellentesque hendrerit libero nec metus viverra lobortis. Nulla facilisi. Sed fermentum aliquet velit non imperdiet. Vestibulum nec ante imperdiet dolor convallis ornare sit amet interdum mi. In tellus lorem, lobortis vitae consectetur ac, mattis sed enim. Vivamus nibh enim, convallis sed rutrum sit amet, scelerisque ullamcorper ipsum. Mauris dignissim posuere sagittis. Fusce volutpat hendrerit augue ut dapibus. Aenean eu hendrerit lorem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;\
+<br>\
+Nullam orci eros, mattis at gravida sed, iaculis et dolor. Pellentesque sagittis sollicitudin malesuada. Sed tincidunt, sapien in mollis semper, quam enim gravida neque, eu blandit lacus ligula sit amet nisl. Aenean quam nulla, dapibus at venenatis vel, accumsan id dolor. Nam varius urna id nisi tempus ut dignissim nunc ultricies. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer lacus tortor, pellentesque auctor venenatis sed, laoreet eget erat. Nunc erat est, pharetra vestibulum luctus et, commodo eu quam. In hac habitasse platea dictumst. In hac habitasse platea dictumst. Nam posuere diam vel felis scelerisque iaculis. Maecenas laoreet ipsum ac orci tempus lobortis.\
+<br>\
+Sed id massa metus, lobortis porta ipsum. Nullam pellentesque augue sit amet neque hendrerit vehicula eu quis elit. In nec ante massa. Praesent at pulvinar tortor. In laoreet molestie lectus, ut interdum lorem lobortis vitae. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum ligula sem, interdum eget gravida in, fringilla in sem. Phasellus orci felis, semper rhoncus pharetra a, pellentesque egestas elit. Ut bibendum, est vel gravida tincidunt, enim massa consectetur arcu, vitae pretium sem erat ac nisi. Ut eget erat nisl, eget laoreet arcu. Vivamus risus ipsum, aliquam non ornare et, ornare vel libero. Cras vel ipsum ut magna sagittis interdum at id risus. Morbi justo nulla, volutpat at molestie vel, mollis vitae nisl. Curabitur non erat elit, eu vehicula turpis. Sed eget feugiat neque.\
+<br>\
+Nulla facilisi. Donec sit amet ante sed lacus adipiscing hendrerit. Vivamus enim nibh, mollis eget elementum vitae, congue non sapien. Maecenas interdum magna vel velit faucibus tempus. Nullam nec nunc risus, lobortis imperdiet magna. Suspendisse potenti. Duis fringilla sodales massa eget egestas. Ut tincidunt adipiscing ante, quis consequat mauris venenatis vitae. Suspendisse mattis sollicitudin accumsan. Duis varius ornare dui ac interdum. Sed molestie elit sit amet dolor varius vel congue nibh varius. Donec semper risus placerat dolor blandit tempus. Etiam id leo sit amet nulla gravida suscipit ut ut metus. Curabitur non elit sit amet sem dapibus interdum ut dictum nunc. Integer ultrices tincidunt faucibus. Nam mollis turpis vitae nulla pulvinar in sodales purus lobortis. Cras nisl lectus, tincidunt a suscipit id, sodales nec nulla. Nulla faucibus pretium feugiat. Nam ullamcorper, ante nec ullamcorper eleifend, nisl est dictum magna, ac rhoncus quam lacus eu neque.\
+<br>\
+Cras sodales eros eget ligula porttitor tincidunt. Vivamus ac justo non nulla placerat tempor. Quisque ullamcorper venenatis lacus id mollis. Fusce tempor dui ut justo pretium at volutpat velit malesuada. In tellus diam, mattis sit amet viverra eu, porta sit amet metus. Pellentesque ante risus, dictum a rhoncus ut, hendrerit sed nisi. Donec congue dolor eu orci imperdiet id vulputate nulla eleifend. In vel risus urna, sit amet laoreet augue. Donec fringilla massa nec augue scelerisque eget fermentum augue mollis. Maecenas eu eros nulla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam lobortis, dui id sagittis vestibulum, magna ipsum venenatis sem, vel dapibus leo enim a elit.\
+<br>\
+Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin lectus felis, aliquet id euismod ac, vestibulum vel leo. Donec venenatis, nunc ornare dictum aliquet, dui purus ullamcorper massa, nec vehicula odio orci nec tortor. Cras sapien ante, laoreet ut placerat nec, mattis in velit. In hac habitasse platea dictumst. Vivamus viverra consectetur augue lobortis dignissim. Ut est nibh, varius at fringilla vitae, viverra at massa. Vivamus mattis bibendum lacus, at dignissim sapien auctor ac. Donec quis mauris lacus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Phasellus vel turpis quis ipsum mattis congue. Integer gravida semper eros vitae tempus. Maecenas volutpat mi vitae purus feugiat volutpat. Praesent ut diam lorem. Maecenas ultrices, felis a vestibulum auctor, neque dui tristique enim, id mollis nunc arcu eget dui. Sed rhoncus, ligula non elementum aliquet, ligula nisi lacinia sapien, sed mattis ipsum nibh et felis.\
+<br>\
+Nam libero diam, aliquam vel pharetra eu, fringilla sit amet lacus. Nullam varius eros vitae arcu porta ut accumsan massa ultrices. Donec at convallis magna. Proin sit amet dolor et enim fermentum blandit. In urna ligula, molestie lobortis varius eget, aliquam id justo. Maecenas ac viverra lacus. Quisque eros nisl, varius a sollicitudin at, auctor sit amet ligula. Nam in erat non leo volutpat pulvinar. Nulla quis turpis sit amet augue pharetra placerat non vel nunc. In at justo felis, ultrices congue lacus. Etiam sed est velit. Sed elementum, justo sit amet placerat porttitor, elit urna consectetur neque, eget scelerisque dui nisi quis magna. Donec condimentum sollicitudin augue eu volutpat. Etiam vel tempus mauris. Donec et leo eu nisl tempus malesuada sit amet in massa.\
+<br>\
+In in nulla eu justo venenatis hendrerit a ac ante. Mauris sollicitudin metus at eros volutpat eu tincidunt justo pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse potenti. Nunc purus velit, ornare sit amet pretium eu, congue tincidunt nunc. Maecenas sollicitudin augue sed magna tempor non rhoncus lorem pulvinar. Mauris scelerisque fringilla accumsan. Aliquam et ligula nec lectus dapibus hendrerit. Etiam cursus metus eget odio consectetur sit amet egestas turpis pulvinar. Aenean nec risus vel ante condimentum condimentum. Quisque convallis nunc porta mauris vulputate imperdiet. Etiam varius, nunc sit amet hendrerit convallis, est purus cursus libero, et varius eros leo eget est. Vestibulum a augue nulla, a convallis lacus. Mauris gravida metus ac enim mattis tempor. Etiam accumsan tempor mattis. Fusce dignissim urna at leo pellentesque a blandit nisl faucibus. Fusce consequat auctor nisi ut sodales. Etiam imperdiet velit quis magna consequat placerat. Sed nisl purus, condimentum ac adipiscing vitae, consectetur placerat neque. Morbi molestie sapien sed ante sagittis ullamcorper vel sed erat.\
+<br>\
+Nunc at risus nec dui viverra imperdiet vitae quis velit. Mauris ornare consectetur lorem, vel blandit risus lacinia vitae. Integer gravida, neque porta malesuada malesuada, leo urna egestas urna, at elementum ligula ipsum non diam. Maecenas lobortis, est eget interdum eleifend, tellus leo suscipit orci, sed fringilla eros nisl at erat. Proin bibendum dictum varius. Sed lectus leo, feugiat quis sollicitudin sit amet, egestas quis lacus. Donec vel est nec leo porttitor sagittis non quis lectus. Nunc in ullamcorper urna. Mauris sit amet porttitor dolor. Praesent eu dui nisi, quis aliquet tortor.\
+<br>\
+Duis auctor ornare nibh, non mollis augue cursus vitae. Suspendisse accumsan commodo felis, vitae convallis eros volutpat a. Fusce tincidunt, purus laoreet bibendum dignissim, justo felis iaculis velit, ac feugiat tortor turpis non velit. Integer tristique ultricies dolor, at condimentum nunc rutrum vel. Nam a velit nisl, quis hendrerit erat. Nulla sit amet metus pellentesque nulla consectetur venenatis. Nunc auctor, dolor eu ultricies adipiscing, augue dui sollicitudin arcu, ut dictum nisi felis ac leo. Donec tempor erat at nisi aliquam pulvinar. Etiam rutrum massa vitae libero gravida ac ornare justo molestie. Pellentesque non nisl varius nisl laoreet convallis sed porta sem. Donec rhoncus sapien tempus ligula placerat interdum.\
+<br>\
+Donec varius posuere lorem, a fermentum est molestie eu. Maecenas metus ligula, faucibus ac pharetra vel, accumsan quis mauris. Nulla ultrices, nunc ut tincidunt suscipit, elit dolor bibendum ante, at gravida nisl mi dictum purus. Integer vulputate facilisis nisi, quis porttitor mi iaculis sed. Aenean semper facilisis quam, ut dictum mauris vehicula sed. Sed non sem quis magna ornare egestas ut quis velit. Suspendisse ut quam est, euismod facilisis magna. Etiam mattis pulvinar augue, eget tristique purus porttitor non. Sed egestas dui ac odio auctor convallis. Sed posuere ornare iaculis. Aenean ac nulla ipsum, molestie facilisis eros. Phasellus tincidunt nunc diam. Aliquam malesuada, velit et tincidunt interdum, dolor mi hendrerit velit, quis facilisis ligula dui ac elit. In viverra pretium enim vel tempus.\
+<br>\
+Morbi at adipiscing nisi. Fusce vel turpis vel libero commodo mollis id iaculis urna. Nullam et elit non lectus egestas semper. Curabitur sodales turpis sit amet metus fringilla quis fermentum orci lacinia. Aenean lacinia feugiat hendrerit. Vivamus nec nisi nec neque lacinia rhoncus ut id erat. Suspendisse luctus tortor sed arcu interdum sit amet aliquet neque vehicula. Curabitur eget nunc vitae libero vulputate dictum. Etiam volutpat fermentum felis fringilla euismod. In scelerisque gravida dolor id molestie. Nam faucibus sapien id neque vehicula semper. Nulla egestas urna vitae sem scelerisque rhoncus. In hac habitasse platea dictumst. Nulla vitae lacus in diam aliquet sollicitudin vel nec leo. Sed ornare pellentesque nibh, a malesuada erat imperdiet et.\
+<br>\
+Maecenas adipiscing diam a urna interdum pharetra. Phasellus vitae turpis urna, ac consectetur sem. Sed porttitor nulla in nulla mattis tincidunt non eu lacus. Aliquam quis metus turpis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque at sapien quis purus bibendum lobortis. Donec in tincidunt nisl. Phasellus interdum tellus non leo aliquet ut vulputate nisl aliquam. Aliquam faucibus lorem ut lorem convallis non lobortis felis consequat. Phasellus nec leo ac turpis egestas laoreet. Cras venenatis odio et diam faucibus pellentesque. Quisque eu orci magna, quis lacinia tellus.\
+<br>\
+Aliquam nisl purus, aliquam quis tristique nec, varius eget risus. Nam sed ipsum leo. Proin congue sapien quis libero porta ornare. Mauris vel orci odio. Nam nec felis nibh, non congue odio. Duis vel mattis enim. Maecenas at dui eget ipsum pharetra consequat ac in massa. Proin fringilla arcu non enim feugiat accumsan. Proin tincidunt ligula mattis risus hendrerit in scelerisque risus aliquam. Vivamus libero sapien, ornare ut fringilla ullamcorper, sodales mattis purus. Quisque mauris sem, fermentum vitae adipiscing non, ultricies id mauris. Donec tincidunt, odio vel luctus hendrerit, dui mauris posuere erat, at interdum arcu nunc tincidunt dui. Pellentesque diam orci, malesuada a pellentesque nec, rhoncus at tellus.\
+<br>\
+Morbi in lacus nunc. Proin congue nisi at nunc gravida imperdiet. Duis et elementum arcu. Cras pretium, tortor in ultrices pharetra, sem ante condimentum elit, at dapibus augue lectus ac est. Pellentesque gravida rutrum pulvinar. Nulla nunc odio, dictum id tempus sit amet, faucibus volutpat nunc. Vestibulum ut ultricies tellus. Donec eget tortor metus, pellentesque placerat eros. Suspendisse ut lacus ipsum, sed fermentum est. Sed interdum ornare augue, sit amet bibendum ligula molestie eget. Aenean ac elit diam, eget ultricies nunc. Nullam quis nibh vitae diam pellentesque viverra. Aliquam ultricies elementum enim tristique malesuada. Vivamus rhoncus faucibus nunc, a pharetra enim sollicitudin ac. Suspendisse ultricies sodales metus vel rhoncus. Integer feugiat euismod molestie. Phasellus iaculis magna imperdiet erat consequat et pretium orci tincidunt.\
+<br>\
+Morbi tristique cursus consequat. Morbi posuere lacinia odio quis auctor. Nulla dui nisi, tincidunt condimentum aliquam sed, adipiscing cursus sem. Nullam eleifend lacus tempor nisl semper quis cursus velit vehicula. Morbi aliquam, sem at sollicitudin laoreet, nibh erat congue nisi, a pulvinar nulla orci vulputate orci. Morbi eu orci enim, quis aliquam ante. Nam ultricies laoreet varius. Proin vehicula sem vitae dolor ullamcorper et rhoncus lacus cursus. Nullam sit amet mauris sapien, vitae condimentum justo. Cras eu arcu magna. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus vulputate erat ac diam sagittis dignissim non nec tellus. Vivamus tristique quam vel velit mollis in congue nulla malesuada. Phasellus hendrerit egestas urna vitae egestas. Morbi vitae enim magna. Proin quam tellus, tincidunt ut mollis ut, semper a mi. Vivamus nec pharetra purus. Aenean at lorem mauris, sed facilisis quam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.\
+<br>\
+Cras tempor, enim in ullamcorper dignissim, elit eros sodales augue, vel molestie velit tellus sed risus. Suspendisse fermentum, augue id facilisis hendrerit, magna dolor euismod lectus, gravida consequat neque turpis lacinia nisi. Etiam id mi nulla, nec ultrices leo. Aliquam et mi tortor. Duis ullamcorper enim a tellus gravida ornare. Sed interdum, felis eu consequat sagittis, lectus neque ultricies velit, eget egestas ligula quam et mauris. Nunc eu quam enim. Duis tempus, arcu at tristique tristique, justo est gravida orci, vitae hendrerit risus tellus eu urna. Nunc vitae nunc vitae augue malesuada viverra. Etiam nec diam sit amet augue commodo pharetra. Fusce lectus urna, aliquam eget rhoncus tempor, ultrices et lacus.\
+<br>\
+Phasellus tincidunt, diam et ultricies ornare, ante tortor pretium elit, vitae viverra urna ipsum vel ipsum. Duis semper magna ac mauris rutrum facilisis. Suspendisse mi velit, auctor at rutrum sit amet, lacinia at orci. Phasellus diam magna, vulputate ac accumsan non, ultricies et lorem. Etiam nisi purus, tempor vel aliquet in, egestas sit amet massa. Quisque auctor, dui quis aliquet condimentum, ligula urna rhoncus mi, non vehicula velit sapien eu libero. Nam et elit elit, nec semper enim. Sed quis nulla ut ipsum consequat placerat. Nullam eros risus, congue et tincidunt et, ornare ac nibh. Aliquam vitae neque ac orci tincidunt pharetra. Quisque ac augue iaculis nisi lacinia laoreet. Etiam dolor magna, convallis eu bibendum vel, pellentesque non mi. Etiam eget nibh in metus venenatis hendrerit sit amet ac ligula. Nullam laoreet lobortis fringilla.\
+<br>\
+Donec non nunc sit amet sem consectetur sodales. Donec nisi ipsum, imperdiet sed commodo nec, placerat ac eros. Sed ac orci sit amet nisl molestie vestibulum. Nam sollicitudin mauris ac eros consequat iaculis. Nam aliquet lobortis ligula, at tempor libero hendrerit id. Vivamus at nisl eget sem dapibus dapibus quis at enim. Nam eget nisi urna. Nam ultrices, nibh ac vehicula dapibus, ante odio vestibulum ante, ut volutpat orci lectus in mi. Aliquam venenatis fermentum condimentum. Aliquam ac lacus elementum nisl molestie auctor ullamcorper sed orci. Nullam tristique metus sit amet purus commodo vulputate. Ut ante turpis, congue non lobortis non, vehicula non diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lobortis magna ac est facilisis in congue orci semper. Etiam et lacus eget elit viverra dictum eu ut neque. Vestibulum diam erat, posuere ut sagittis at, ultrices sed turpis. Cras justo risus, tempus eu facilisis vel, tempus scelerisque est. Vestibulum sagittis mauris ac turpis malesuada tincidunt. Proin et eros eget augue pellentesque tristique non in justo. Integer in leo sit amet lectus convallis rhoncus vitae eu quam.\
+<br>\
+Nulla eleifend hendrerit sem, vel feugiat mauris pellentesque vel. Vivamus ut lectus enim. Vestibulum nulla lacus, vestibulum et viverra sed, malesuada vitae urna. Integer consectetur, ante eget cursus tristique, lectus felis dignissim ipsum, non mollis arcu dui eu lacus. Integer sed ante ut magna euismod molestie sit amet ut leo. Quisque nec leo dui. Nunc sit amet ligula mi. Etiam sagittis scelerisque neque, ac lobortis lacus feugiat pellentesque. Donec ultricies est vel est tempus non volutpat turpis feugiat. Suspendisse potenti. Vestibulum et velit vitae nisi eleifend tincidunt quis eu odio. Nunc a massa arcu, ut ultrices sem. In eu tempor enim. Praesent aliquam arcu eleifend metus accumsan non pharetra dui ornare. Cras lorem leo, scelerisque sed suscipit at, semper porta magna. Vestibulum pellentesque, erat congue euismod fermentum, mauris purus blandit ligula, at luctus nisl magna in metus. Sed pulvinar, ipsum eget hendrerit egestas, lacus odio posuere tortor, in euismod libero purus id orci. In hac habitasse platea dictumst. Curabitur feugiat semper varius. Aliquam mauris metus, rhoncus in rhoncus non, blandit eget magna.\
+<br>\
+Cras sapien odio, facilisis id accumsan ut, laoreet sit amet felis. Duis et velit sed tellus volutpat porttitor. Praesent sagittis hendrerit sapien sit amet scelerisque. Vivamus vitae justo at mi venenatis cursus. Nulla est purus, lobortis vel rutrum vel, aliquam in ligula. Sed tortor mauris, pulvinar eget luctus id, faucibus at justo. Phasellus massa quam, tincidunt vel condimentum a, varius vitae tortor. Cras gravida ullamcorper mauris, vel condimentum neque sollicitudin sit amet. Nullam quis justo elit, facilisis dapibus orci. Ut ullamcorper, velit a fermentum elementum, erat erat posuere lacus, egestas iaculis nulla ante eget nibh. Nam ullamcorper leo at diam consectetur molestie. Suspendisse porttitor, eros ac euismod vulputate, tortor libero tempor urna, non pharetra nisl nunc quis sapien. Mauris commodo venenatis risus, eu commodo neque ultricies adipiscing. Nullam ac nunc tortor. Sed consectetur placerat luctus. Curabitur non risus lacus, tristique fermentum quam. Pellentesque viverra, nulla in imperdiet accumsan, eros erat ultrices enim, at adipiscing massa sapien vitae elit. Praesent libero tellus, pharetra et placerat sed, facilisis ut mauris. Phasellus nisl justo, consectetur quis eleifend eget, pulvinar eget erat.\
+<br>\
+Integer placerat tellus vitae leo luctus ac cursus velit varius. Fusce pulvinar iaculis purus, placerat blandit est imperdiet sit amet. Nulla tincidunt pellentesque tortor ac consequat. Morbi hendrerit, elit non sollicitudin lobortis, massa nunc rhoncus eros, vel egestas felis dolor non nunc. Praesent vel sagittis elit. Mauris pretium leo molestie purus ornare at volutpat risus suscipit. Integer quis orci et magna dapibus gravida. Maecenas metus est, egestas eu interdum nec, suscipit et turpis. Pellentesque eu sagittis ligula. Aenean interdum sem purus. Maecenas interdum nibh aliquam libero aliquam laoreet. Morbi mollis, ligula id vehicula malesuada, velit ipsum euismod nisi, quis mattis turpis neque eu odio. Praesent ultrices vestibulum nisl, non eleifend dui convallis vitae. Pellentesque id sem enim. Morbi eu turpis massa, non fringilla erat. Mauris at metus ut urna luctus rutrum vel in lorem. Donec vel facilisis nisi.\
+<br>\
+Phasellus sed facilisis mi. Suspendisse mollis sapien vitae lectus tincidunt a molestie nisl feugiat. Etiam sagittis lectus ut risus tempus consectetur. Phasellus non dolor massa, ac consequat mauris. In suscipit, purus sed pretium lacinia, odio tortor vestibulum leo, ac facilisis libero est eget neque. Nullam vel sem sem, vel egestas purus. Etiam tempus sem sit amet purus tempus hendrerit. Sed bibendum lacinia dapibus. In magna ipsum, molestie id mattis ut, posuere semper velit. Fusce ut lectus felis. Vivamus sagittis aliquam leo, ut facilisis tortor iaculis vel. Praesent egestas placerat est, ut congue justo vestibulum sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut id pellentesque nisi. Fusce bibendum urna eget leo porttitor tincidunt. Nunc blandit condimentum hendrerit. Nullam placerat, risus sed condimentum rhoncus, nisl neque imperdiet metus, condimentum lacinia ipsum elit non felis. Donec sit amet felis et diam adipiscing mattis.\
+<br>\
+Nulla et nisi ante. Duis ac nisi ut nibh mattis fringilla. Duis sapien lectus, consequat ut feugiat a, feugiat ut nisi. Aenean enim leo, gravida non bibendum id, vulputate eu magna. Suspendisse sed tortor faucibus eros sollicitudin fermentum. Ut cursus tellus ut dolor fermentum et iaculis mauris egestas. Donec sit amet massa leo, eget dignissim ante. Nam dignissim massa a risus lacinia at varius ligula tempus. Vivamus dignissim sem in enim consectetur sagittis. Aenean aliquam hendrerit urna eu aliquet. Donec luctus suscipit odio, ut accumsan neque suscipit vitae. Integer hendrerit facilisis orci feugiat commodo. Praesent vestibulum orci et turpis vehicula vulputate. Sed in purus sit amet tortor sagittis lacinia. Nam nibh justo, rhoncus et ultrices non, venenatis nec ligula. Suspendisse eget lacus sapien, et consequat erat. Ut auctor condimentum magna, ac condimentum magna laoreet volutpat. Sed urna urna, ultricies eget venenatis nec, adipiscing nec tellus.\
+<br>\
+Praesent viverra dui eget nisl lobortis in malesuada nunc sollicitudin. Aenean bibendum scelerisque metus ac facilisis. Donec est neque, egestas eu aliquet commodo, dictum eu metus. Quisque vel purus in sapien tristique euismod vitae nec eros. Aliquam tincidunt viverra odio. Aenean euismod lectus rutrum eros tempus ut lacinia eros pharetra. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras at sapien augue. Sed posuere, dolor nec ullamcorper venenatis, est est pulvinar urna, vel placerat nulla ligula sed eros. Pellentesque nec enim magna. Ut pharetra quam a lectus dapibus eu tristique ante porta. Aliquam vel augue eu risus mollis blandit sit amet vel arcu. Donec lobortis lacinia magna nec aliquet. Suspendisse fermentum magna eget est posuere nec pellentesque enim accumsan.\
+<br>\
+Vivamus commodo urna sit amet enim iaculis vel accumsan odio interdum. Etiam est lectus, fringilla in fermentum nec, imperdiet sit amet sapien. Suspendisse vitae lacus vel elit convallis iaculis non eu tellus. In nec dolor diam. Mauris sed tortor id ligula vestibulum mollis sit amet a neque. In hac habitasse platea dictumst. Donec a velit vel nunc ornare euismod sit amet vitae risus. Sed ultrices semper nibh, quis gravida magna dapibus ac. Fusce ut ligula velit. Aenean non mollis augue. Proin ut ligula nisi. Duis nec consequat dui. Praesent vel mauris orci. Nullam est nunc, ultrices ultricies suscipit et, adipiscing in augue. Sed porttitor mi in nunc euismod tincidunt.\
+<br>\
+Quisque laoreet congue augue quis cursus. Donec sed nisl odio. Etiam rhoncus fermentum lacus, quis pharetra urna semper vitae. Quisque non nisi at nunc volutpat porttitor. Donec ligula massa, suscipit non facilisis vitae, lacinia sit amet lacus. Fusce vel turpis orci. Etiam quis ligula eu nibh tincidunt posuere. Mauris sit amet quam leo, porta interdum diam. Nullam purus metus, facilisis quis ullamcorper vitae, mattis ultrices ante. Sed tincidunt lorem aliquet magna ultrices eleifend. In non nisi orci. In imperdiet, tellus eget fringilla elementum, lorem magna faucibus libero, id placerat turpis enim eget erat. Ut eros justo, ullamcorper ut sagittis eu, condimentum in arcu. Proin vel nisi ligula, vitae hendrerit purus. Vestibulum dignissim pulvinar consectetur. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Suspendisse ac eros risus.\
+<br>\
+Cras at massa quam. Cras eget dolor tortor. Mauris non nisl sapien. Maecenas dictum tincidunt erat nec tincidunt. Maecenas vestibulum lobortis varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin adipiscing tincidunt mauris quis fringilla. Maecenas sit amet ligula vitae neque tincidunt pulvinar quis id orci. Pellentesque sagittis tellus eget leo dapibus tempor. Duis eu diam non justo tincidunt gravida. Cras eros dolor, sodales eget elementum et, adipiscing in enim. Suspendisse at elit elit, id dignissim nisl. Donec imperdiet, quam vitae mattis hendrerit, leo arcu sagittis massa, a placerat urna sapien viverra tortor. Integer auctor, felis non condimentum ultrices, lectus ligula vestibulum eros, non pharetra libero purus eu purus. Duis ornare lacinia erat vitae sagittis. Sed fringilla volutpat magna, id auctor nisi elementum ut. Nulla facilisi. Quisque ut quam elit, ac consequat ligula.\
+<br>\
+Etiam fringilla lobortis mauris, in ullamcorper elit vestibulum eu. Ut dolor nisi, egestas vel consequat sit amet, faucibus vel nulla. Etiam vitae nibh ut dui imperdiet accumsan vel quis arcu. Suspendisse potenti. Ut vitae tellus risus, eu imperdiet eros. Nam vitae lacus a leo pulvinar feugiat. Donec augue mauris, suscipit porta euismod at, viverra vel magna. Cras luctus viverra neque, sit amet venenatis mi consequat id. Nulla consequat consequat nunc, eget mattis nisl tempor id. Praesent mattis sagittis tortor sed feugiat. Nunc vitae nisl est, a feugiat orci. Fusce in ipsum mauris. Etiam mattis sollicitudin nisi eu imperdiet. Duis in laoreet libero. Aenean eleifend est sit amet purus ultricies pretium. Morbi id nisl ut purus tempus sollicitudin quis non tellus. Donec sed quam ac nisl cursus euismod eu euismod eros.\
+<br>\
+Suspendisse mattis elementum sapien. Aliquam erat volutpat. Sed a tortor vitae nisi ornare vehicula. Praesent id faucibus sem. Mauris luctus ornare ipsum, id euismod lorem fermentum id. Maecenas egestas, mi sit amet porta facilisis, erat elit pretium nunc, ut mollis ipsum metus iaculis ligula. Duis semper ligula rhoncus nibh vehicula in scelerisque diam rhoncus. Vivamus quam magna, ultricies et posuere sed, mollis tristique est. Vivamus consectetur cursus diam, vitae pharetra nisi aliquam et. Nulla tortor sem, molestie quis pellentesque nec, tincidunt a libero. Proin tincidunt purus ut purus ornare dictum. Proin vehicula orci eu eros aliquam eu posuere turpis lobortis. Vivamus dapibus bibendum tristique. Donec facilisis fringilla mauris nec consequat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Suspendisse ac nunc nec lacus interdum adipiscing eget vel quam. Duis rhoncus urna quis nisl elementum laoreet. Integer euismod tincidunt pulvinar.\
+<br>\
+Sed congue scelerisque blandit. Nam pharetra, nisi at auctor elementum, dolor elit bibendum mauris, congue feugiat arcu turpis non tortor. Cras tincidunt tellus sit amet nulla fermentum adipiscing. Mauris imperdiet purus vel nulla tempor vel elementum metus tempor. Aliquam eu dolor ut risus scelerisque commodo. Ut adipiscing nisl eget nisl mollis semper. Vestibulum arcu augue, sodales convallis venenatis ac, egestas euismod metus. Cras luctus elit sed nisl faucibus at accumsan lectus pharetra. Nunc rhoncus turpis est, vitae luctus turpis. Mauris tempus, velit sit amet feugiat consequat, tortor diam scelerisque urna, sit amet convallis est nisi quis dolor. Vivamus facilisis tellus quis sapien dapibus at sodales elit feugiat. Cras varius laoreet urna, eu tincidunt orci iaculis in. Sed quis lacus ac ligula aliquam egestas. Nam mattis massa sed magna lacinia pharetra. Sed semper faucibus mauris, ut consectetur libero tristique nec.\
+<br>\
+Proin vel elit id ante lacinia molestie quis in lectus. Nunc in ante nulla. Nam nec sem sed felis placerat rutrum. Sed pharetra molestie metus facilisis ornare. In sed nunc vel tellus volutpat dictum. Nunc risus enim, congue vel fermentum sed, varius eget elit. Proin vitae mi tortor. Pellentesque ut justo ligula. Nunc nibh elit, mattis at iaculis ac, pretium fermentum dui. Praesent in quam turpis. Quisque id velit eros. Nulla facilisi. Maecenas commodo dignissim libero nec pharetra. Praesent eget augue nec odio scelerisque sagittis. Donec nec dui dolor. Donec est nisi, faucibus vitae ultricies quis, cursus vel lorem. Nulla suscipit ultricies dui, vitae volutpat risus fermentum sit amet.\
+<br>\
+Morbi eu libero urna. Aliquam et nunc nec risus varius aliquet. Aenean semper sem sed purus ornare aliquam. Maecenas lobortis tristique nibh, id fermentum est egestas vel. Nam ut tortor pharetra augue rhoncus vulputate et et nisl. Donec scelerisque aliquet convallis. Quisque felis tellus, aliquet eu fermentum sed, mollis et lorem. Vivamus imperdiet, mauris at imperdiet tempor, elit justo aliquet purus, vitae vulputate dui elit euismod nulla. Nam nisl sem, laoreet at fermentum eu, eleifend vel quam. Duis venenatis hendrerit felis eget viverra. Aenean tincidunt ultrices pulvinar. Duis at risus tellus, sed euismod ipsum. Donec sit amet dui quam. Praesent at nunc a turpis sollicitudin faucibus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam tincidunt accumsan lacinia. Nunc blandit gravida urna, quis venenatis metus mollis vel. Cras a nunc ac tortor aliquam fermentum ac sed purus. Etiam porttitor tincidunt risus, et scelerisque velit egestas vitae. Nulla at arcu sed sapien vehicula laoreet.\
+<br>\
+Pellentesque rhoncus odio id ante porttitor mollis. Nullam non mi vel erat suscipit lobortis. Vivamus urna neque, gravida ac interdum eget, commodo sit amet nunc. Maecenas libero nisl, bibendum eget tristique eget, laoreet vitae arcu. Maecenas porta diam vel libero tempus fermentum. Aenean molestie fringilla magna, tincidunt condimentum nunc aliquam nec. Mauris congue commodo lacus, in condimentum orci posuere id. Maecenas in ultrices ipsum. Nam sit amet orci nisi, ac lacinia nibh. Nullam molestie lorem eget felis interdum nec semper neque ultrices. Nunc et leo eu leo faucibus euismod. Suspendisse potenti. Vivamus id enim sed augue rutrum volutpat.\
+<br>\
+Curabitur facilisis placerat mi nec consectetur. Sed sed ante orci. Aliquam dapibus egestas dapibus. Aliquam feugiat urna ut libero adipiscing sed consectetur nulla mollis. Donec lacinia condimentum libero a egestas. Vivamus vestibulum ipsum ante, vitae fermentum libero. In hac habitasse platea dictumst. Ut sed quam libero. Aliquam bibendum sollicitudin faucibus. Nam elit felis, pulvinar vitae convallis id, fermentum sed leo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec dolor neque, vehicula commodo vulputate et, faucibus id nisi.\
+<br>\
+Vestibulum id metus in lectus iaculis aliquet rhoncus sit amet justo. Phasellus ac arcu ac felis auctor volutpat vitae nec mauris. Integer convallis, eros vel molestie tempor, odio enim posuere libero, quis iaculis elit ipsum eu eros. Sed metus diam, elementum ut scelerisque eu, scelerisque suscipit tellus. Aliquam congue fringilla sapien, vitae viverra arcu egestas sed. Donec quis lacus ipsum, ac faucibus eros. Suspendisse potenti. Cras non ipsum et dui tristique interdum. Vivamus ultrices vestibulum augue. Donec ac lacus quam, nec commodo eros. Quisque ac lacus lorem, vitae pellentesque nisl. Aliquam nec justo augue, quis porta tortor. Cras sit amet egestas eros. Duis neque ante, vulputate vel faucibus eu, sodales nec justo. Sed sagittis egestas orci sed lobortis. Donec eget consectetur nulla.\
+<br>\
+Vivamus mollis sodales ligula non imperdiet. Duis eget volutpat velit. Nunc eu dolor felis. Vestibulum massa augue, convallis in facilisis eget, vestibulum in mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis non ante enim, non volutpat massa. Mauris nunc turpis, dignissim non egestas vel, tristique id sem. Phasellus magna purus, scelerisque eget varius in, convallis id enim. Sed eu dolor neque, nec porta odio. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed aliquam pharetra diam id pharetra. Nulla lectus orci, condimentum sed malesuada vulputate, dictum quis purus.\
+<br>\
+Pellentesque quis lorem orci, commodo faucibus lectus. Nullam cursus, purus in porttitor tincidunt, enim ligula sagittis urna, eu fermentum velit eros a sapien. Maecenas ornare, mi eget faucibus malesuada, leo justo lobortis erat, et lobortis massa dolor ac augue. Nulla pulvinar malesuada lorem, id venenatis nulla pulvinar non. Praesent ac augue tortor, a feugiat risus. Vestibulum molestie ultrices felis vel fermentum. Maecenas feugiat eros non libero tempus condimentum sed sed metus. Sed sagittis metus et dui facilisis vitae vehicula massa convallis. Morbi sed ante nulla, nec posuere lorem. Donec euismod fringilla diam, in suscipit libero eleifend nec. Donec tristique scelerisque nibh sed euismod. Ut sed felis erat, ullamcorper vehicula sapien. Nunc pharetra interdum pretium. Nunc a mauris orci. Cras eu quam justo.\
+<br>\
+Proin ultricies dolor sit amet eros sollicitudin nec pulvinar tortor luctus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin imperdiet turpis sit amet libero placerat in mattis quam molestie. Quisque luctus sem libero, vel venenatis purus. Ut vehicula egestas risus in pulvinar. Etiam ut vehicula est. Quisque commodo erat id est mattis pretium. Ut lobortis mauris a magna eleifend ultrices. Donec lacinia pharetra nisi, nec laoreet lacus varius et. Morbi risus diam, pulvinar a convallis id, blandit in lorem. Mauris quis tempor mi. Integer at nisi sapien. Integer dignissim consectetur tellus id rutrum. Nulla odio augue, sagittis in vestibulum ac, viverra convallis purus. Aliquam commodo mi id nibh bibendum vel viverra arcu consequat. Proin ipsum velit, ultrices id egestas nec, gravida eu dolor. Duis facilisis orci eu turpis feugiat ullamcorper. Integer venenatis metus non erat facilisis vel consectetur lectus varius. Nunc ac leo magna, a aliquet felis. Curabitur malesuada, arcu quis interdum lacinia, sapien sem condimentum ante, ac lacinia purus metus at orci.\
+<br>\
+Sed venenatis neque eu arcu bibendum imperdiet. Maecenas eget augue quis enim pretium cursus vitae venenatis dolor. Maecenas sit amet mauris mi. Aliquam luctus, dolor varius rhoncus rhoncus, diam turpis bibendum dui, eu hendrerit arcu nibh nec orci. Praesent condimentum, leo et commodo vulputate, purus odio interdum est, sed aliquam tellus lectus ut justo. Aenean pulvinar luctus dapibus. Nulla tempus, ante vel dictum ultricies, massa urna tincidunt libero, ut rhoncus risus turpis eget arcu. Morbi auctor commodo libero, in pretium quam vestibulum nec. Aenean ac tincidunt nulla. Cras vel orci enim. Praesent non metus ipsum.\
+<br>\
+Praesent ligula nulla, aliquam in tincidunt eu, lacinia eget neque. Integer tincidunt neque in risus malesuada gravida. Nullam ornare viverra nisl vel interdum. Nullam eget lectus a ipsum condimentum aliquam sit amet eu felis. Nam eu nisl enim. In pulvinar tincidunt ultrices. Morbi mi ipsum, placerat sit amet mollis vel, tincidunt vel nisi. In sed eros non magna sodales convallis pulvinar non turpis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce volutpat egestas elit, in lobortis urna egestas vitae. Nulla non tincidunt massa. Praesent ut convallis nunc. Morbi quis massa non lacus lobortis tempor non id libero. Proin turpis ante, porta et ullamcorper sit amet, malesuada vitae nisl. Suspendisse faucibus, ipsum quis varius porta, tellus augue porta arcu, nec posuere massa libero sed enim. Sed id suscipit ante. Ut fringilla sagittis orci porta tincidunt. Proin non massa sem. Nullam sollicitudin mauris et lorem euismod ut eleifend neque tempus.\
+<br>\
+Duis est est, rhoncus vel feugiat sed, iaculis id arcu. Donec ultrices lacinia dapibus. Fusce accumsan malesuada dolor, vitae viverra quam condimentum et. Sed id tellus lacus, ut sollicitudin turpis. Donec egestas ante et nunc consequat dapibus. Duis rutrum scelerisque orci, sollicitudin congue lectus condimentum non. In quis lacus et justo pellentesque vehicula. Nulla accumsan hendrerit lectus, non ornare nibh vehicula vitae. Sed iaculis dapibus laoreet. Nunc rutrum eleifend mi, ac interdum augue egestas nec. Morbi feugiat tincidunt eros, sit amet congue nisl ultricies sed. Nulla id est non dolor mattis lacinia. Mauris quis faucibus libero. Phasellus facilisis, massa a dapibus elementum, augue magna auctor tellus, nec placerat lorem lacus in purus. Morbi congue ipsum in dui euismod eleifend auctor eros eleifend. Pellentesque porttitor tincidunt pharetra. Maecenas quis tellus sed arcu convallis ultrices mollis ut neque.\
+<br>\
+Duis non sem ut mi facilisis pretium sit amet a erat. Suspendisse dignissim nisl nec risus tincidunt vitae ultrices arcu bibendum. Donec condimentum ullamcorper ipsum at vehicula. Donec interdum, odio vel blandit aliquet, nisi urna iaculis ligula, a ullamcorper mi ligula nec ligula. Curabitur pellentesque, augue id volutpat aliquet, lorem enim auctor sem, at tempus nibh augue ac diam. Etiam interdum lorem non nisi tempus vestibulum ut convallis elit. Cras cursus facilisis velit eget consectetur. Duis faucibus nulla sed leo accumsan et pharetra turpis aliquet. Curabitur ullamcorper tincidunt sapien lacinia suscipit. Curabitur consectetur, urna nec tempor lobortis, massa lectus accumsan turpis, vitae semper erat leo at dui. Sed ut facilisis velit. Ut vestibulum dapibus gravida. Quisque pellentesque auctor tortor eu malesuada. Vestibulum mauris dolor, tristique sit amet varius sit amet, varius eget neque. Curabitur in urna sit amet mi cursus pharetra sit amet at odio. Vivamus enim neque, tincidunt id adipiscing ac, volutpat non massa. Quisque gravida malesuada felis, eu aliquam nulla vestibulum id. Nullam eleifend ultricies cursus.\
+<br>\
+Pellentesque rutrum elementum orci, nec feugiat nisl vehicula nec. Suspendisse quis turpis ipsum. Maecenas eleifend nibh sit amet nisi auctor at auctor libero auctor. Suspendisse potenti. Morbi nec orci quis quam porttitor malesuada. Curabitur blandit luctus lacinia. Cras id turpis neque, a luctus justo. Morbi nec turpis risus. Fusce posuere urna sed nisl scelerisque mattis. Cras leo neque, dignissim ut vestibulum at, viverra in magna. Proin tellus leo, cursus eu porta id, eleifend in purus. Integer ut sapien leo, sed aliquet diam. Proin hendrerit imperdiet tincidunt.\
+<br>\
+Quisque rutrum urna non mi commodo vitae vestibulum velit tincidunt. Pellentesque vitae dolor et leo porta consectetur. Fusce semper eleifend tincidunt. In hac habitasse platea dictumst. Nulla mollis, dui in malesuada feugiat, sapien sapien porttitor nulla, at congue metus turpis vel arcu. Phasellus quis enim eu quam varius interdum quis lobortis magna. Quisque augue orci, suscipit eu malesuada ac, convallis id tortor. Fusce et tortor a mi fringilla congue. Praesent iaculis justo vel leo fringilla sodales. Nullam egestas, orci scelerisque placerat sagittis, diam tellus semper libero, in imperdiet neque sapien eget magna. Etiam eget massa orci, at interdum neque. Integer molestie enim eu sapien pellentesque lobortis a ac urna. Donec eu elit sit amet nunc bibendum faucibus et vel orci. Sed fringilla tristique sollicitudin. Donec rutrum pellentesque velit luctus suscipit. Aliquam lobortis sollicitudin ante at consectetur. Praesent nulla sapien, condimentum quis ornare quis, consequat sit amet arcu. Suspendisse potenti.\
+<br>\
+Ut volutpat lorem in lorem malesuada ultricies. Nunc nec eros lorem, ac iaculis velit. Donec vel metus lorem, a suscipit odio. Aliquam tincidunt nulla sit amet urna porttitor pulvinar. Cras adipiscing venenatis nibh a viverra. Etiam a metus nibh. Praesent sodales feugiat dolor, in scelerisque purus dapibus commodo. Mauris non mi metus. Fusce a aliquet ante. Aliquam erat volutpat. Praesent nec condimentum elit. Sed posuere orci et tortor volutpat sollicitudin. Vestibulum bibendum convallis dolor, non hendrerit velit consectetur eu. Aenean pharetra neque ac felis sollicitudin a ornare nunc accumsan. Aenean luctus dolor non purus lobortis sodales eget eget libero. Vivamus risus quam, vestibulum in ullamcorper et, vestibulum sit amet nunc. Ut odio felis, condimentum eget venenatis ut, suscipit ac sem. Nulla sit amet leo a metus hendrerit vehicula at vitae ante.\
+<br>\
+Aliquam diam leo, ultrices a sodales sed, laoreet id purus. Nullam eleifend leo vitae nisi euismod ac posuere elit tempus. Phasellus sed tellus est, eget fringilla diam. Aenean tempor enim quis nisi congue vitae placerat turpis vehicula. Proin congue, risus in pretium euismod, lacus tellus porttitor nulla, eget egestas lacus orci id orci. Proin nulla mauris, feugiat imperdiet consectetur id, condimentum ac libero. Donec consectetur leo a elit tincidunt vitae luctus nisl porta. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sit amet orci quis dolor molestie commodo. Integer placerat risus neque. Phasellus non laoreet tellus. Nam pulvinar pellentesque nibh, egestas suscipit nisl gravida ac. Quisque sodales lorem imperdiet orci consequat ultricies. Phasellus fringilla diam id neque facilisis pharetra.\
+<br>\
+Nam scelerisque nulla ut neque tempor blandit volutpat nisl vehicula. Nam orci enim, luctus ut venenatis et, egestas id nunc. Phasellus risus sem, scelerisque sed vestibulum a, aliquam at sem. Sed venenatis tristique nisi id eleifend. Morbi urna tellus, cursus ac porttitor rhoncus, commodo at mi. Mauris ac magna nisi. Maecenas rutrum lobortis sapien, sed dapibus neque hendrerit a. Aliquam fringilla lectus nec arcu tempor et molestie dui suscipit. Proin et felis velit, vel pellentesque ligula. Donec tempus, mi at mollis porttitor, mauris urna congue elit, at varius nisi elit et est. Quisque eu libero lorem, eget tincidunt velit. Nullam hendrerit metus quis urna adipiscing quis tristique tortor condimentum. Integer iaculis scelerisque sem, vitae consectetur lorem facilisis eu. Phasellus consectetur blandit auctor. Morbi eleifend mollis ipsum, id facilisis leo euismod ut. Nunc id est tellus.";
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *label, *scroller;
+
+   win = elm_win_add(NULL, "scroller", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Scroller");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, text);
+   evas_object_show(label);
+
+   scroller = elm_scroller_add(win);
+   elm_win_resize_object_add(win, scroller);
+   evas_object_show(scroller);
+   elm_object_content_set(scroller, label);
+   elm_scroller_bounce_set(scroller, EINA_TRUE, EINA_FALSE);
+   elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_ON, ELM_SCROLLER_POLICY_ON);
+   elm_scroller_propagate_events_set(scroller, EINA_TRUE);
+   elm_scroller_page_relative_set(scroller, 0, 1);
+   elm_scroller_region_show(scroller, 50, 50, 200, 200);
+
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/segment_control_example.c b/src/examples/segment_control_example.c
new file mode 100644 (file)
index 0000000..746d3b9
--- /dev/null
@@ -0,0 +1,86 @@
+/**
+ * Simple Elementary's <b>segment_control widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` segment_control_example.c -o segment_control_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+        Evas_Object *obj __UNUSED__,
+        void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *sc, *ic;
+   Elm_Segment_Item *it;
+   int count, index;
+
+   win = elm_win_add(NULL, "segment_control", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Segment Control Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   sc = elm_segment_control_add(win);
+   evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, sc);
+   evas_object_show(sc);
+
+   elm_segment_control_item_add(sc, NULL, "only text");
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "close");
+   elm_segment_control_item_add(sc, ic, NULL);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "home");
+   elm_segment_control_item_add(sc, ic, "Home");
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "close");
+   elm_segment_control_item_add(sc, ic, "");
+
+   count = elm_segment_control_item_count_get(sc);
+   elm_segment_control_item_insert_at(sc, NULL, "Inserted at", count - 1);
+
+   it = elm_segment_control_item_insert_at(sc, NULL, "To be deleted", 2);
+   elm_segment_control_item_del(it);
+
+   elm_segment_control_item_insert_at(sc, NULL, "To be deleted", 2);
+   elm_segment_control_item_del_at(sc, 2);
+
+   it = elm_segment_control_item_get(sc, 0);
+   elm_segment_control_item_label_set(it, "Only Text");
+
+   count = elm_segment_control_item_count_get(sc);
+   it = elm_segment_control_item_get(sc, count / 2);
+   elm_segment_control_item_selected_set(it, EINA_TRUE);
+   it = elm_segment_control_item_selected_get(sc);
+   index = elm_segment_control_item_index_get(it);
+   printf("Item selected: %i\n", index);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/separator_example_01.c b/src/examples/separator_example_01.c
new file mode 100644 (file)
index 0000000..fbfc6f2
--- /dev/null
@@ -0,0 +1,58 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` separator_example_01.c -o separator_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *rect, *separator;
+   char buf[256];
+
+   win = elm_win_add(NULL, "separator", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Separator");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 255, 0, 255);
+   evas_object_size_hint_min_set(rect, 90, 200);
+   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);
+   evas_object_show(rect);
+   elm_box_pack_end(bx, rect);
+
+   separator = elm_separator_add(win);
+   elm_separator_horizontal_set(separator, EINA_TRUE);
+   evas_object_show(separator);
+   elm_box_pack_end(bx, separator);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 0, 255, 255);
+   evas_object_size_hint_min_set(rect, 90, 200);
+   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);
+   evas_object_show(rect);
+   elm_box_pack_end(bx, rect);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/slider_example.c b/src/examples/slider_example.c
new file mode 100644 (file)
index 0000000..53568cd
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+ * Simple Elementary's <b>slider widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` slider_example.c -o slider_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+        Evas_Object *obj __UNUSED__,
+        void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_changed_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+    double val = elm_slider_value_get(obj);
+    printf("Changed to %1.2f\n", val);
+}
+
+static void
+_delay_changed_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+    double val = elm_slider_value_get(obj);
+    printf("Delay changed to %1.2f\n", val);
+}
+
+static char*
+_indicator_format(double val)
+{
+   char *indicator = malloc(sizeof(char) * 32);
+   snprintf(indicator, 32, "%1.2f u", val);
+   return indicator;
+}
+
+static void
+_indicator_free(char *str)
+{
+   free(str);
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *sl, *ic;
+
+   win = elm_win_add(NULL, "slider", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Slider Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   /* default */
+   sl = elm_slider_add(win);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* with icon, end and label */
+   sl = elm_slider_add(win);
+   elm_object_text_set(sl, "Counter");
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "home");
+   elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);
+   elm_object_content_part_set(sl, ELM_SLIDER_CONTENT_ICON, ic);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "folder");
+   elm_icon_scale_set(ic, EINA_FALSE, EINA_FALSE);
+   elm_object_content_part_set(sl, ELM_SLIDER_CONTENT_END, ic);
+
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* value set and span size */
+   sl = elm_slider_add(win);
+   elm_slider_value_set(sl, 1);
+   elm_slider_span_size_set(sl, 200);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* with unit label and min - max */
+   sl = elm_slider_add(win);
+   elm_slider_unit_format_set(sl, "%1.0f units");
+   elm_slider_min_max_set(sl, 0, 100);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* with indicator label and inverted */
+   sl = elm_slider_add(win);
+   elm_slider_indicator_format_set(sl, "%1.2f");
+   elm_slider_inverted_set(sl, EINA_TRUE);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* vertical with indicator format func */
+   sl = elm_slider_add(win);
+   elm_slider_horizontal_set(sl, EINA_FALSE);
+   elm_slider_indicator_format_function_set(sl, _indicator_format,
+                                            _indicator_free);
+   evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(sl, 0, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   /* callbacks */
+   sl = elm_slider_add(win);
+   elm_slider_unit_format_set(sl, "%1.3f units");
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+   evas_object_smart_callback_add(sl, "changed", _changed_cb, NULL);
+   evas_object_smart_callback_add(sl, "delay,changed", _delay_changed_cb, NULL);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/slideshow_example.c b/src/examples/slideshow_example.c
new file mode 100644 (file)
index 0000000..d6f133f
--- /dev/null
@@ -0,0 +1,321 @@
+/**
+ * Simple Elementary's <b>slide show widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` slideshow_example.c -o slideshow_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "../../data"
+#endif
+
+static void
+_on_done(void        *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void        *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static Evas_Object *slideshow, *bt_start, *bt_stop;
+static Elm_Slideshow_Item_Class itc;
+
+static const char *img1 = PACKAGE_DATA_DIR "/images/logo.png";
+static const char *img2 = PACKAGE_DATA_DIR "/images/plant_01.jpg";
+static const char *img3 = PACKAGE_DATA_DIR "/images/rock_01.jpg";
+static const char *img4 = PACKAGE_DATA_DIR "/images/rock_02.jpg";
+static const char *img5 = PACKAGE_DATA_DIR "/images/sky_01.jpg";
+static const char *img6 = PACKAGE_DATA_DIR "/images/sky_04.jpg";
+static const char *img7 = PACKAGE_DATA_DIR "/images/wood_01.jpg";
+static const char *img8 = PACKAGE_DATA_DIR "/images/mystrale.jpg";
+static const char *img9 = PACKAGE_DATA_DIR "/images/mystrale_2.jpg";
+
+static void
+_notify_show(void        *data,
+             Evas        *e __UNUSED__,
+             Evas_Object *obj __UNUSED__,
+             void        *event_info __UNUSED__)
+{
+   evas_object_show(data);
+}
+
+/* jump to next item, cyclically */
+static void
+_next(void        *data,
+      Evas_Object *obj __UNUSED__,
+      void        *event_info __UNUSED__)
+{
+   elm_slideshow_next(data);
+}
+
+static void
+_previous(void        *data,
+          Evas_Object *obj __UNUSED__,
+          void        *event_info __UNUSED__)
+{
+   elm_slideshow_previous(data);
+}
+
+static void
+_first(void        *data,
+       Evas_Object *obj __UNUSED__,
+       void        *event_info __UNUSED__)
+{
+   elm_slideshow_show(data);
+}
+
+static void
+_last(void        *data,
+      Evas_Object *obj __UNUSED__,
+      void        *event_info __UNUSED__)
+{
+   elm_slideshow_show(data);
+}
+
+static void
+_mouse_in(void        *data,
+          Evas        *e __UNUSED__,
+          Evas_Object *obj __UNUSED__,
+          void        *event_info __UNUSED__)
+{
+   elm_notify_timeout_set(data, 0.0);
+   evas_object_show(data);
+}
+
+static void
+_mouse_out(void        *data,
+           Evas        *e __UNUSED__,
+           Evas_Object *obj __UNUSED__,
+           void        *event_info __UNUSED__)
+{
+   elm_notify_timeout_set(data, 3.0);
+}
+
+/* transition changed */
+static void
+_transition_select(void        *data,
+           Evas_Object *obj,
+           void        *event_info __UNUSED__)
+{
+   elm_slideshow_transition_set(slideshow, data);
+   elm_object_text_set(obj, data);
+}
+
+static void
+_layout_select(void        *data,
+               Evas_Object *obj,
+               void        *event_info __UNUSED__)
+{
+   elm_slideshow_layout_set(slideshow, data);
+   elm_object_text_set(obj, data);
+}
+
+/* start the show! */
+static void
+_start(void        *data,
+       Evas_Object *obj __UNUSED__,
+       void        *event_info __UNUSED__)
+{
+   elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data));
+
+   elm_object_disabled_set(bt_start, EINA_TRUE);
+   elm_object_disabled_set(bt_stop, EINA_FALSE);
+}
+
+static void
+_stop(void        *data __UNUSED__,
+      Evas_Object *obj __UNUSED__,
+      void        *event_info __UNUSED__)
+{
+   elm_slideshow_timeout_set(slideshow, 0.0);
+   elm_object_disabled_set(bt_start, EINA_FALSE);
+   elm_object_disabled_set(bt_stop, EINA_TRUE);
+}
+
+/* slideshow transition time has changed */
+static void
+_spin(void        *data,
+      Evas_Object *obj __UNUSED__,
+      void        *event_info __UNUSED__)
+{
+   if (elm_slideshow_timeout_get(slideshow) > 0)
+     elm_slideshow_timeout_set(slideshow, elm_spinner_value_get(data));
+}
+
+/* get our images to make slideshow items */
+static Evas_Object *
+_get(void        *data,
+     Evas_Object *obj)
+{
+   Evas_Object *photo = elm_photo_add(obj);
+   elm_photo_file_set(photo, data);
+   elm_photo_fill_inside_set(photo, EINA_TRUE);
+   elm_object_style_set(photo, "shadow");
+
+   return photo;
+}
+
+/* ordering alphabetically */
+static int
+_cmp_func(const void *data1,
+          const void *data2)
+{
+   const char *img_path1, *img_path2;
+
+   const Elm_Slideshow_Item *it1 = data1;
+   const Elm_Slideshow_Item *it2 = data2;
+
+   img_path1 = elm_slideshow_item_data_get(it1);
+   img_path2 = elm_slideshow_item_data_get(it2);
+
+   return strcasecmp(img_path1, img_path2);
+}
+
+int
+elm_main(int    argc __UNUSED__,
+         char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *notify, *bx, *bt, *hv, *spin;
+   Elm_Slideshow_Item *first, *last, *it;
+   const char *transition, *layout;
+   const Eina_List *l, *list;
+
+   win = elm_win_add(NULL, "slideshow", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Slideshow example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   slideshow = elm_slideshow_add(win);
+   elm_slideshow_loop_set(slideshow, EINA_TRUE);
+   elm_win_resize_object_add(win, slideshow);
+   evas_object_size_hint_weight_set(slideshow,
+                                    EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(slideshow);
+
+   itc.func.get = _get;
+   itc.func.del = NULL;
+
+   first = elm_slideshow_item_sorted_insert(slideshow, &itc, img1, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img2, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img3, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img4, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img5, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img6, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img7, _cmp_func);
+   elm_slideshow_item_sorted_insert(slideshow, &itc, img8, _cmp_func);
+   last = elm_slideshow_item_add(slideshow, &itc, img9);
+
+   list = elm_slideshow_items_get(slideshow);
+   fprintf(stdout, "List of items in the slideshow:\n");
+   EINA_LIST_FOREACH(list, l, it)
+     fprintf(stdout, "\t%s\n",
+             (const char *)elm_slideshow_item_data_get(it));
+
+   notify = elm_notify_add(win);
+   elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
+   elm_win_resize_object_add(win, notify);
+   elm_notify_timeout_set(notify, 3.0);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_TRUE);
+   elm_object_content_set(notify, bx);
+   evas_object_show(bx);
+
+   evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_IN, _mouse_in,
+                                  notify);
+   evas_object_event_callback_add(bx, EVAS_CALLBACK_MOUSE_OUT, _mouse_out,
+                                  notify);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Previous");
+   evas_object_smart_callback_add(bt, "clicked", _previous, slideshow);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Next");
+   evas_object_smart_callback_add(bt, "clicked", _next, slideshow);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "First");
+   evas_object_smart_callback_add(bt, "clicked", _first, first);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   elm_object_text_set(bt, "Last");
+   evas_object_smart_callback_add(bt, "clicked", _last, last);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   hv = elm_hoversel_add(win);
+   elm_box_pack_end(bx, hv);
+   elm_hoversel_hover_parent_set(hv, win);
+   EINA_LIST_FOREACH(elm_slideshow_transitions_get(slideshow), l, transition)
+     elm_hoversel_item_add(hv, transition, NULL, 0, _transition_select,
+                           transition);
+   elm_object_text_set(hv, eina_list_data_get(
+                         elm_slideshow_transitions_get(slideshow)));
+   evas_object_show(hv);
+
+   hv = elm_hoversel_add(win);
+   elm_box_pack_end(bx, hv);
+   elm_hoversel_hover_parent_set(hv, win);
+   EINA_LIST_FOREACH(elm_slideshow_layouts_get(slideshow), l, layout)
+     elm_hoversel_item_add(hv, layout, NULL, 0, _layout_select, layout);
+   elm_object_text_set(hv, elm_slideshow_layout_get(slideshow));
+   evas_object_show(hv);
+
+   spin = elm_spinner_add(win);
+   elm_spinner_label_format_set(spin, "%2.0f s");
+   evas_object_smart_callback_add(spin, "changed", _spin, spin);
+   elm_spinner_step_set(spin, 1);
+   elm_spinner_min_max_set(spin, 1, 30);
+   elm_spinner_value_set(spin, 3);
+   elm_box_pack_end(bx, spin);
+   evas_object_show(spin);
+
+   bt = elm_button_add(win);
+   bt_start = bt;
+   elm_object_text_set(bt, "Start");
+   evas_object_smart_callback_add(bt, "clicked", _start, spin);
+   elm_box_pack_end(bx, bt);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
+   bt_stop = bt;
+   elm_object_text_set(bt, "Stop");
+   evas_object_smart_callback_add(bt, "clicked", _stop, spin);
+   elm_box_pack_end(bx, bt);
+   elm_object_disabled_set(bt, EINA_TRUE);
+   evas_object_show(bt);
+
+   evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_UP,
+                                  _notify_show, notify);
+   evas_object_event_callback_add(slideshow, EVAS_CALLBACK_MOUSE_MOVE,
+                                  _notify_show, notify);
+
+   _notify_show(notify, NULL, NULL, NULL);
+
+   evas_object_resize(win, 600, 400);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/spinner_example.c b/src/examples/spinner_example.c
new file mode 100644 (file)
index 0000000..10dcf9d
--- /dev/null
@@ -0,0 +1,135 @@
+/**
+ * Simple Elementary's <b>spinner widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` spinner_example.c -o spinner_example
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+        Evas_Object *obj __UNUSED__,
+        void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_changed_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   printf("Value changed to %0.f\n", elm_spinner_value_get(obj));
+}
+
+static void
+_delay_changed_cb(void *data __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   printf("Value delay changed to %0.f\n", elm_spinner_value_get(obj));
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *sp;
+
+   win = elm_win_add(NULL, "spinner", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Spinner Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   /* default */
+   sp = elm_spinner_add(win);
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   /* format */
+   sp = elm_spinner_add(win);
+   elm_spinner_label_format_set(sp, "Percentage %%%1.2f something");
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   /* min max, step and wrap */
+   sp = elm_spinner_add(win);
+   elm_spinner_label_format_set(sp, "%1.1f units");
+   elm_spinner_step_set(sp, 1.5);
+   elm_spinner_wrap_set(sp, EINA_TRUE);
+   elm_spinner_min_max_set(sp, -50.0, 250.0);
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   /* vertical */
+   sp = elm_spinner_add(win);
+   elm_object_style_set(sp, "vertical");
+   elm_spinner_interval_set(sp, 0.2);
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   /* disabled edition */
+   sp = elm_spinner_add(win);
+   elm_spinner_editable_set(sp, EINA_FALSE);
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   /* special values */
+   sp = elm_spinner_add(win);
+   elm_spinner_editable_set(sp, EINA_FALSE);
+   elm_spinner_min_max_set(sp, 1, 12);
+   elm_spinner_special_value_add(sp, 1, "January");
+   elm_spinner_special_value_add(sp, 2, "February");
+   elm_spinner_special_value_add(sp, 3, "March");
+   elm_spinner_special_value_add(sp, 4, "April");
+   elm_spinner_special_value_add(sp, 5, "May");
+   elm_spinner_special_value_add(sp, 6, "June");
+   elm_spinner_special_value_add(sp, 7, "July");
+   elm_spinner_special_value_add(sp, 8, "August");
+   elm_spinner_special_value_add(sp, 9, "September");
+   elm_spinner_special_value_add(sp, 10, "October");
+   elm_spinner_special_value_add(sp, 11, "November");
+   elm_spinner_special_value_add(sp, 12, "December");
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+
+   sp = elm_spinner_add(win);
+   evas_object_size_hint_align_set(sp, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sp);
+   evas_object_show(sp);
+   evas_object_smart_callback_add(sp, "changed", _changed_cb, NULL);
+   evas_object_smart_callback_add(sp, "delay,changed", _delay_changed_cb, NULL);
+
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/table_example_01.c b/src/examples/table_example_01.c
new file mode 100644 (file)
index 0000000..754b5a9
--- /dev/null
@@ -0,0 +1,55 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` table_example_01.c -o table_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *label, *table;
+
+   win = elm_win_add(NULL, "table", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Table");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   table = elm_table_add(win);
+   elm_win_resize_object_add(win, table);
+   evas_object_show(table);
+   elm_table_padding_set(table, 5, 5);
+   elm_table_homogeneous_set(table, EINA_TRUE);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, "label 0");
+   evas_object_show(label);
+   elm_table_pack(table, label, 0, 0, 1, 1);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, "label 1");
+   evas_object_show(label);
+   elm_table_pack(table, label, 1, 0, 1, 1);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, "label 2");
+   evas_object_show(label);
+   elm_table_pack(table, label, 0, 1, 1, 1);
+
+   label = elm_label_add(win);
+   elm_object_text_set(label, "label 3");
+   evas_object_show(label);
+   elm_table_pack(table, label, 1, 1, 1, 1);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/table_example_02.c b/src/examples/table_example_02.c
new file mode 100644 (file)
index 0000000..3845aca
--- /dev/null
@@ -0,0 +1,58 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` table_example_02.c -o table_example_02
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *rect, *table;
+
+   win = elm_win_add(NULL, "table", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Table");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   table = elm_table_add(win);
+   elm_win_resize_object_add(win, table);
+   evas_object_show(table);
+   elm_table_homogeneous_set(table, EINA_FALSE);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 255, 0, 0, 255);
+   evas_object_size_hint_min_set(rect, 100, 50);
+   evas_object_show(rect);
+   elm_table_pack(table, rect, 0, 0, 2, 1);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 255, 0, 255);
+   evas_object_size_hint_min_set(rect, 50, 100);
+   evas_object_show(rect);
+   elm_table_pack(table, rect, 0, 1, 1, 2);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 0, 0, 255, 255);
+   evas_object_size_hint_min_set(rect, 50, 50);
+   evas_object_show(rect);
+   elm_table_pack(table, rect, 1, 1, 1, 1);
+
+   rect = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_color_set(rect, 255, 255, 0, 255);
+   evas_object_size_hint_min_set(rect, 50, 50);
+   evas_object_show(rect);
+   elm_table_pack(table, rect, 1, 2, 1, 1);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
index 91554cb..e48a369 100644 (file)
@@ -16,12 +16,12 @@ btn_extension_click_cb(void *data __UNUSED__, Evas_Object *btn, void *ev __UNUSE
    if (!strncmp(lbl, "Load", 4))
      {
         elm_theme_extension_add(NULL, "./theme_example.edj");
-        elm_button_label_set(btn, "Unload extension");
+        elm_object_text_set(btn, "Unload extension");
      }
    else if (!strncmp(lbl, "Unload", 6))
      {
         elm_theme_extension_del(NULL, "./theme_example.edj");
-        elm_button_label_set(btn, "Load extension");
+        elm_object_text_set(btn, "Load extension");
      }
 }
 
@@ -64,13 +64,13 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(box);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Unload extension");
+   elm_object_text_set(btn, "Unload extension");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", btn_extension_click_cb, NULL);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Switch style");
+   elm_object_text_set(btn, "Switch style");
    elm_object_style_set(btn, "chucknorris");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
index db1a220..8ac2d07 100644 (file)
@@ -44,25 +44,25 @@ elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
    evas_object_show(box);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Button 1");
+   elm_object_text_set(btn, "Button 1");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Button 2");
+   elm_object_text_set(btn, "Button 2");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Button 3");
+   elm_object_text_set(btn, "Button 3");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);
 
    btn = elm_button_add(win);
-   elm_button_label_set(btn, "Button 4");
+   elm_object_text_set(btn, "Button 4");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
    evas_object_smart_callback_add(btn, "clicked", _btn_clicked_cb, NULL);
diff --git a/src/examples/thumb_example_01.c b/src/examples/thumb_example_01.c
new file mode 100644 (file)
index 0000000..5891672
--- /dev/null
@@ -0,0 +1,87 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` thumb_example_01.c -o thumb_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+# define PACKAGE_DATA_DIR "."
+#endif
+
+static void
+_generation_started_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   printf("thumbnail generation started.\n");
+}
+
+static void
+_generation_finished_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   printf("thumbnail generation finished.\n");
+}
+
+static void
+_generation_error_cb(void *data __UNUSED__, Evas_Object *o __UNUSED__, void *event_info __UNUSED__)
+{
+   printf("thumbnail generation error.\n");
+}
+
+int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+#if 0
+   Evas_Object *win, *bg;
+   Evas_Object *thumb;
+   Ethumb_Client *client;
+   char buf[PATH_MAX];
+
+   elm_need_ethumb();
+
+   win = elm_win_add(NULL, "thumb", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Thumbnailer");
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   client = elm_thumb_ethumb_client_get();
+   if (!client)
+     {
+       printf("error: could not get Ethumb client.\n");
+       return 1;
+     }
+   ethumb_client_size_set(client, 160, 160);
+
+   thumb = elm_thumb_add(win);
+
+   evas_object_smart_callback_add(thumb, "generate,start", _generation_started_cb, NULL);
+   evas_object_smart_callback_add(thumb, "generate,stop", _generation_finished_cb, NULL);
+   evas_object_smart_callback_add(thumb, "generate,error", _generation_error_cb, NULL);
+
+   elm_thumb_editable_set(thumb, EINA_FALSE);
+   snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", PACKAGE_DATA_DIR);
+   elm_thumb_file_set(thumb, buf, NULL);
+   elm_thumb_reload(thumb);
+
+   evas_object_size_hint_weight_set(thumb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, thumb);
+   evas_object_show(thumb);
+
+   evas_object_size_hint_min_set(bg, 160, 160);
+   evas_object_size_hint_max_set(bg, 640, 640);
+   evas_object_resize(win, 320, 320);
+   evas_object_show(win);
+
+   elm_run(); /* and run the program now, starting to handle all
+               * events, etc. */
+   elm_shutdown(); /* clean up and shut down */
+#endif
+   /* exit code */
+   return 0;
+}
+
+ELM_MAIN()
diff --git a/src/examples/toggle_example_01.c b/src/examples/toggle_example_01.c
new file mode 100644 (file)
index 0000000..dae0444
--- /dev/null
@@ -0,0 +1,75 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` toggle_example_01.c -o toggle_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _cb(void *data, Evas_Object *obj, void *event_info);
+static void _cb2(void *data, Evas_Object *obj, void *event_info);
+
+static Eina_Bool val = EINA_FALSE;
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *bx, *toggle, *ic;
+
+   win = elm_win_add(NULL, "toggle", ELM_WIN_BASIC);
+   elm_win_title_set(win, "toggle");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_box_horizontal_set(bx, EINA_FALSE);
+   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);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   toggle = elm_toggle_add(win);
+   elm_object_text_set(toggle, "Toggle 1");
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "home");
+   elm_toggle_icon_set(toggle, ic);
+   elm_toggle_state_pointer_set(toggle, &val);
+   elm_box_pack_end(bx, toggle);
+   evas_object_size_hint_weight_set(toggle, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(toggle, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(toggle);
+   evas_object_smart_callback_add(toggle, "changed", _cb, NULL);
+
+   toggle = elm_toggle_add(win);
+   elm_object_text_set(toggle, "Toggle 2");
+   elm_toggle_states_labels_set(toggle, "Enabled", "Disabled");
+   elm_toggle_state_set(toggle, EINA_TRUE);
+   elm_box_pack_end(bx, toggle);
+   evas_object_size_hint_weight_set(toggle, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(toggle, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(toggle);
+   evas_object_smart_callback_add(toggle, "changed", _cb2, NULL);
+
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_cb(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("val is now: %s\n", val ? "true" : "false");
+}
+
+static void
+_cb2(void *data, Evas_Object *obj, void *event_info)
+{
+   printf("toggle2's state is now: %s\n", elm_toggle_state_get(obj) ? "true" : "false");
+}
\ No newline at end of file
diff --git a/src/examples/toolbar_example_01.c b/src/examples/toolbar_example_01.c
new file mode 100644 (file)
index 0000000..4d44447
--- /dev/null
@@ -0,0 +1,100 @@
+/**
+ * Simple Elementary's <b>toolbar widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` toolbar_example_01.c -o toolbar_example_01
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_item_1_pressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *bt = data;
+   elm_object_text_set(bt, "Print Document");
+}
+
+static void
+_item_2_pressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *bt = data;
+   elm_object_text_set(bt, "Create new folder");
+}
+
+static void
+_item_3_pressed(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   /* This function won't be called because we disabled item that call it */
+   Evas_Object *bt = data;
+   elm_object_text_set(bt, "Create and send email");
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *tb, *bt;
+   Elm_Toolbar_Item *item;
+
+   win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Toolbar Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   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);
+   evas_object_show(bx);
+
+   bt = elm_button_add(win);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(bt, "Button");
+   evas_object_show(bt);
+
+   tb = elm_toolbar_add(win);
+   elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_SCROLL);
+   evas_object_size_hint_weight_set(tb, 0.0, 0.0);
+   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
+   evas_object_show(tb);
+
+   elm_toolbar_item_append(tb, "document-print", "Print", _item_1_pressed, bt);
+   elm_toolbar_item_append(tb, "folder-new", "New Folder", _item_2_pressed, bt);
+
+   item = elm_toolbar_item_append(tb, "mail-send", "Create and send email",
+                                  _item_3_pressed, bt);
+   elm_toolbar_item_disabled_set(item, EINA_TRUE);
+
+   elm_toolbar_homogeneous_set(tb, EINA_FALSE);
+
+   elm_box_pack_end(bx, tb);
+   elm_box_pack_end(bx, bt);
+
+   evas_object_resize(win, 200, 200);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/toolbar_example_02.c b/src/examples/toolbar_example_02.c
new file mode 100644 (file)
index 0000000..fafdb42
--- /dev/null
@@ -0,0 +1,91 @@
+/**
+ * Simple Elementary's <b>toolbar widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` toolbar_example_02.c -o toolbar_example_02
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_item_pressed(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Toolbar_Item *item = event_info;
+   elm_toolbar_item_state_set(item, elm_toolbar_item_state_next(item));
+   elm_toolbar_item_selected_set(item, EINA_FALSE);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *tb, *bt;
+   Elm_Toolbar_Item *item;
+
+   win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Toolbar Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   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);
+   evas_object_show(bx);
+
+   bt = elm_button_add(win);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(bt, "Button");
+   evas_object_show(bt);
+
+   tb = elm_toolbar_add(win);
+   elm_toolbar_mode_shrink_set(tb, ELM_TOOLBAR_SHRINK_HIDE);
+   evas_object_size_hint_weight_set(tb, 0.0, 0.0);
+   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
+   evas_object_show(tb);
+
+   elm_toolbar_item_append(tb, "document-print", "Print", NULL, NULL);
+   elm_toolbar_item_append(tb, "folder-new", "Folder", NULL, NULL);
+   elm_toolbar_item_append(tb, "clock", "Clock", NULL, NULL);
+   elm_toolbar_item_append(tb, "refresh", "Update", NULL, NULL);
+
+   item = elm_toolbar_item_append(tb, "mail-send", "Send Mail",
+                                  _item_pressed, NULL);
+   elm_toolbar_item_state_add(item, "emptytrash", "Empty Trash",
+                              _item_pressed, NULL);
+   elm_toolbar_item_state_add(item, "trashcan_full", "Full Trash",
+                              _item_pressed, NULL);
+
+   elm_toolbar_item_priority_set(item, 10);
+
+   elm_box_pack_end(bx, tb);
+   elm_box_pack_end(bx, bt);
+
+   evas_object_resize(win, 230, 200);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
diff --git a/src/examples/toolbar_example_03.c b/src/examples/toolbar_example_03.c
new file mode 100644 (file)
index 0000000..e32ef00
--- /dev/null
@@ -0,0 +1,92 @@
+/**
+ * Simple Elementary's <b>toolbar widget</b> example, illustrating its
+ * usage and API.
+ *
+ * See stdout/stderr for output. Compile with:
+ *
+ * @verbatim
+ * gcc -g `pkg-config --cflags --libs elementary` toolbar_example_03.c -o toolbar_example_03
+ * @endverbatim
+ */
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__
+#endif
+
+static void
+_on_done(void *data __UNUSED__,
+         Evas_Object *obj __UNUSED__,
+         void *event_info __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_item_pressed(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Toolbar_Item *item = event_info;
+   elm_toolbar_item_state_set(item, elm_toolbar_item_state_next(item));
+   elm_toolbar_item_selected_set(item, EINA_FALSE);
+}
+
+EAPI_MAIN int
+elm_main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *tb, *bt, *menu;
+   Elm_Toolbar_Item *item;
+
+   win = elm_win_add(NULL, "toolbar", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Toolbar Example");
+   evas_object_smart_callback_add(win, "delete,request", _on_done, NULL);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   elm_win_resize_object_add(win, bx);
+   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);
+   evas_object_show(bx);
+
+   bt = elm_button_add(win);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(bt, "Button");
+   evas_object_show(bt);
+
+   tb = elm_toolbar_add(win);
+   evas_object_size_hint_weight_set(tb, 0.0, 0.0);
+   evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.0);
+   evas_object_show(tb);
+
+   elm_toolbar_item_append(tb, "document-print", "Print", NULL, NULL);
+   elm_toolbar_item_append(tb, "folder-new", "Folder", NULL, NULL);
+   elm_toolbar_item_append(tb, "clock", "Clock", NULL, NULL);
+   elm_toolbar_item_append(tb, "refresh", "Update", NULL, NULL);
+
+   elm_toolbar_menu_parent_set(tb, win);
+
+   item = elm_toolbar_item_append(tb, "mail-send", "Send Mail", NULL, NULL);
+   elm_toolbar_item_menu_set(item, EINA_TRUE);
+
+   menu = elm_toolbar_item_menu_get(item);
+   elm_menu_item_add(menu, NULL, "emptytrash", "Empty Trash", NULL, NULL);
+   elm_menu_item_add(menu, NULL, "trashcan_full", "Full Trash", NULL, NULL);
+
+   elm_toolbar_item_priority_set(item, 10);
+
+   elm_box_pack_end(bx, tb);
+   elm_box_pack_end(bx, bt);
+
+   evas_object_resize(win, 230, 200);
+   evas_object_show(win);
+
+   elm_run();
+   return 0;
+}
+ELM_MAIN()
index 9bf8980..3696307 100644 (file)
@@ -34,7 +34,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_show(bg);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Resizing Effect");
+   elm_object_text_set(bt, "Resizing Effect");
    evas_object_show(bt);
    evas_object_move(bt, 50, 100);
    evas_object_resize(bt, 100, 50);
index d060fd1..bc75b48 100644 (file)
@@ -34,25 +34,25 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    evas_object_show(bg);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Chain 1");
+   elm_object_text_set(bt, "Chain 1");
    evas_object_resize(bt, 100, 100);
    evas_object_move(bt, 0, 0);
    evas_object_show(bt);
 
    bt2 = elm_button_add(win);
-   elm_button_label_set(bt2, "Chain 2");
+   elm_object_text_set(bt2, "Chain 2");
    evas_object_resize(bt2, 100, 100);
    evas_object_move(bt2, 300, 0);
    evas_object_show(bt2);
 
    bt3 = elm_button_add(win);
-   elm_button_label_set(bt3, "Chain 3");
+   elm_object_text_set(bt3, "Chain 3");
    evas_object_resize(bt3, 100, 100);
    evas_object_move(bt3, 300, 300);
    evas_object_show(bt3);
 
    bt4 = elm_button_add(win);
-   elm_button_label_set(bt4, "Chain 4");
+   elm_object_text_set(bt4, "Chain 4");
    evas_object_resize(bt4, 100, 100);
    evas_object_move(bt4, 0, 300);
    evas_object_show(bt4);
index d22fb18..0af77be 100644 (file)
@@ -97,7 +97,7 @@ _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_check_label_set(check, label);
+   elm_object_text_set(check, label);
    elm_check_state_pointer_set(check, checked);
    elm_box_pack_end(box, check);
    evas_object_show(check);
@@ -195,7 +195,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    win = elm_win_add(NULL, "transit", ELM_WIN_BASIC);
    elm_win_title_set(win, "Transit Example");
    evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
-   elm_win_autodel_set(win, 1);
+   elm_win_autodel_set(win, EINA_TRUE);
 
    /* add a scalable white background to this window */
    bg = elm_bg_add(win);
@@ -223,11 +223,11 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    /* this object isn't packed inside the box because we don't want it to have
     * its size, position, aspect or anything else controled by the container */
    obj = elm_button_add(win);
-   elm_button_label_set(obj, "Transformed object!");
+   elm_object_text_set(obj, "Transformed object!");
    icon = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/icon_07.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(icon, buf, NULL);
-   elm_button_icon_set(obj, icon);
+   elm_object_content_set(obj, icon);
    evas_object_move(obj, 160, 60);
    evas_object_resize(obj, 250, 100);
    evas_object_show(obj);
@@ -239,7 +239,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    /* button to start our transition */
    btn = elm_button_add(win);
    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   elm_button_label_set(btn, "Transit!");
+   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, &context);
@@ -278,7 +278,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    cbox = elm_check_add(win);
    evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(cbox, 0.0, 0.0);
-   elm_check_label_set(cbox, "Events enabled");
+   elm_object_text_set(cbox, "Events enabled");
    elm_check_state_pointer_set(cbox, &context.events_enabled);
    elm_box_pack_end(vbox2, cbox);
    evas_object_show(cbox);
@@ -286,7 +286,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    cbox = elm_check_add(win);
    evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(cbox, 0.0, 0.0);
-   elm_check_label_set(cbox, "Auto reverse");
+   elm_object_text_set(cbox, "Auto reverse");
    elm_check_state_pointer_set(cbox, &context.auto_reverse);
    elm_box_pack_end(vbox2, cbox);
    evas_object_show(cbox);
@@ -294,7 +294,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    cbox = elm_check_add(win);
    evas_object_size_hint_weight_set(cbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(cbox, 0.0, 0.0);
-   elm_check_label_set(cbox, "Keep final state");
+   elm_object_text_set(cbox, "Keep final state");
    elm_check_state_pointer_set(cbox, &context.final_state_keep);
    elm_box_pack_end(vbox2, cbox);
    evas_object_show(cbox);
index 6867bb6..8290fe5 100644 (file)
@@ -60,7 +60,7 @@ _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_check_label_set(check, label);
+   elm_object_text_set(check, label);
    elm_check_state_pointer_set(check, checked);
    elm_box_pack_end(box, check);
    evas_object_show(check);
@@ -104,7 +104,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
    win = elm_win_add(NULL, "transit", ELM_WIN_BASIC);
    elm_win_title_set(win, "Transit Example");
    evas_object_smart_callback_add(win, "delete,request", on_done, NULL);
-   elm_win_autodel_set(win, 1);
+   elm_win_autodel_set(win, EINA_TRUE);
 
    /* add a scalable white background to this window */
    bg = elm_bg_add(win);
@@ -128,11 +128,11 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 
    /* add an object that we are going to play with */
    obj = elm_button_add(win);
-   elm_button_label_set(obj, "Transformed object!");
+   elm_object_text_set(obj, "Transformed object!");
    icon = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/icon_07.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(icon, buf, NULL);
-   elm_button_icon_set(obj, icon);
+   elm_object_content_set(obj, icon);
    evas_object_move(obj, 160, 60);
    evas_object_resize(obj, 250, 100);
    evas_object_show(obj);
@@ -141,11 +141,11 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 
    /* add another object that we are going to play with */
    obj = elm_button_add(win);
-   elm_button_label_set(obj, "Another object!");
+   elm_object_text_set(obj, "Another object!");
    icon = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/icon_08.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(icon, buf, NULL);
-   elm_button_icon_set(obj, icon);
+   elm_object_content_set(obj, icon);
    evas_object_move(obj, 160, 60);
    evas_object_resize(obj, 250, 100);
 
@@ -153,7 +153,7 @@ elm_main(int argc __UNUSED__, char **argv __UNUSED__)
 
    btn = elm_button_add(win);
    evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   elm_button_label_set(btn, "Transit!");
+   elm_object_text_set(btn, "Transit!");
    elm_box_pack_end(box, btn);
    evas_object_show(btn);
 
diff --git a/src/examples/web_example.c b/src/examples/web_example.c
new file mode 100644 (file)
index 0000000..730951b
--- /dev/null
@@ -0,0 +1,623 @@
+/*
+ * gcc -o web_example web_example.c `pkg-config --cflags --libs elementary ewebkit` -D_GNU_SOURCE
+ */
+#include <Elementary.h>
+#ifdef HAVE_ELEMENTARY_WEB
+#include <EWebKit.h>
+#endif
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__ __attribute__((unused))
+#endif
+
+typedef struct _Tab_Data Tab_Data;
+
+typedef struct
+{
+   Evas_Object *win;
+   Evas_Object *main_box;
+   Evas_Object *pager;
+   Evas_Object *url;
+   Evas_Object *default_web;
+   Evas_Object *tabs;
+   Evas_Object *close_tab;
+   Evas_Object *search_box;
+   Evas_Object *search_entry;
+
+   struct {
+        Evas_Object *back;
+        Evas_Object *fwd;
+        Evas_Object *refresh;
+   } nav;
+
+   Tab_Data *current_tab;
+
+   Eina_Bool exiting : 1;
+} App_Data;
+
+struct _Tab_Data
+{
+   Evas_Object *web;
+   App_Data *app;
+   Elm_Toolbar_Item *tab;
+};
+
+static Evas_Object * _web_create_window_cb(void *data, Evas_Object *obj, Eina_Bool js, const Elm_Web_Window_Features *wf);
+
+static void
+nav_button_update(App_Data *ad)
+{
+   Eina_Bool back, fwd;
+
+   back = !elm_web_back_possible(ad->current_tab->web);
+   fwd = !elm_web_forward_possible(ad->current_tab->web);
+
+   elm_object_disabled_set(ad->nav.back, back);
+   elm_object_disabled_set(ad->nav.fwd, fwd);
+}
+
+static void
+tab_current_set(Tab_Data *td)
+{
+   const char *uri;
+
+   if (td == td->app->current_tab)
+     return;
+
+   td->app->current_tab = td;
+
+   uri = elm_web_uri_get(td->web);
+   elm_object_text_set(td->app->url, uri);
+
+   nav_button_update(td->app);
+   elm_entry_icon_visible_set(td->app->url, EINA_TRUE);
+
+   elm_pager_content_promote(td->app->pager, td->web);
+}
+
+static void
+_tab_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Tab_Data *td = data;
+   /* the first toolbar_item_append() calls the select callback before the item
+    * is assigned, so we need a workaround for that. */
+   if (!td->tab)
+     td->tab = event_info;
+   tab_current_set(td);
+}
+
+static void
+_title_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Tab_Data *td = data;
+   const char *title = event_info;
+   char buf[20] = "";
+
+   if (title)
+     strncpy(buf, title, sizeof(buf) - 1);
+   elm_toolbar_item_label_set(td->tab, buf);
+}
+
+static void
+_uri_changed_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Tab_Data *td = data;
+   const char *uri = event_info;
+
+   if (td != td->app->current_tab)
+     return;
+
+   nav_button_update(td->app);
+   elm_object_text_set(td->app->url, uri);
+}
+
+static void
+_web_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Tab_Data *td = data;
+
+   if (td->tab)
+     elm_toolbar_item_del(td->tab);
+
+   free(td);
+}
+
+static void
+_tb_item_del_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   Tab_Data *td = data;
+   if (!td->app->exiting && !elm_toolbar_selected_item_get(obj))
+     {
+        td->app->current_tab = NULL;
+        elm_entry_icon_visible_set(td->app->url, EINA_FALSE);
+        if (td->app->search_box)
+          evas_object_del(td->app->search_box);
+     }
+   td->tab = NULL;
+}
+
+Tab_Data *
+tab_add(App_Data *ad)
+{
+   Tab_Data *td;
+
+   td = calloc(1, sizeof(Tab_Data));
+   if (!td) return NULL;
+
+   td->web = elm_web_add(ad->win);
+   elm_web_window_create_hook_set(td->web, _web_create_window_cb, ad);
+   elm_web_inwin_mode_set(td->web, EINA_TRUE);
+   evas_object_size_hint_weight_set(td->web, EVAS_HINT_EXPAND,
+                                    EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(td->web, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_pager_content_push(ad->pager, td->web);
+
+   td->app = ad;
+   td->tab = elm_toolbar_item_append(td->app->tabs, NULL, "New tab",
+                                     _tab_clicked_cb, td);
+   elm_toolbar_item_del_cb_set(td->tab, _tb_item_del_cb);
+
+   evas_object_data_set(td->web, "tab_data", td);
+
+   evas_object_smart_callback_add(td->web, "title,changed", _title_changed_cb,
+                                  td);
+   evas_object_smart_callback_add(td->web, "uri,changed", _uri_changed_cb, td);
+   evas_object_event_callback_add(td->web, EVAS_CALLBACK_FREE, _web_free_cb,
+                                  td);
+
+   elm_toolbar_item_selected_set(td->tab, EINA_TRUE);
+   return td;
+}
+
+static char *
+uri_sanitize(const char *uri)
+{
+   char *fixed_uri;
+   char *schema;
+   char *tmp;
+
+   if (!uri || !*uri) return NULL;
+
+   tmp = strstr(uri, "://");
+   if (!tmp || (tmp == uri) || (tmp > (uri + 15)))
+     {
+        char *new_uri = NULL;
+        if (ecore_file_exists(uri))
+          {
+             schema = "file";
+             new_uri = ecore_file_realpath(uri);
+          }
+        else
+          schema = "http";
+
+        if (asprintf(&fixed_uri, "%s://%s", schema, new_uri ? new_uri : uri) >
+            0)
+          {
+             free(new_uri);
+             return fixed_uri;
+          }
+        free(new_uri);
+     }
+   else
+     return strdup(uri);
+
+   return NULL;
+}
+
+static void
+tab_uri_set(Tab_Data *td, const char *uri)
+{
+   char *sane_uri = uri_sanitize(uri);
+   elm_web_uri_set(td->web, sane_uri);
+   free(sane_uri);
+}
+
+static void
+_url_activated_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   Tab_Data *td;
+   const char *uri = eina_stringshare_ref(elm_object_text_get(obj));
+
+   if (!ad->current_tab)
+     td = tab_add(ad);
+   else
+     td = ad->current_tab;
+   tab_uri_set(td, uri);
+   eina_stringshare_del(uri);
+}
+
+static void
+_nav_back_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+
+   elm_web_back(ad->current_tab->web);
+}
+
+static void
+_nav_refresh_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   const Evas_Modifier *mods = evas_key_modifier_get(evas_object_evas_get(obj));
+
+   if (evas_key_modifier_is_set(mods, "Shift"))
+     elm_web_reload_full(ad->current_tab->web);
+   else
+     elm_web_reload(ad->current_tab->web);
+}
+
+static void
+_nav_fwd_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+
+   elm_web_forward(ad->current_tab->web);
+}
+
+static void
+_close_tab_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+
+   if (!ad->current_tab)
+     return;
+   evas_object_del(ad->current_tab->web);
+}
+
+static void
+_add_tab_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   tab_add(ad);
+   elm_object_focus_set(ad->url, EINA_TRUE);
+}
+
+static Evas_Object *
+_web_create_window_cb(void *data, Evas_Object *obj __UNUSED__, Eina_Bool js __UNUSED__, const Elm_Web_Window_Features *wf __UNUSED__)
+{
+   App_Data *ad = data;
+   Tab_Data *td;
+
+   td = tab_add(ad);
+   return td->web;
+}
+
+static void
+_win_del_request_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   ad->exiting = EINA_TRUE;
+}
+
+static void
+_win_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   free(data);
+}
+
+static void
+_search_entry_changed_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   const char *text;
+
+   text = elm_object_text_get(obj);
+   elm_web_text_search(ad->current_tab->web, text, EINA_FALSE, EINA_TRUE,
+                       EINA_TRUE);
+   elm_web_text_matches_unmark_all(ad->current_tab->web);
+   elm_web_text_matches_mark(ad->current_tab->web, text, EINA_FALSE, EINA_TRUE,
+                             0);
+}
+
+static void
+_search_entry_activate_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   const char *text;
+
+   text = elm_object_text_get(obj);
+   elm_web_text_search(ad->current_tab->web, text, EINA_FALSE, EINA_TRUE,
+                       EINA_TRUE);
+}
+
+static void
+_search_next_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   const char *text;
+
+   text = elm_object_text_get(ad->search_entry);
+   elm_web_text_search(ad->current_tab->web, text, EINA_FALSE, EINA_TRUE,
+                       EINA_TRUE);
+}
+
+static void
+_search_prev_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   const char *text;
+
+   text = elm_object_text_get(ad->search_entry);
+   elm_web_text_search(ad->current_tab->web, text, EINA_FALSE, EINA_FALSE,
+                       EINA_TRUE);
+}
+
+static void
+_search_close_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   evas_object_del(ad->search_box);
+}
+
+static void
+_search_box_del_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   App_Data *ad = data;
+   ad->search_box = NULL;
+   ad->search_entry = NULL;
+}
+
+static void
+_win_search_trigger_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   Evas_Event_Key_Down *ev = event_info;
+   App_Data *ad = data;
+   Evas_Object *box, *box2, *entry, *btn, *ic;
+
+   if (strcmp(ev->keyname, "f") ||
+       !evas_key_modifier_is_set(ev->modifiers, "Control"))
+     return;
+   if (ad->search_box || !ad->current_tab)
+     return;
+
+   box = elm_box_add(ad->win);
+   elm_box_horizontal_set(box, EINA_TRUE);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_after(ad->main_box, box, ad->url);
+   evas_object_show(box);
+
+   evas_object_event_callback_add(box, EVAS_CALLBACK_DEL, _search_box_del_cb,
+                                  ad);
+
+   entry = elm_entry_add(ad->win);
+   elm_entry_single_line_set(entry, EINA_TRUE);
+   elm_entry_scrollable_set(entry, EINA_TRUE);
+   evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, entry);
+   evas_object_show(entry);
+
+   evas_object_smart_callback_add(entry, "changed", _search_entry_changed_cb,
+                                  ad);
+   evas_object_smart_callback_add(entry, "activated", _search_entry_activate_cb,
+                                  ad);
+
+   box2 = elm_box_add(ad->win);
+   elm_box_horizontal_set(box2, EINA_TRUE);
+   elm_entry_end_set(entry, box2);
+
+   btn = elm_button_add(ad->win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ic = elm_icon_add(ad->win);
+   elm_icon_standard_set(ic, "arrow_up");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _search_prev_cb, ad);
+
+   btn = elm_button_add(ad->win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ic = elm_icon_add(ad->win);
+   elm_icon_standard_set(ic, "arrow_down");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _search_next_cb, ad);
+
+   btn = elm_button_add(ad->win);
+   elm_box_pack_end(box, btn);
+   evas_object_show(btn);
+
+   ic = elm_icon_add(ad->win);
+   elm_icon_standard_set(ic, "close");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _search_close_cb, ad);
+
+   ad->search_box = box;
+   ad->search_entry = entry;
+
+   elm_object_focus_set(entry, EINA_TRUE);
+}
+
+static void
+default_content_set(Evas_Object *web)
+{
+   Evas_Object *view, *frame;
+   const char contents[] = ""
+      "<html>\n"
+      "  <head>\n"
+      "    <title>Nothing to see here, move along</title>\n"
+      "  </head>\n"
+      "  <body>\n"
+      "    <a href=\"http://www.enlightenment.org\" target=\"_blank\">E</a>\n"
+      "    <br />\n"
+      "    <a href=\"http://www.google.com\" target=\"_blank\">Google</a>\n"
+      "    <br />\n"
+      "  </body>\n"
+      "</html>\n";
+
+#ifdef HAVE_ELEMENTARY_WEB
+   view = elm_web_webkit_view_get(web);
+   frame = ewk_view_frame_main_get(view);
+   ewk_frame_contents_set(frame, contents, sizeof(contents) - 1, "text/html",
+                          "UTF-8", NULL);
+#endif
+}
+
+int
+elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
+{
+   Evas_Object *win, *bg, *box, *box2, *btn, *ic, *url, *pager, *tabs, *web;
+   Evas *e;
+   Evas_Modifier_Mask ctrl_mask;
+   App_Data *ad;
+
+   if (!elm_need_web())
+     return -1;
+
+   ad = calloc(1, sizeof(App_Data));
+   if (!ad) return -1;
+
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   win = elm_win_add(NULL, "example-web", ELM_WIN_BASIC);
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   e = evas_object_evas_get(win);
+   ctrl_mask = evas_key_modifier_mask_get(e, "Control");
+   if (!evas_object_key_grab(win, "f", ctrl_mask, 0, EINA_TRUE))
+     fprintf(stderr, "Could not grab trigger for search dialog\n");
+
+   evas_object_smart_callback_add(win, "delete,request", _win_del_request_cb,
+                                  ad);
+   evas_object_event_callback_add(win, EVAS_CALLBACK_KEY_DOWN,
+                                  _win_search_trigger_cb, ad);
+   evas_object_event_callback_add(win, EVAS_CALLBACK_FREE, _win_free_cb, ad);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   box = elm_box_add(win);
+   evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, box);
+   evas_object_show(box);
+
+   url = elm_entry_add(win);
+   elm_entry_single_line_set(url, EINA_TRUE);
+   elm_entry_scrollable_set(url, EINA_TRUE);
+   evas_object_size_hint_weight_set(url, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(url, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, url);
+   evas_object_show(url);
+
+   evas_object_smart_callback_add(url, "activated", _url_activated_cb, ad);
+
+   box2 = elm_box_add(win);
+   elm_box_horizontal_set(box2, EINA_TRUE);
+   elm_entry_icon_set(url, box2);
+   elm_entry_icon_visible_set(url, EINA_FALSE);
+
+   btn = elm_button_add(win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ad->nav.back = btn;
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "arrow_left");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _nav_back_cb, ad);
+
+   btn = elm_button_add(win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ad->nav.refresh = btn;
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "refresh");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _nav_refresh_cb, ad);
+
+   btn = elm_button_add(win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ad->nav.fwd = btn;
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "arrow_right");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _nav_fwd_cb, ad);
+
+   box2 = elm_box_add(win);
+   elm_box_horizontal_set(box2, EINA_TRUE);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, box2);
+   evas_object_show(box2);
+
+   btn = elm_button_add(win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "file");
+   elm_object_content_set(btn, ic);
+
+   evas_object_smart_callback_add(btn, "clicked", _add_tab_cb, ad);
+
+   tabs = elm_toolbar_add(win);
+   elm_toolbar_align_set(tabs, 0.0);
+   elm_toolbar_always_select_mode_set(tabs, EINA_TRUE);
+   elm_toolbar_homogeneous_set(tabs, EINA_FALSE);
+   elm_toolbar_mode_shrink_set(tabs, ELM_TOOLBAR_SHRINK_MENU);
+   evas_object_size_hint_weight_set(tabs, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(tabs, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box2, tabs);
+   evas_object_show(tabs);
+
+   btn = elm_button_add(win);
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   evas_object_smart_callback_add(btn, "clicked", _close_tab_cb, ad);
+
+   ic = elm_icon_add(win);
+   elm_icon_standard_set(ic, "close");
+   elm_object_content_set(btn, ic);
+
+   pager = elm_pager_add(win);
+   evas_object_size_hint_weight_set(pager, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(pager, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, pager);
+   evas_object_show(pager);
+
+   elm_toolbar_menu_parent_set(tabs, pager);
+
+   web = elm_web_add(win);
+   elm_web_window_create_hook_set(web, _web_create_window_cb, ad);
+   elm_web_history_enable_set(web, EINA_FALSE);
+   evas_object_size_hint_weight_set(web, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(web, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_pager_content_push(pager, web);
+
+   default_content_set(web);
+
+   ad->win = win;
+   ad->main_box = box;
+   ad->pager = pager;
+   ad->url = url;
+   ad->default_web = web;
+   ad->tabs = tabs;
+   ad->close_tab = btn;
+
+   evas_object_resize(win, 480, 640);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN();
diff --git a/src/examples/win_example.c b/src/examples/win_example.c
new file mode 100644 (file)
index 0000000..8746b84
--- /dev/null
@@ -0,0 +1,324 @@
+/*
+ * gcc -o win_example win_example.c `pkg-config --cflags --libs elementary ecore-x`
+ */
+#include <Elementary.h>
+#include <Ecore_X.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#else
+# define __UNUSED__ __attribute__((unused))
+# define PACKAGE_DATA_DIR "../../data"
+#endif
+
+static void
+_btn_activate_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   elm_win_activate(data);
+}
+
+static void
+_btn_lower_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   elm_win_lower(data);
+}
+
+static void
+_btn_raise_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   elm_win_raise(data);
+}
+
+static void
+_btn_borderless_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_borderless_get(data);
+   elm_win_borderless_set(data, !flag);
+}
+
+static void
+_btn_shaped_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_shaped_get(data);
+   elm_win_shaped_set(data, !flag);
+}
+
+static void
+_btn_alpha_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_alpha_get(data);
+   elm_win_alpha_set(data, !flag);
+}
+
+static void
+_btn_fullscreen_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_fullscreen_get(data);
+   elm_win_fullscreen_set(data, !flag);
+}
+
+static void
+_btn_maximized_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_maximized_get(data);
+   elm_win_maximized_set(data, !flag);
+}
+
+static void
+_btn_iconified_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_iconified_get(data);
+   elm_win_iconified_set(data, !flag);
+}
+
+static void
+_btn_rotation_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   int angle = elm_win_rotation_get(data);
+   angle = (angle + 90) % 360;
+   elm_win_rotation_set(data, angle);
+}
+
+static void
+_btn_rotation_resize_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   int angle = elm_win_rotation_get(data);
+   angle = (angle + 90) % 360;
+   elm_win_rotation_with_resize_set(data, angle);
+}
+
+static void
+_btn_sticky_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Eina_Bool flag = elm_win_sticky_get(data);
+   elm_win_sticky_set(data, !flag);
+}
+
+static void
+_yes_quit_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   elm_exit();
+}
+
+static void
+_no_quit_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   evas_object_del(data);
+}
+
+static void
+_main_win_del_cb(void *data __UNUSED__, Evas_Object *obj, void *event __UNUSED__)
+{
+   Evas_Object *msg, *box, *box2, *btn, *lbl, *sep;
+
+   msg = elm_notify_add(obj);
+   elm_notify_orient_set(msg, ELM_NOTIFY_ORIENT_CENTER);
+   elm_notify_repeat_events_set(msg, EINA_FALSE);
+   evas_object_show(msg);
+
+   box = elm_box_add(obj);
+   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(msg, box);
+   evas_object_show(box);
+
+   lbl = elm_label_add(obj);
+   elm_object_text_set(lbl, "Really want quit?");
+   evas_object_size_hint_weight_set(lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(lbl, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, lbl);
+   evas_object_show(lbl);
+
+   sep = elm_separator_add(obj);
+   elm_separator_horizontal_set(sep, EINA_TRUE);
+   elm_box_pack_end(box, sep);
+   evas_object_show(sep);
+
+   box2 = elm_box_add(obj);
+   elm_box_horizontal_set(box2, EINA_TRUE);
+   evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(box, box2);
+   evas_object_show(box2);
+
+   btn = elm_button_add(obj);
+   elm_object_text_set(btn, "Yes");
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   evas_object_smart_callback_add(btn, "clicked", _yes_quit_cb, NULL);
+
+   btn = elm_button_add(obj);
+   elm_object_text_set(btn, "No");
+   elm_box_pack_end(box2, btn);
+   evas_object_show(btn);
+
+   evas_object_smart_callback_add(btn, "clicked", _no_quit_cb, msg);
+}
+
+static void
+_force_focus_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   Ecore_X_Window xwin = elm_win_xwindow_get(data);
+   ecore_x_window_focus(xwin);
+}
+
+static void
+_win_focused_cb(void *data, Evas_Object *obj __UNUSED__, void *event __UNUSED__)
+{
+   const char *name = data;
+   printf("Window focused: %s\n", name);
+}
+
+int
+elm_main(int argc __UNUSED__, char *argv[] __UNUSED__)
+{
+   Evas_Object *win, *win2, *bg, *bigbox, *box, *btn, *o;
+
+   win = elm_win_add(NULL, "win-example", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Elm_Win Example");
+   elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
+   evas_object_resize(win, 400, 400);
+   evas_object_show(win);
+
+   evas_object_smart_callback_add(win, "focus,in", _win_focused_cb, "mainwin");
+
+   evas_object_smart_callback_add(win, "delete,request", _main_win_del_cb,
+                                  NULL);
+
+   bg = elm_bg_add(win);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bg);
+   evas_object_show(bg);
+
+   bigbox = elm_box_add(win);
+   elm_box_horizontal_set(bigbox, EINA_TRUE);
+   evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bigbox);
+   evas_object_show(bigbox);
+
+   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_box_pack_end(bigbox, box);
+   evas_object_show(box);
+
+   win2 = elm_win_add(NULL, "sub-win-example", ELM_WIN_DIALOG_BASIC);
+   elm_win_autodel_set(win2, EINA_TRUE);
+   elm_win_title_set(win2, "Managed window");
+   evas_object_show(win2);
+
+   evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb, "managed");
+
+   o = elm_icon_add(win2);
+   elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/logo.png", NULL);
+   elm_icon_scale_set(o, 0, 0);
+   elm_icon_no_scale_set(o, EINA_TRUE);
+   elm_win_resize_object_add(win2, o);
+   evas_object_show(o);
+
+   o = elm_label_add(win);
+   elm_object_text_set(o, "<b>Managed Window</b>");
+   elm_box_pack_end(box, o);
+   evas_object_show(o);
+
+#define WIN_ACTION(name) \
+   do { \
+      btn = elm_button_add(win); \
+      elm_object_text_set(btn, #name); \
+      elm_box_pack_end(box, btn); \
+      evas_object_show(btn); \
+      evas_object_smart_callback_add(btn, "clicked", _btn_##name##_cb, win2); \
+   } while (0)
+
+   WIN_ACTION(activate);
+   WIN_ACTION(lower);
+   WIN_ACTION(raise);
+   WIN_ACTION(borderless);
+   WIN_ACTION(shaped);
+   WIN_ACTION(alpha);
+   WIN_ACTION(fullscreen);
+   WIN_ACTION(maximized);
+   WIN_ACTION(iconified);
+   WIN_ACTION(rotation);
+   WIN_ACTION(rotation_resize);
+   WIN_ACTION(sticky);
+
+   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_box_pack_end(bigbox, box);
+   evas_object_show(box);
+
+   win2 = elm_win_add(NULL, "sub-win-example2", ELM_WIN_BASIC);
+   elm_win_autodel_set(win2, EINA_TRUE);
+   elm_win_title_set(win2, "Non-managed window");
+   elm_win_override_set(win2, EINA_TRUE);
+   evas_object_show(win2);
+
+   evas_object_smart_callback_add(win2, "focus,in", _win_focused_cb,
+                                  "override");
+
+   o = elm_bg_add(win2);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win2, o);
+   evas_object_show(o);
+
+   bigbox = elm_box_add(win2);
+   evas_object_size_hint_weight_set(bigbox, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win2, bigbox);
+   evas_object_show(bigbox);
+
+   o = elm_label_add(win2);
+   elm_object_text_set(o, "This window should have no borders or titlebar.<ps>"
+                       "It was set in override mode, so the Window Manager<ps>"
+                       "should ignore everything about it.<ps>"
+                       "It's up to the program to handle it properly, and some"
+                       "of the actions performed on it may not have any effect."
+                      );
+   elm_box_pack_end(bigbox, o);
+   evas_object_show(o);
+
+   o = elm_entry_add(win2);
+   elm_object_text_set(o, "See if you can focus me");
+   elm_entry_single_line_set(o, EINA_TRUE);
+   elm_entry_scrollable_set(o, EINA_TRUE);
+   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_box_pack_end(bigbox, o);
+   evas_object_show(o);
+
+   o = elm_separator_add(win2);
+   elm_separator_horizontal_set(o, EINA_TRUE);
+   elm_box_pack_end(bigbox, o);
+   evas_object_show(o);
+
+   o = elm_button_add(win2);
+   elm_object_text_set(o, "Focus me");
+   elm_box_pack_end(bigbox, o);
+   evas_object_show(o);
+
+   evas_object_smart_callback_add(o, "clicked", _force_focus_cb, win2);
+
+   o = elm_label_add(win);
+   elm_object_text_set(o, "<b>Override Window</b>");
+   elm_box_pack_end(box, o);
+   evas_object_show(o);
+
+   WIN_ACTION(activate);
+   WIN_ACTION(lower);
+   WIN_ACTION(raise);
+   WIN_ACTION(borderless);
+   WIN_ACTION(shaped);
+   WIN_ACTION(alpha);
+   WIN_ACTION(fullscreen);
+   WIN_ACTION(maximized);
+   WIN_ACTION(iconified);
+   WIN_ACTION(rotation);
+   WIN_ACTION(rotation_resize);
+   WIN_ACTION(sticky);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN();