aboutsummaryrefslogtreecommitdiffstats
path: root/examples/elementary
diff options
context:
space:
mode:
authorDave Andreoli <dave@gurumeditation.it>2015-08-16 16:43:43 +0200
committerDave Andreoli <dave@gurumeditation.it>2015-08-16 16:43:43 +0200
commit28812962d505e05abb78085994f22da57d6d11db (patch)
tree8aaa726f9567b1e48be4d1e20acfe08009a076ff /examples/elementary
parentImprove a bit Genlist documentation (diff)
downloadpython-efl-28812962d505e05abb78085994f22da57d6d11db.tar.gz
Rewamped genlist tests
* splitted each test in a single file * use new style imports * some other small improvements here and there
Diffstat (limited to 'examples/elementary')
-rwxr-xr-xexamples/elementary/test.py18
-rw-r--r--examples/elementary/test_genlist.py840
-rw-r--r--examples/elementary/test_genlist_1.py150
-rw-r--r--examples/elementary/test_genlist_2.py227
-rw-r--r--examples/elementary/test_genlist_decorate.py108
-rw-r--r--examples/elementary/test_genlist_decorate_all.py111
-rw-r--r--examples/elementary/test_genlist_group.py65
-rw-r--r--examples/elementary/test_genlist_iteration.py94
-rw-r--r--examples/elementary/test_genlist_reorder.py81
-rw-r--r--examples/elementary/test_genlist_search.py95
-rw-r--r--examples/elementary/test_genlist_sorted.py61
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()