davemds pushed a commit to branch master.

http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=28812962d505e05abb78085994f22da57d6d11db

commit 28812962d505e05abb78085994f22da57d6d11db
Author: Dave Andreoli <d...@gurumeditation.it>
Date:   Sun Aug 16 16:43:43 2015 +0200

    Rewamped genlist tests
    
    * splitted each test in a single file
    * use new style imports
    * some other small improvements here and there
---
 examples/elementary/test.py                      |  18 +-
 examples/elementary/test_genlist.py              | 840 -----------------------
 examples/elementary/test_genlist_1.py            | 150 ++++
 examples/elementary/test_genlist_2.py            | 227 ++++++
 examples/elementary/test_genlist_decorate.py     | 108 +++
 examples/elementary/test_genlist_decorate_all.py | 111 +++
 examples/elementary/test_genlist_group.py        |  65 ++
 examples/elementary/test_genlist_iteration.py    |  94 +++
 examples/elementary/test_genlist_reorder.py      |  81 +++
 examples/elementary/test_genlist_search.py       |  95 +++
 examples/elementary/test_genlist_sorted.py       |  61 ++
 11 files changed, 1001 insertions(+), 849 deletions(-)

diff --git a/examples/elementary/test.py b/examples/elementary/test.py
index 6e421a7..d33f84c 100755
--- a/examples/elementary/test.py
+++ b/examples/elementary/test.py
@@ -168,15 +168,15 @@ items = [
         ("Gengrid", "test_gengrid", "gengrid_clicked"),
     ]),
     ("Lists - Genlist", [
-        ("Genlist", "test_genlist", "genlist_clicked"),
-        ("Genlist 2", "test_genlist", "genlist2_clicked"),
-        ("Genlist Group", "test_genlist", "genlist3_clicked"),
-        ("Genlist Sorted", "test_genlist", "genlist4_clicked"),
-        ("Genlist Iteration", "test_genlist", "genlist5_clicked"),
-        ("Genlist Decorate Item Mode", "test_genlist", "genlist10_clicked"),
-        ("Genlist Decorate All Mode", "test_genlist", "genlist15_clicked"),
-        ("Genlist Search By Text", "test_genlist", "genlist20_clicked"),
-        ("Genlist Reorder Mode", "test_genlist", "genlist11_clicked"),
+        ("Genlist 1", "test_genlist_1", "test_genlist_1"),
+        ("Genlist 2", "test_genlist_2", "test_genlist_2"),
+        ("Genlist Group", "test_genlist_group", "test_genlist_group"),
+        ("Genlist Sorted", "test_genlist_sorted", "test_genlist_sorted"),
+        ("Genlist Iteration", "test_genlist_iteration", 
"test_genlist_iteration"),
+        ("Genlist Decorate Item Mode", "test_genlist_decorate", 
"test_genlist_decorate"),
+        ("Genlist Decorate All Mode", "test_genlist_decorate_all", 
"test_genlist_decorate_all"),
+        ("Genlist Search by Text", "test_genlist_search", 
"test_genlist_search"),
+        ("Genlist Reorder Mode", "test_genlist_reorder", 
"test_genlist_reorder"),
     ]),
     ("Lists - List", [
         ("List", "test_list", "list_clicked"),
diff --git a/examples/elementary/test_genlist.py 
b/examples/elementary/test_genlist.py
deleted file mode 100644
index 8d0e913..0000000
--- a/examples/elementary/test_genlist.py
+++ /dev/null
@@ -1,840 +0,0 @@
-#!/usr/bin/env python
-# encoding: utf-8
-
-import time
-import sys
-import os
-#if sys.version_info < (3,): range = xrange
-
-from efl import evas
-from efl.evas import EVAS_HINT_EXPAND, EVAS_HINT_FILL, \
-    EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ, \
-    EVAS_ASPECT_CONTROL_VERTICAL, Rectangle
-from efl.ecore import Timer
-from efl import elementary
-from efl.elementary.window import StandardWindow, Window, ELM_WIN_BASIC
-from efl.elementary.background import Background
-from efl.elementary.box import Box
-from efl.elementary.frame import Frame
-from efl.elementary.label import Label
-from efl.elementary.button import Button
-from efl.elementary.list import List
-from efl.elementary.icon import Icon
-from efl.elementary.genlist import Genlist, GenlistItem, GenlistItemClass, \
-    ELM_GENLIST_ITEM_NONE, ELM_OBJECT_SELECT_MODE_ALWAYS, \
-    ELM_OBJECT_SELECT_MODE_DEFAULT, ELM_GENLIST_ITEM_GROUP, \
-    ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY
-from efl.elementary.general import cache_all_flush, ELM_GLOB_MATCH_NOCASE
-from efl.elementary.radio import Radio
-from efl.elementary.check import Check
-from efl.elementary.entry import Entry
-
-
-script_path = os.path.dirname(os.path.abspath(__file__))
-img_path = os.path.join(script_path, "images")
-
-def gl_text_get(obj, part, item_data):
-    return "Item # %i" % (item_data,)
-
-def gl_content_get(obj, part, data):
-    ic = Icon(obj, file=os.path.join(img_path, "logo_small.png"),
-        size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
-    return ic
-
-def gl_state_get(obj, part, item_data):
-    return False
-
-def gl_comp_func(item1, item2):
-    #print(item1.data)
-    #print(item2.data)
-    # If data1 is 'less' than data2, -1 must be returned, if it is 'greater',
-    # 1 must be returned, and if they are equal, 0 must be returned.
-    if item1.data < item2.data:
-        return -1
-    elif item1.data == item2.data:
-        return 0
-    elif item1.data > item2.data:
-        return 1
-    else:
-        print("BAAAAAAAAD Comparison!")
-        return 0
-
-def gl_item_sel(gli, gl, *args, **kwargs):
-    print("\n---GenlistItem selected---")
-    print(gli)
-    print(gl)
-    print(args)
-    print(kwargs)
-    print(("item_data: %s" % gli.data_get()))
-
-def glg_text_get(obj, part, item_data):
-    return "Group # %i" % (item_data,)
-
-def glg_content_get(obj, part, data):
-    ic = Icon(obj, file=os.path.join(img_path, "logo.png"),
-        size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
-    return ic
-
-def _gl_selected(gl, gli, *args, **kwargs):
-    print("\n---Genlist selected---")
-    print(gl)
-    print(gli)
-    print(args)
-    print(kwargs)
-
-def _gl_clicked_double(gl, gli, *args, **kwargs):
-    print("\n---Genlist double clcked---")
-    print(gl)
-    print(gli)
-    print(args)
-    print(kwargs)
-
-def _gl_longpressed(gl, gli, *args, **kwargs):
-    print("\n---Genlist longpressed---")
-    print(gl)
-    print(gli)
-    print(args)
-    print(kwargs)
-
-def _gl_over_click(evas, evt, gl):
-    print("\n---OverRect click---")
-    gli = gl.at_xy_item_get(evt.position.canvas.x, evt.position.canvas.y)
-    if gli:
-        print(gli)
-    else:
-        print("over none")
-
-
-def genlist_clicked(obj, item=None):
-    win = StandardWindow("Genlist", "Genlist test", autodel=True)
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    gl = Genlist(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
-    gl.callback_selected_add(_gl_selected, "arg1", "arg2",
-        kwarg1="kwarg1", kwarg2="kwarg2")
-    gl.callback_clicked_double_add(_gl_clicked_double, "arg1", "arg2",
-        kwarg1="kwarg1", kwarg2="kwarg2")
-    gl.callback_longpressed_add(_gl_longpressed, "arg1", "arg2",
-        kwarg1="kwarg1", kwarg2="kwarg2")
-    bx.pack_end(gl)
-    gl.show()
-
-    over = Rectangle(win.evas_get())
-    over.color_set(0, 0, 0, 0)
-    over.event_callback_add(evas.EVAS_CALLBACK_MOUSE_DOWN, _gl_over_click, gl)
-    over.repeat_events_set(True)
-    over.show()
-    over.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
-    win.resize_object_add(over)
-
-    vbx = Box(win, horizontal=True)
-    bx.pack_end(vbx)
-    vbx.show()
-
-    itc1 = GenlistItemClass(item_style="default",
-                            text_get_func=gl_text_get,
-                            content_get_func=gl_content_get,
-                            state_get_func=gl_state_get)
-
-    bt_50 = Button(win, text="Go to 50")
-    vbx.pack_end(bt_50)
-    bt_50.show()
-
-    bt_1500 = Button(win, text="Go to 1500")
-    vbx.pack_end(bt_1500)
-    bt_1500.show()
-
-    def tooltip_content_cb(gl, item, obj):
-        txt = "Tooltip <b>from callback</b> for item # %d" % item.data
-        return Label(gl, text=txt)
-
-    for i in range(0, 2000):
-        gli = gl.item_append(itc1, i, func=gl_item_sel)
-
-        if i % 2:
-            gli.tooltip_text_set("Static Tooltip for item # %d" % i)
-        else:
-            gli.tooltip_content_cb_set(tooltip_content_cb)
-
-        if i == 50:
-            bt_50.callback_clicked_add(lambda bt, it: it.bring_in(), gli)
-        elif i == 1500:
-            bt_1500.callback_clicked_add(lambda bt, it: it.bring_in(), gli)
-
-    win.resize(480, 800)
-    win.show()
-
-
-def genlist2_clicked(obj, item=None):
-    win = Window("Genlist", ELM_WIN_BASIC, title="Genlist test 2",
-        autodel=True, size=(320, 320))
-
-    bg = Background(win, file=os.path.join(img_path, "plant_01.jpg"),
-        size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bg)
-    bg.show()
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-    gl.show()
-
-    itc1 = GenlistItemClass(item_style="default",
-                            text_get_func=gl_text_get,
-                            content_get_func=gl_content_get,
-                            state_get_func=gl_state_get)
-
-    gl.item_append(itc1, 1001, func=gl_item_sel)
-    gl.item_append(itc1, 1002, func=gl_item_sel)
-    gl.item_append(itc1, 1003, func=gl_item_sel)
-    gl.item_append(itc1, 1004, func=gl_item_sel)
-    gl.item_append(itc1, 1005, func=gl_item_sel)
-    gl.item_append(itc1, 1006, func=gl_item_sel)
-    gl.item_append(itc1, 1007, func=gl_item_sel)
-
-    bx.pack_end(gl)
-
-    bx2 = Box(win, horizontal=True, homogeneous=True,
-        size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
-
-    def my_gl_first(bt, gl):
-        gli = gl.first_item
-        if gli:
-            gli.show()
-            gli.selected = True
-
-    bt = Button(win, text="/\\", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_first, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    def my_gl_last(bt, gl):
-        gli = gl.last_item_get()
-        if gli:
-            gli.show()
-            gli.selected = True
-
-    bt = Button(win, text="\\/", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_last, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    def my_gl_disable(bt, gl):
-        gli = gl.selected_item
-        if gli:
-            gli.disabled = True
-            gli.selected = False
-            gli.update()
-        else:
-            print("no item selected")
-
-    bt = Button(win, text="#", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_disable, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    def my_gl_update_all(bt, gl):
-        gli = gl.first_item_get()
-        i = 0
-        while gli:
-            gli.update()
-            print(i)
-            i += 1
-            gli = gli.next_get()
-
-    bt = Button(win, text="U", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_update_all, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-    bx.pack_end(bx2)
-    bx2.show()
-
-
-    bx2 = Box(win, horizontal=True, homogeneous=True,
-        size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
-
-
-    def my_gl_clear(bt, gl):
-        gl.clear()
-
-    bt = Button(win, text="X", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_clear, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    class MyGlAdd:
-        i = 0
-    def my_gl_add(bt, gl, itc1):
-        gl.item_append(itc1, MyGlAdd.i, func=gl_item_sel)
-        MyGlAdd.i += 1
-
-    bt = Button(win, text="+", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_add, gl, itc1)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    def my_gl_del(bt, gl):
-        gli = gl.selected_item_get()
-        if gli:
-            gli.delete()
-        else:
-            print("no item selected")
-
-    bt = Button(win, text="-", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_del, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-    bx.pack_end(bx2)
-    bx2.show()
-
-    bx2 = Box(win, horizontal=True, homogeneous=True,
-        size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
-
-
-    class MyGlInsertBefore:
-        i = 0
-    def my_gl_insert_before(bt, gl, itc1):
-        gli = gl.selected_item_get()
-        if gli:
-            gl.item_insert_before(itc1, MyGlInsertBefore.i, gli,
-                func=gl_item_sel)
-            MyGlInsertBefore.i += 1
-        else:
-            print("no item selected")
-
-    bt = Button(win, text="+ before", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_insert_before, gl, itc1)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    class MyGlInsertAfter:
-        i = 0
-    def my_gl_insert_after(bt, gl, itc1):
-        gli = gl.selected_item_get()
-        if gli:
-            gl.item_insert_after(itc1, MyGlInsertAfter.i, gli, 
func=gl_item_sel)
-            MyGlInsertAfter.i += 1
-        else:
-            print("no item selected")
-
-    bt = Button(win, text="+ after", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_insert_after, gl, itc1)
-    bx2.pack_end(bt)
-    bt.show()
-
-
-    def my_gl_flush(bt, gl):
-        def my_gl_flush_delay():
-            cache_all_flush()
-        Timer(1.2, my_gl_flush_delay)
-    bt = Button(win, text="Flush", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(my_gl_flush, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-    bx.pack_end(bx2)
-    bx2.show()
-
-    win.show()
-
-
-def genlist3_clicked(obj, item=None):
-    win = StandardWindow("Genlist", "Genlist Group test", autodel=True,
-        size=(320, 320))
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(gl)
-    gl.show()
-
-    itc_i = GenlistItemClass(item_style="default",
-                             text_get_func=gl_text_get,
-                             content_get_func=gl_content_get,
-                             state_get_func=gl_state_get)
-
-    itc_g = GenlistItemClass(item_style="group_index",
-                             text_get_func=glg_text_get,
-                             content_get_func=glg_content_get)
-
-    for i in range(300):
-        if i % 10 == 0:
-            git = gl.item_append(itc_g, i/10,
-                                 flags=ELM_GENLIST_ITEM_GROUP)
-            git.select_mode_set(ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
-        gl.item_append(itc_i, i, git)
-
-    win.show()
-
-def genlist4_clicked(obj, item=None):
-    win = StandardWindow("Genlist", "Genlist sorted insert test", autodel=True,
-        size=(320, 320))
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(gl)
-    gl.show()
-
-    itc_i = GenlistItemClass(item_style="default",
-                             text_get_func=gl_text_get,
-                             content_get_func=gl_content_get,
-                             state_get_func=gl_state_get)
-
-    for i in range(100,-1,-1):
-        GenlistItem(itc_i, i).sorted_insert(gl, gl_comp_func)
-
-    win.show()
-
-def genlist5_clicked(obj, item=None):
-    win = StandardWindow("Genlist", "Genlist iteration test", autodel=True,
-        size=(320, 320))
-
-    gl = Genlist(win, homogeneous=True, size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(gl)
-    gl.show()
-
-    itc_i = GenlistItemClass(item_style="default",
-                             text_get_func=gl_text_get,
-                             content_get_func=gl_content_get,
-                             state_get_func=gl_state_get)
-
-    item_count = 10000
-
-    t1 = time.time()
-    for i in range(item_count):
-        GenlistItem(itc_i, i).append_to(gl)
-    t2 = time.time()
-
-    assert(len(gl) == gl.items_count)
-
-    t3 = time.time()
-    it = gl.first_item
-    while it:
-        d = it.data
-        it = it.next
-    t4 = time.time()
-
-    assert(d == item_count-1)
-
-    t5 = time.time()
-    for it in gl:
-        e = it.data
-    t6 = time.time()
-
-    assert(e == item_count-1)
-    assert(it in gl)
-
-    print("Time to add {0} items:".format(item_count))
-    print(t2-t1)
-    print("Time to iterate item data over {0} items using "
-        "it.next:".format(item_count))
-    print(t4-t3)
-    print("Time to iterate item data over {0} items using "
-        "a python iterator:".format(item_count))
-    print(t6-t5)
-
-    win.show()
-
-mode_type = ["slide", "rotate"]
-
-class ItemClass10(GenlistItemClass):
-    def text_get(self, obj, part, data):
-        t = data
-        if part == "elm.text.mode":
-            return "Mode # %i" % (t,)
-        else:
-            return "Item # %i" % (t,)
-
-    def content_get(self, obj, part, data):
-        ic = Icon(obj)
-        if part == "elm.swallow.end":
-            f = os.path.join(img_path, "bubble.png")
-        else:
-            f = os.path.join(img_path, "logo_small.png")
-        ic.file = f
-        ic.size_hint_aspect = EVAS_ASPECT_CONTROL_VERTICAL, 1, 1
-        return ic
-
-def gl_sel10(it, gl, data):
-    rd = data[1]
-    v = rd.value
-    if v:
-        it.decorate_mode_set(mode_type[v], True)
-
-def my_gl_mode_right(obj, it, rd):
-    v = rd.value
-    if not v:
-        it.decorate_mode_set(mode_type[v], True)
-
-def my_gl_mode_left(obj, it, rd):
-    v = rd.value
-    if not v:
-        it.decorate_mode_set(mode_type[v], False)
-
-def my_gl_mode_cancel(obj, it, rd):
-    print("drag")
-    v = rd.value
-    glit = obj.decorated_item
-    if glit:
-        glit.decorate_mode_set(mode_type[v], False)
-
-def genlist10_clicked(obj, item=None):
-    win = StandardWindow("genlist-decorate-item-mode",
-        "Genlist Decorate Item Mode", autodel=True, size=(520, 520))
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    bx2 = Box(win)
-    bx2.show()
-
-    fr = Frame(win, text="Decorate Item Mode Type", content=bx2)
-    bx.pack_end(fr)
-    fr.show()
-
-    rd = Radio(win, size_hint_weight=EXPAND_BOTH, state_value=0,
-        text="Slide : Sweep genlist items to the right.")
-    rd.show()
-    bx2.pack_end(rd)
-    rdg = rd
-
-    rd = Radio(win, size_hint_weight=EXPAND_BOTH, state_value=1,
-        text = "Rotate : Click each item.")
-    rd.group_add(rdg)
-    rd.show()
-    bx2.pack_end(rd)
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-    gl.callback_drag_start_right_add(my_gl_mode_right, rdg)
-    gl.callback_drag_start_left_add(my_gl_mode_left, rdg)
-    gl.callback_drag_start_up_add(my_gl_mode_cancel, rdg)
-    gl.callback_drag_start_down_add(my_gl_mode_cancel, rdg)
-    gl.show()
-
-    itc10 = ItemClass10(item_style="default", decorate_item_style="mode")
-    itc10.state_get = gl_state_get
-
-    for i in range(1000, 1050):
-        GenlistItem(item_class=itc10,
-            item_data=i,
-            parent_item=None,
-            flags=ELM_GENLIST_ITEM_NONE,
-            func=gl_sel10,
-            func_data=(i, rdg)
-            ).append_to(gl)
-
-    bx.pack_end(gl)
-
-    win.size = 520, 520
-    win.show()
-
-
-def edit_icon_clicked_cb(ic, data):
-    item = data[2]
-    item.delete()
-
-class ItemClass15(GenlistItemClass):
-    def text_get(self, obj, part, data):
-        return "Item #%i" % (data[0])
-
-    def content_get(self, obj, part, data):
-        checked = data[1]
-
-        # "edit" EDC layout is like below. each part is swallow part.
-        # the existing item is swllowed to elm.swallow.edit.content part.
-        # --------------------------------------------------------------------
-        # | elm.edit.icon.1 | elm.swallow.decorate.content | elm.edit.icon,2 |
-        # --------------------------------------------------------------------
-
-        if part == "elm.swallow.end":
-            ic = Icon(obj, file=os.path.join(img_path, "bubble.png"),
-                size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
-            return ic
-        elif part == "elm.edit.icon.1":
-            ck = Check(obj, state=checked, propagate_events=False)
-            ck.show()
-            return ck
-        elif part == "elm.edit.icon.2":
-            icn = Icon(obj, file=os.path.join(img_path, "icon_06.png"),
-                propagate_events=False,
-                size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
-            icn.callback_clicked_add(edit_icon_clicked_cb, data)
-            return icn
-        else:
-            return
-
-    def delete(obj, *args):
-        print("item deleted.")
-
-def gl15_sel(it, gl, data):
-    checked = data[1]
-    if gl.decorate_mode:
-        if not data[1]:
-            data[1] = True
-        else:
-            data[1] = False
-    it.update()
-
-def gl15_deco_all_mode(obj, gl):
-    gl.decorate_mode = True
-    gl.select_mode = ELM_OBJECT_SELECT_MODE_ALWAYS
-
-def gl15_normal_mode(obj, gl):
-    gl.decorate_mode = False
-    gl.select_mode = ELM_OBJECT_SELECT_MODE_DEFAULT
-
-def genlist15_clicked(obj, item=None):
-    win = StandardWindow("genlist-decorate-all-mode",
-        "Genlist Decorate All Mode", autodel=True, size=(520, 520))
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-    gl.show()
-
-    itc15 = ItemClass15(item_style="default", decorate_all_item_style="edit")
-    itc15.state_get = gl_state_get
-
-    for i in range(100):
-        ck = Check(gl)
-        data = [i, False]
-        it = GenlistItem(item_class=itc15,
-            item_data=data,
-            parent_item=None,
-            flags=ELM_GENLIST_ITEM_NONE,
-            func=gl15_sel,
-            func_data=data,
-            ).append_to(gl)
-
-        data.append(it)
-
-    bx.pack_end(gl)
-    bx.show()
-
-    bx2 = Box(win, horizontal=True, homogeneous=True,
-        size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
-
-    bt = Button(win, text="Decorate All mode", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(gl15_deco_all_mode, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-    bt = Button(win, text="Normal mode", size_hint_align=FILL_BOTH,
-        size_hint_weight=EXPAND_HORIZ)
-    bt.callback_clicked_add(gl15_normal_mode, gl)
-    bx2.pack_end(bt)
-    bt.show()
-
-    bx.pack_end(bx2)
-    bx2.show()
-
-    win.show()
-
-### Genlist search by text
-cities = ("Albany","Annapolis","Atlanta","Augusta","Austin","Baton Rouge",
-"Bismarck","Boise","Boston","Carson City","Charleston","Cheyenne","Columbia",
-"Columbus","Concord","Denver","Des Moines","Dover","Frankfort","Harrisburg",
-"Hartford","Helena","Honolulu","Indianapolis","Jackson","Jefferson City",
-"Juneau","Lansing","Lincoln","Little Rock","Madison","Montgomery","Montpelier",
-"Nashville","Oklahoma City","Olympia","Phoenix","Pierre","Providence",
-"Raleigh","Richmond","Sacramento","Saint Paul","Salem","Salt Lake City",
-"Santa Fe","Springfield","Tallahassee","Topeka","Trenton"
-)
-
-class ItemClass20(GenlistItemClass):
-    def text_get(self, obj, part, data):
-        if part == "elm.text":
-            return data
-
-    def content_get(self, obj, part, data):
-        if part == "elm.swallow.icon":
-            return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
-
-def genlist20_search_cb(en, gl, tg):
-    flags = ELM_GLOB_MATCH_NOCASE if tg.state == False else 0
-    from_item = gl.selected_item.next if gl.selected_item else None
-
-    item = gl.search_by_text_item_get(from_item, "elm.text", en.text, flags)
-    if item:
-        item.selected = True
-        en.focus = True
-    elif gl.selected_item:
-        gl.selected_item.selected = False
-
-def genlist20_clicked(obj, item=None):
-    win = StandardWindow("genlist-search-by-text",
-        "Genlist Search By Text", autodel=True, size=(300, 520))
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    lb = Label(win)
-    lb.text = \
-    "<align=left>This example show the usage of 
search_by_text_item_get().<br>" \
-    "Enter a search string and press Enter to show the next result.<br>" \
-    "Search will start from the selected item (not included).<br>" \
-    "You can search using glob patterns.</align>"
-    fr = Frame(win, text="Information", content=lb,
-               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
-    bx.pack_end(fr)
-    fr.show()
-
-    tg = Check(win, style="toggle", text="Case Sensitive Search");
-    bx.pack_end(tg)
-    tg.show()
-
-    bx_entry = Box(win, horizontal=True,
-                   size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
-    bx.pack_end(bx_entry)
-    bx_entry.show()
-
-    lb = Label(win, text="Search:")
-    bx_entry.pack_end(lb)
-    lb.show()
-
-    en = Entry(win, single_line=True, scrollable=True,
-               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
-    en.part_text_set("guide", "Type the search query")
-    en.callback_activated_add(genlist20_search_cb, gl, tg)
-    bx_entry.pack_end(en)
-    en.show()
-    en.focus = True
-
-    bx.pack_end(gl)
-    gl.show()
-
-    itc20 = ItemClass20()
-    for name in cities:
-        gl.item_append(itc20, name)
-
-    win.show()
-
-
-### Genlist reorder mode
-class ItemClass11(GenlistItemClass):
-    def text_get(self, obj, part, data):
-        if part == "elm.text":
-            return "Item # %d" % data
-
-    def content_get(self, obj, part, data):
-        if part == "elm.swallow.icon":
-            return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
-
-def genlist11_focus_highlight_ck_changed_cb(chk, win):
-    win.focus_highlight_enabled = chk.state
-
-def genlist11_reorder_tg_changed_cb(chk, gl):
-    gl.reorder_mode = chk.state
-
-def genlist11_clicked(obj, item=None):
-    win = StandardWindow("genlist-reorder-mode", "Genlist Reorder Mode",
-                         autodel=True, size=(350, 500))
-
-    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
-
-    bx = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(bx)
-    bx.show()
-
-    lb = Label(win)
-    lb.text = "<align=left>Enable reorder mode if you want to move items.<br>" 
\
-              "To move longress with mouse.</align>"
-    fr = Frame(win, text="Reorder Mode", content=lb,
-               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
-    bx.pack_end(fr)
-    fr.show()
-
-    hbx = Box(win, horizontal=True, padding=(20,0),
-              size_hint_weight=EXPAND_HORIZ)
-    bx.pack_end(hbx)
-    hbx.show()
-
-    tg = Check(win, style="toggle", text="Reorder Mode:")
-    tg.callback_changed_add(genlist11_reorder_tg_changed_cb, gl)
-    hbx.pack_end(tg)
-    tg.show()
-
-    ck = Check(win, text="Focus Highlight")
-    ck.state = win.focus_highlight_enabled
-    ck.callback_changed_add(genlist11_focus_highlight_ck_changed_cb, win)
-    hbx.pack_end(ck)
-    ck.show()
-
-    itc11 = ItemClass11()
-    for i in range(1,50):
-        gl.item_append(itc11, i)
-    bx.pack_end(gl)
-    gl.show()
-
-    win.show()
-
-if __name__ == "__main__":
-    win = StandardWindow("test", "python-elementary test application",
-        size=(320,520))
-    win.callback_delete_request_add(lambda o: elementary.exit())
-
-    box0 = Box(win, size_hint_weight=EXPAND_BOTH)
-    win.resize_object_add(box0)
-    box0.show()
-
-    lb = Label(win)
-    lb.text_set("Please select a test from the list below<br>"
-                 "by clicking the test button to show the<br>"
-                 "test window.")
-    lb.show()
-
-    fr = Frame(win, text="Information", content=lb)
-    box0.pack_end(fr)
-    fr.show()
-
-    items = [
-        ("Genlist", genlist_clicked),
-        ("Genlist 2", genlist2_clicked),
-        ("Genlist Group", genlist3_clicked),
-        ("Genlist Sorted", genlist4_clicked),
-        ("Genlist Iteration", genlist5_clicked),
-        ("Genlist Decorate Item Mode", genlist10_clicked),
-        ("Genlist Decorate All Mode", genlist15_clicked),
-        ("Genlist Search By Text", genlist20_clicked),
-        ("Genlist Reorder Mode", genlist11_clicked),
-    ]
-
-    li = List(win, size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
-    box0.pack_end(li)
-    li.show()
-
-    for item in items:
-        li.item_append(item[0], callback=item[1])
-
-    li.go()
-
-    win.show()
-    elementary.run()
diff --git a/examples/elementary/test_genlist_1.py 
b/examples/elementary/test_genlist_1.py
new file mode 100644
index 0000000..a7e0cd3
--- /dev/null
+++ b/examples/elementary/test_genlist_1.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+
+from efl.evas import Rectangle, EXPAND_BOTH, FILL_BOTH, 
EVAS_CALLBACK_MOUSE_DOWN
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Box, Label, Button, Icon, \
+    Genlist, GenlistItemClass, ELM_LIST_COMPRESS
+
+
+# item class "classic" implementation method
+def itc1_text_get(obj, part, item_data):
+    return "Item # %i" % item_data
+
+def itc1_content_get(obj, part, item_data):
+    if part == 'elm.swallow.icon':
+        return  Icon(obj, standard='user-home')
+    elif part == 'elm.swallow.end':
+        return  Icon(obj, standard='user-trash')
+
+itc1 = GenlistItemClass(item_style="default",
+                        text_get_func=itc1_text_get,
+                        content_get_func=itc1_content_get)
+
+
+# item class "subclass" implementation method
+class MyItemClass(GenlistItemClass):
+    def __init__(self):
+        GenlistItemClass.__init__(self, item_style="default")
+
+    def text_get(self, obj, part, item_data):
+        return "Item # %i (itc2)" % item_data
+
+    def content_get(self, obj, part, item_data):
+        if part == 'elm.swallow.icon':
+            return  Icon(obj, standard='user-trash')
+        elif part == 'elm.swallow.end':
+            return  Icon(obj, standard='user-home')
+
+itc2 = MyItemClass()
+
+
+# list items callbacks
+def item_selected_cb(item, gl, item_data):
+    print("\n---GenlistItem selected---")
+    print(item)
+    print(gl)
+    print(("item_data: %s" % item_data))
+
+
+# list callbacks
+def list_selected_cb(gl, gli, *args, **kwargs):
+    print("\n---Genlist selected---")
+    print(gl)
+    print(gli)
+    print(args)
+    print(kwargs)
+
+def list_clicked_double_cb(gl, gli):
+    print("\n---Genlist double clcked---")
+    print(gl)
+    print(gli)
+
+def list_longpressed_cb(gl, gli):
+    print("\n---Genlist longpressed---")
+    print(gl)
+    print(gli)
+
+
+# over rect callbacks
+def rect_mouse_down_cb(evas, evt, gl):
+    print("\n---OverRect click---")
+    item, pos = gl.at_xy_item_get(evt.position.canvas.x, evt.position.canvas.y)
+    if item:
+        print("Over item: %s" % item)
+        print("At pos: %d" % pos)
+    else:
+        print("Over none")
+
+# tooltip creation function
+def tooltip_content_cb(gl, item, obj):
+    txt = "Tooltip <b>from callback</b> for item # %d" % item.data
+    return Label(gl, text=txt)
+
+
+def test_genlist_1(parent):
+    win = StandardWindow("Genlist", "Genlist test 1",
+                         size=(480, 800), autodel=True)
+
+    # main vertical box
+    box = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(box)
+    box.show()
+
+    # Genlist
+    gl = Genlist(win, homogeneous=True, mode=ELM_LIST_COMPRESS,
+                 size_hint_weight=EXPAND_BOTH, size_hint_align=FILL_BOTH)
+    gl.callback_selected_add(list_selected_cb, "arg1", "arg2",
+                             kwarg1="kwarg1", kwarg2="kwarg2")
+    gl.callback_clicked_double_add(list_clicked_double_cb)
+    gl.callback_longpressed_add(list_longpressed_cb)
+    box.pack_end(gl)
+    gl.show()
+
+    # over evas rectangle (transparent, used to catch mouse events)
+    over = Rectangle(win.evas, color=(0,0,0,0), repeat_events=True,
+                     size_hint_expand=EXPAND_BOTH)
+    over.event_callback_add(EVAS_CALLBACK_MOUSE_DOWN, rect_mouse_down_cb, gl)
+    win.resize_object_add(over)
+    over.show()
+
+    # buttons
+    vbox = Box(win, horizontal=True)
+    box.pack_end(vbox)
+    vbox.show()
+
+    bt_50 = Button(win, text="Go to 50")
+    vbox.pack_end(bt_50)
+    bt_50.show()
+
+    bt_1500 = Button(win, text="Go to 1500")
+    vbox.pack_end(bt_1500)
+    bt_1500.show()
+
+    # populate the genlist
+    for i in range(0, 2000):
+        
+        if i % 2:
+            item = gl.item_append(itc1, i, func=item_selected_cb)
+            item.tooltip_text_set("Static Tooltip for item # %d" % i)
+        else:
+            item = gl.item_append(itc2, i, func=item_selected_cb)
+            item.tooltip_content_cb_set(tooltip_content_cb)
+
+        if i == 50:
+            bt_50.callback_clicked_add(lambda bt, it: it.bring_in(), item)
+        elif i == 1500:
+            bt_1500.callback_clicked_add(lambda bt, it: it.bring_in(), item)
+
+    # show the window
+    win.show()
+
+
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_1(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_2.py 
b/examples/elementary/test_genlist_2.py
new file mode 100644
index 0000000..de866f5
--- /dev/null
+++ b/examples/elementary/test_genlist_2.py
@@ -0,0 +1,227 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ
+
+from efl import elementary as elm
+from efl.elementary import Window, Background, Box, Button, Icon, \
+    Genlist, GenlistItemClass
+
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+# item class functions
+def gl_text_get(obj, part, item_data):
+    return "Item # %i" % (item_data,)
+
+def gl_content_get(obj, part, item_data):
+    ic = Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+    return ic
+
+# genlist callbacks
+def item_selected_cb(item, gl, item_data):
+    print("\n---GenlistItem selected---")
+    print(item)
+    print(gl)
+    print(("item_data: %s" % item_data))
+
+
+# just an auto incrementing counter
+class MyCounter:
+    def __init__(self):
+        self._i = 0
+
+    @property
+    def i(self):
+        self._i += 1
+        return self._i
+
+my_counter = MyCounter()
+
+
+def test_genlist_2(parent):
+    win = Window("Genlist", elm.ELM_WIN_BASIC, title="Genlist test 2",
+                 autodel=True, size=(320, 320))
+
+    # window background
+    bg = Background(win, file=os.path.join(img_path, "plant_01.jpg"),
+                    size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(bg)
+    bg.show()
+
+    # main vertical box
+    box = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(box)
+    box.show()
+
+    # the Genlist widget
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    gl.show()
+    box.pack_end(gl)
+
+    itc1 = GenlistItemClass(item_style="default",
+                            text_get_func=gl_text_get,
+                            content_get_func=gl_content_get)
+
+    gl.item_append(itc1, 1001, func=item_selected_cb)
+    gl.item_append(itc1, 1002, func=item_selected_cb)
+    gl.item_append(itc1, 1003, func=item_selected_cb)
+    gl.item_append(itc1, 1004, func=item_selected_cb)
+    gl.item_append(itc1, 1005, func=item_selected_cb)
+    gl.item_append(itc1, 1006, func=item_selected_cb)
+    gl.item_append(itc1, 1007, func=item_selected_cb)
+
+
+    ### horizontal buttons box
+    box2 = Box(win, horizontal=True, homogeneous=True,
+              size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
+    box.pack_end(box2)
+    box2.show()
+
+    # select first item
+    def select_first_item_cb(bt, gl):
+        gli = gl.first_item
+        if gli:
+            gli.show()
+            gli.selected = True
+
+    bt = Button(win, text="First", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(select_first_item_cb, gl)
+    box2.pack_end(bt)
+    bt.show()
+
+    # select last item
+    def select_last_item_cb(bt, gl):
+        gli = gl.last_item_get()
+        if gli:
+            gli.show()
+            gli.selected = True
+
+    bt = Button(win, text="Last", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(select_last_item_cb, gl)
+    box2.pack_end(bt)
+    bt.show()
+
+    # disable item
+    def disable_item_cb(bt, gl):
+        gli = gl.selected_item
+        if gli:
+            gli.disabled = True
+        else:
+            print("no item selected")
+
+    bt = Button(win, text="Disable", size_hint_align=FILL_BOTH,
+        size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(disable_item_cb, gl)
+    box2.pack_end(bt)
+    bt.show()
+
+    # update all items
+    def update_all_cb(bt, gl):
+        gli = gl.first_item_get()
+        while gli:
+            print("Item data: %d" % gli.data)
+            gli.update()
+            gli = gli.next_get()
+
+    bt = Button(win, text="Update all", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(update_all_cb, gl)
+    box2.pack_end(bt)
+    bt.show()
+
+
+    ### horizontal buttons box
+    box2 = Box(win, horizontal=True, homogeneous=True,
+              size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
+    box.pack_end(box2)
+    box2.show()
+
+    # genlist clear
+    bt = Button(win, text="Clear", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(lambda b: gl.clear())
+    box2.pack_end(bt)
+    bt.show()
+
+    # genlist apend
+    def append_item_cb(bt, gl, itc1):
+        gl.item_append(itc1, my_counter.i, func=item_selected_cb)
+
+    bt = Button(win, text="Append", size_hint_align=FILL_BOTH,
+        size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(append_item_cb, gl, itc1)
+    box2.pack_end(bt)
+    bt.show()
+
+    # item delete
+    def delete__item_cb(bt, gl):
+        gli = gl.selected_item_get()
+        if gli:
+            gli.delete()
+        else:
+            print("no item selected")
+
+    bt = Button(win, text="Delete", size_hint_align=FILL_BOTH,
+        size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(delete__item_cb, gl)
+    box2.pack_end(bt)
+    bt.show()
+
+
+    ### horizontal buttons box
+    box2 = Box(win, horizontal=True, homogeneous=True,
+              size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
+    box.pack_end(box2)
+    box2.show()
+
+    # insert before
+    def insert_before_cb(bt):
+        gli = gl.selected_item_get()
+        if gli:
+            gl.item_insert_before(itc1, my_counter.i, gli,
+                                  func=item_selected_cb)
+        else:
+            print("no item selected")
+
+    bt = Button(win, text="Insert before", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(insert_before_cb)
+    box2.pack_end(bt)
+    bt.show()
+
+    # insert after
+    def insert_after_cb(bt):
+        gli = gl.selected_item_get()
+        if gli:
+            gl.item_insert_after(itc1, my_counter.i, gli, 
func=item_selected_cb)
+        else:
+            print("no item selected")
+
+    bt = Button(win, text="Insert after", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(insert_after_cb)
+    box2.pack_end(bt)
+    bt.show()
+
+    # flush
+    bt = Button(win, text="Flush", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(lambda b: elm.cache_all_flush())
+    box2.pack_end(bt)
+    bt.show()
+
+    # show the whole window
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_2(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_decorate.py 
b/examples/elementary/test_genlist_decorate.py
new file mode 100644
index 0000000..f4a0523
--- /dev/null
+++ b/examples/elementary/test_genlist_decorate.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ, \
+    EVAS_ASPECT_CONTROL_VERTICAL
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, Box, Frame, Radio, \
+    Genlist, GenlistItem, GenlistItemClass
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+# genlist items class
+class MyItemClass(GenlistItemClass):
+    def text_get(self, obj, part, item_data):
+        if part == "elm.text.mode":
+            return "Mode # %i" % item_data
+        else:
+            return "Item # %i" % item_data
+
+    def content_get(self, obj, part, item_data):
+        ic = Icon(obj)
+        if part == "elm.swallow.end":
+            f = os.path.join(img_path, "bubble.png")
+        else:
+            f = os.path.join(img_path, "logo_small.png")
+        ic.file = f
+        ic.size_hint_aspect = EVAS_ASPECT_CONTROL_VERTICAL, 1, 1
+        return ic
+
+mode_type = ["slide", "rotate"]
+
+# genlist callbacks
+def gl_selected_cb(gl, it, rdg):
+    val = rdg.value
+    if val == 1:
+        it.decorate_mode_set(mode_type[val], True)
+
+def gl_drag_start_right_cb(obj, it, rdg):
+    val = rdg.value
+    if val == 0:
+        it.decorate_mode_set(mode_type[val], True)
+
+def gl_drag_start_left_cb(obj, it, rdg):
+    val = rdg.value
+    if val == 0:
+        it.decorate_mode_set(mode_type[val], False)
+
+def gl_drag_end_cb(obj, it, rdg):
+    print("drag")
+    val = rdg.value
+    glit = obj.decorated_item
+    if glit:
+        glit.decorate_mode_set(mode_type[val], False)
+
+
+def test_genlist_decorate(parent):
+    win = StandardWindow("Genlist", "Genlist Decorate Item Mode",
+                         size=(520,520), autodel=True)
+
+    bx = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(bx)
+    bx.show()
+
+    bx2 = Box(win)
+    bx2.show()
+
+    fr = Frame(win, text="Decorate Item Mode Type", content=bx2)
+    bx.pack_end(fr)
+    fr.show()
+
+    rdg = Radio(win, size_hint_weight=EXPAND_BOTH, state_value=0,
+               text="Slide : Sweep genlist items to the right.")
+    rdg.show()
+    bx2.pack_end(rdg)
+
+    rd = Radio(win, size_hint_weight=EXPAND_BOTH, state_value=1,
+        text = "Rotate : Click each item.")
+    rd.group_add(rdg)
+    rd.show()
+    bx2.pack_end(rd)
+
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    gl.callback_selected_add(gl_selected_cb, rdg)
+    gl.callback_drag_start_right_add(gl_drag_start_right_cb, rdg)
+    gl.callback_drag_start_left_add(gl_drag_start_left_cb, rdg)
+    gl.callback_drag_start_up_add(gl_drag_end_cb, rdg)
+    gl.callback_drag_start_down_add(gl_drag_end_cb, rdg)
+    bx.pack_end(gl)
+    gl.show()
+
+    itc = MyItemClass(item_style="default", decorate_item_style="mode")
+
+    for i in range(1000, 1050):
+        gl.item_append(itc, i)
+
+    win.size = 520, 520
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_decorate(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_decorate_all.py 
b/examples/elementary/test_genlist_decorate_all.py
new file mode 100644
index 0000000..1ee3ec5
--- /dev/null
+++ b/examples/elementary/test_genlist_decorate_all.py
@@ -0,0 +1,111 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ, \
+    EVAS_ASPECT_CONTROL_VERTICAL
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, Box, Button, Check, \
+    Genlist, GenlistItem, GenlistItemClass
+
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+def edit_icon_clicked_cb(ic, item_data):
+    item = item_data[2]
+    item.delete()
+
+# genlist items class
+class MyItemClass(GenlistItemClass):
+    def text_get(self, obj, part, item_data):
+        return "Item #%i" % (item_data[0])
+
+    def content_get(self, obj, part, item_data):
+        # "edit" EDC layout is like below. each part is swallow part.
+        # the existing item is swllowed to elm.swallow.edit.content part.
+        # --------------------------------------------------------------------
+        # | elm.edit.icon.1 | elm.swallow.decorate.content | elm.edit.icon,2 |
+        # --------------------------------------------------------------------
+
+        if part == "elm.swallow.end":
+            return Icon(obj, file=os.path.join(img_path, "bubble.png"),
+                        size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
+        elif part == "elm.edit.icon.1":
+            checked = item_data[1]
+            return Check(obj, state=checked)
+        elif part == "elm.edit.icon.2":
+            ic = Icon(obj, file=os.path.join(img_path, "icon_06.png"),
+                      propagate_events=False,
+                      size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
+            ic.callback_clicked_add(edit_icon_clicked_cb, item_data)
+            return ic
+
+    def delete(self, obj, item_data):
+        print("item deleted.")
+
+
+# genlist callbacks
+def gl_item_selected_cb(gl, it):
+    if gl.decorate_mode:
+        checked = it.data[1]
+        it.data[1] = not checked
+        it.update()
+
+def deco_all_mode_cb(btn, gl):
+    gl.decorate_mode = True
+    gl.select_mode = elm.ELM_OBJECT_SELECT_MODE_ALWAYS
+
+def deco_normal_mode_cb(btn, gl):
+    gl.decorate_mode = False
+    gl.select_mode = elm.ELM_OBJECT_SELECT_MODE_DEFAULT
+
+
+def test_genlist_decorate_all(parent):
+    win = StandardWindow("Genlist", "Genlist Decorate All Mode",
+                         size=(520,520), autodel=True)
+
+    bx = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(bx)
+    bx.show()
+
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    gl.callback_selected_add(gl_item_selected_cb)
+    bx.pack_end(gl)
+    gl.show()
+
+    itc = MyItemClass(item_style="default", decorate_all_item_style="edit")
+
+    for i in range(100):
+        item_data = [i, False]
+        it = gl.item_append(itc, item_data)
+        item_data.append(it)
+
+
+    bx2 = Box(win, horizontal=True, homogeneous=True,
+              size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_BOTH)
+    bx.pack_end(bx2)
+    bx2.show()
+
+    bt = Button(win, text="Decorate All mode", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(deco_all_mode_cb, gl)
+    bx2.pack_end(bt)
+    bt.show()
+
+    bt = Button(win, text="Normal mode", size_hint_align=FILL_BOTH,
+                size_hint_weight=EXPAND_HORIZ)
+    bt.callback_clicked_add(deco_normal_mode_cb, gl)
+    bx2.pack_end(bt)
+    bt.show()
+
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_decorate_all(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_group.py 
b/examples/elementary/test_genlist_group.py
new file mode 100644
index 0000000..6a3079f
--- /dev/null
+++ b/examples/elementary/test_genlist_group.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ, \
+    EVAS_ASPECT_CONTROL_VERTICAL
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, Genlist, GenlistItemClass
+
+
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+
+# normal items class functions
+def gl_text_get(obj, part, item_data):
+    return "Item # %i" % (item_data,)
+
+def gl_content_get(obj, part, item_data):
+    return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+
+
+# group items class functions
+def glg_text_get(obj, part, item_data):
+    return "Group # %i" % (item_data,)
+
+def glg_content_get(obj, part, data):
+    ic = Icon(obj, file=os.path.join(img_path, "logo.png"),
+              size_hint_aspect=(EVAS_ASPECT_CONTROL_VERTICAL, 1, 1))
+    return ic
+
+
+def test_genlist_group(parent):
+    win = StandardWindow("Genlist", "Genlist Group test",
+                         size=(320,320), autodel=True)
+
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(gl)
+    gl.show()
+
+    itc_i = GenlistItemClass(item_style="default",
+                             text_get_func=gl_text_get,
+                             content_get_func=gl_content_get)
+
+    itc_g = GenlistItemClass(item_style="group_index",
+                             text_get_func=glg_text_get,
+                             content_get_func=glg_content_get)
+
+    for i in range(300):
+        if i % 10 == 0:
+            git = gl.item_append(itc_g, i / 10,
+                                 flags=elm.ELM_GENLIST_ITEM_GROUP)
+            git.select_mode_set(elm.ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY)
+        gl.item_append(itc_i, i, git)
+
+    win.show()
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_group(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_iteration.py 
b/examples/elementary/test_genlist_iteration.py
new file mode 100644
index 0000000..eb3c6e4
--- /dev/null
+++ b/examples/elementary/test_genlist_iteration.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+import time
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, \
+    Genlist, GenlistItem, GenlistItemClass
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+# items class functions
+def gl_text_get(obj, part, item_data):
+    return "Item # %i" % (item_data,)
+
+def gl_content_get(obj, part, item_data):
+    return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+
+
+# comparison function to sort items
+def gl_comp_func(item1, item2):
+    # If data1 is 'less' than data2, -1 must be returned, if it is 'greater',
+    # 1 must be returned, and if they are equal, 0 must be returned.
+    if item1.data < item2.data:
+        return -1
+    elif item1.data == item2.data:
+        return 0
+    elif item1.data > item2.data:
+        return 1
+    else:
+        print("BAAAAAAAAD Comparison!")
+        return 0
+
+
+def test_genlist_iteration(parent):
+    win = StandardWindow("Genlist", "Genlist Iteration test",
+                         size=(320,320), autodel=True)
+
+    gl = Genlist(win, homogeneous=True, mode=elm.ELM_LIST_COMPRESS,
+                 size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(gl)
+    gl.show()
+
+    itc = GenlistItemClass(item_style="default",
+                           text_get_func=gl_text_get,
+                           content_get_func=gl_content_get)
+
+    item_count = 10000
+
+    t1 = time.time()
+    for i in range(item_count):
+        gl.item_append(itc, i)
+    t2 = time.time()
+
+    assert(len(gl) == gl.items_count)
+
+    t3 = time.time()
+    it = gl.first_item
+    while it:
+        d = it.data
+        it = it.next
+    t4 = time.time()
+
+    assert(d == item_count-1)
+
+    t5 = time.time()
+    for it in gl:
+        e = it.data
+    t6 = time.time()
+
+    assert(e == item_count-1)
+    assert(it in gl)
+
+    print("Time to add {0} items:".format(item_count))
+    print(t2-t1)
+    print("Time to iterate item data over {0} items using "
+        "it.next:".format(item_count))
+    print(t4-t3)
+    print("Time to iterate item data over {0} items using "
+        "a python iterator:".format(item_count))
+    print(t6-t5)
+
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_iteration(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_reorder.py 
b/examples/elementary/test_genlist_reorder.py
new file mode 100644
index 0000000..e048a77
--- /dev/null
+++ b/examples/elementary/test_genlist_reorder.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, Box, Check, Label, Frame, \
+    Genlist, GenlistItemClass
+
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+class MyItemClass(GenlistItemClass):
+    def text_get(self, obj, part, data):
+        if part == "elm.text":
+            return "Item # %d" % data
+
+    def content_get(self, obj, part, data):
+        if part == "elm.swallow.icon":
+            return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+
+
+def genlist11_focus_highlight_ck_changed_cb(chk, win):
+    win.focus_highlight_enabled = chk.state
+
+def genlist11_reorder_tg_changed_cb(chk, gl):
+    gl.reorder_mode = chk.state
+
+
+def test_genlist_reorder(parent):
+    win = StandardWindow("genlist-reorder", "Genlist Reorder Mode",
+                         size=(350,500), autodel=True)
+
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+
+    bx = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(bx)
+    bx.show()
+
+    lb = Label(win)
+    lb.text = "<align=left>Enable reorder mode if you want to move items.<br>" 
\
+              "To move longress with mouse.</align>"
+    fr = Frame(win, text="Reorder Mode", content=lb,
+               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
+    bx.pack_end(fr)
+    fr.show()
+
+    hbx = Box(win, horizontal=True, padding=(20,0),
+              size_hint_weight=EXPAND_HORIZ)
+    bx.pack_end(hbx)
+    hbx.show()
+
+    tg = Check(win, style="toggle", text="Reorder Mode:")
+    tg.callback_changed_add(genlist11_reorder_tg_changed_cb, gl)
+    hbx.pack_end(tg)
+    tg.show()
+
+    ck = Check(win, text="Focus Highlight")
+    ck.state = win.focus_highlight_enabled
+    ck.callback_changed_add(genlist11_focus_highlight_ck_changed_cb, win)
+    hbx.pack_end(ck)
+    ck.show()
+
+    itc = MyItemClass()
+    for i in range(1,50):
+        gl.item_append(itc, i)
+    bx.pack_end(gl)
+    gl.show()
+
+    win.show()
+  
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_reorder(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_search.py 
b/examples/elementary/test_genlist_search.py
new file mode 100644
index 0000000..ebb8ecd
--- /dev/null
+++ b/examples/elementary/test_genlist_search.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ, \
+    EVAS_ASPECT_CONTROL_VERTICAL
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, Box, Check, Label, Frame, \
+    Entry, Genlist, GenlistItemClass
+
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+cities = ("Albany","Annapolis","Atlanta","Augusta","Austin","Baton Rouge",
+"Bismarck","Boise","Boston","Carson City","Charleston","Cheyenne","Columbia",
+"Columbus","Concord","Denver","Des Moines","Dover","Frankfort","Harrisburg",
+"Hartford","Helena","Honolulu","Indianapolis","Jackson","Jefferson City",
+"Juneau","Lansing","Lincoln","Little Rock","Madison","Montgomery","Montpelier",
+"Nashville","Oklahoma City","Olympia","Phoenix","Pierre","Providence",
+"Raleigh","Richmond","Sacramento","Saint Paul","Salem","Salt Lake City",
+"Santa Fe","Springfield","Tallahassee","Topeka","Trenton"
+)
+
+class MyItemClass(GenlistItemClass):
+    def text_get(self, obj, part, data):
+        if part == "elm.text":
+            return data
+
+    def content_get(self, obj, part, data):
+        if part == "elm.swallow.icon":
+            return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+
+def genlist_search_cb(en, gl, tg):
+    flags = elm.ELM_GLOB_MATCH_NOCASE if tg.state == False else 0
+    from_item = gl.selected_item.next if gl.selected_item else None
+
+    item = gl.search_by_text_item_get(from_item, "elm.text", en.text, flags)
+    if item:
+        item.selected = True
+        en.focus = True
+    elif gl.selected_item:
+        gl.selected_item.selected = False
+
+
+def test_genlist_search(parent):
+    win = StandardWindow("genlist-search", "Genlist Search by Text",
+                         size=(300,520), autodel=True)
+
+    gl = Genlist(win, size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+
+    bx = Box(win, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(bx)
+    bx.show()
+
+    lb = Label(win)
+    lb.text = \
+    "<align=left>This example show the usage of 
search_by_text_item_get().<br>" \
+    "Enter a search string and press Enter to show the next result.<br>" \
+    "Search will start from the selected item (not included).<br>" \
+    "You can search using glob patterns.</align>"
+    fr = Frame(win, text="Information", content=lb,
+               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
+    bx.pack_end(fr)
+    fr.show()
+
+    tg = Check(win, style="toggle", text="Case Sensitive Search");
+    bx.pack_end(tg)
+    tg.show()
+
+    en = Entry(win, single_line=True, scrollable=True,
+               size_hint_weight=EXPAND_HORIZ, size_hint_align=FILL_HORIZ)
+    en.part_text_set("guide", "Type the search query")
+    en.callback_activated_add(genlist_search_cb, gl, tg)
+    bx.pack_end(en)
+    en.show()
+
+    itc = MyItemClass()
+    for name in cities:
+        gl.item_append(itc, name)
+
+    bx.pack_end(gl)
+    gl.show()
+
+    en.focus = True
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_search(None)
+    elm.run()
diff --git a/examples/elementary/test_genlist_sorted.py 
b/examples/elementary/test_genlist_sorted.py
new file mode 100644
index 0000000..90d795d
--- /dev/null
+++ b/examples/elementary/test_genlist_sorted.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python
+# encoding: utf-8
+
+import os
+
+from efl.evas import EXPAND_BOTH, FILL_BOTH, EXPAND_HORIZ, FILL_HORIZ
+
+from efl import elementary as elm
+from efl.elementary import StandardWindow, Icon, \
+    Genlist, GenlistItem, GenlistItemClass
+
+script_path = os.path.dirname(os.path.abspath(__file__))
+img_path = os.path.join(script_path, "images")
+
+
+# items class functions
+def gl_text_get(obj, part, item_data):
+    return "Item # %i" % (item_data,)
+
+def gl_content_get(obj, part, item_data):
+    return Icon(obj, file=os.path.join(img_path, "logo_small.png"))
+
+
+# comparison function to sort items
+def gl_comp_func(item1, item2):
+    # If data1 is 'less' than data2, -1 must be returned, if it is 'greater',
+    # 1 must be returned, and if they are equal, 0 must be returned.
+    if item1.data < item2.data:
+        return -1
+    elif item1.data == item2.data:
+        return 0
+    elif item1.data > item2.data:
+        return 1
+    else:
+        print("BAAAAAAAAD Comparison!")
+        return 0
+
+
+def test_genlist_sorted(parent):
+    win = StandardWindow("Genlist", "Genlist sorted insert test",
+                         size=(320,320), autodel=True)
+
+    gl = Genlist(win, homogeneous=True, mode=elm.ELM_LIST_COMPRESS,
+                 size_hint_align=FILL_BOTH, size_hint_weight=EXPAND_BOTH)
+    win.resize_object_add(gl)
+    gl.show()
+
+    itc = GenlistItemClass(item_style="default",
+                           text_get_func=gl_text_get,
+                           content_get_func=gl_content_get)
+
+    for i in range(100,-1,-1):
+        gl.item_sorted_insert(itc, i, gl_comp_func)
+
+    win.show()
+
+
+if __name__ == "__main__":
+    elm.policy_set(elm.ELM_POLICY_QUIT, elm.ELM_POLICY_QUIT_LAST_WINDOW_CLOSED)
+    test_genlist_sorted(None)
+    elm.run()

-- 


Reply via email to