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() --